-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Fix GeoPandas dataset compatibility for naturalearth_cities #5420
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Fix GeoPandas dataset compatibility for naturalearth_cities #5420
Conversation
Update documentation examples to work with both GeoPandas < 1.0 and >= 1.0. The old gpd.datasets.get_path() method was removed in GeoPandas 1.0. This fix: - Tries the old method first (for backward compatibility) - Falls back to geodatasets package for GeoPandas >= 1.0 - Includes a URL fallback if geodatasets is not available Fixes plotly#4778
…DataFrame\n\nRemoves URL fallback to prevent CI build failures in restricted environments.\nKeeps compatibility with GeoPandas <1.0 and >=1.0, and avoids extra deps.
|
Thanks for the PR! We'll try to review this as we have time. This seems to be related to #4782. |
LiamConnors
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR! I have added a few comments. Let me know if you have any questions.
| import geodatasets | ||
| geo_df = gpd.read_file(geodatasets.get_path('naturalearth.cities')) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This dataset doesn't currently exist on geodatasets, so this will never be successful even with geopandas >=1.0
| try: | ||
| # Try the old method (GeoPandas < 1.0) | ||
| geo_df = gpd.read_file(gpd.datasets.get_path('naturalearth_cities')) | ||
| except (AttributeError, ValueError): | ||
| # Use the new method (GeoPandas >= 1.0) | ||
| try: | ||
| import geodatasets | ||
| geo_df = gpd.read_file(geodatasets.get_path('naturalearth.cities')) | ||
| except ImportError: | ||
| # Fallback: build a tiny in-memory GeoDataFrame (no internet or extra deps) | ||
| from shapely.geometry import Point | ||
| geo_df = gpd.GeoDataFrame( | ||
| {"name": ["City A", "City B"], "geometry": [Point(0, 0), Point(10, 10)]}, | ||
| crs="EPSG:4326", | ||
| ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As 'naturalearth.cities' does not exist on geodatasets, I think the best thing to do here would be to have just the example of the dataframe created using GeoDataFrame, like you show in the except block, but with some real cities.
So something like
import plotly.express as px
import geopandas as gpd
from shapely.geometry import Point
geo_df = gpd.GeoDataFrame({
'name': ['London', 'Paris', 'Berlin', 'Madrid', 'Rome'],
'geometry': [
Point(-0.13, 51.51),
Point(2.35, 48.86),
Point(13.41, 52.52),
Point(-3.70, 40.42),
Point(12.50, 41.90),
]
}, crs="EPSG:4326")
fig = px.scatter_map(geo_df,
lat=geo_df.geometry.y,
lon=geo_df.geometry.x,
hover_name="name",
zoom=3)
fig.show()And something similar for the scatter-plots-on-maps example
Update documentation examples to support both GeoPandas < 1.0 and >= 1.0.
Context: GeoPandas 1.0 removed the datasets accessor used in
gpd.datasets.get_path("naturalearth_cities").Changes:
geodatasetspackage for GeoPandas >= 1.0geodatasetsis not availableFiles updated:
Docs-only change.