我在地图上添加一个基本地图有困难。我的地理数据是用X和Y的一串点的和弦来创建的。
gdf = geo.GeoDataFrame(
df, geometry=gpd.points_from_xy(df['X'], df['Y']))
gdf.set_crs(epsg=3857)看起来像这样:

在使用上下文获取基本地图之后,我无法正确地显示基本地图。和弦应该显示密西西比河流域的底部。
ax = gdf.plot(color="red", figsize=(9, 9))
cx.add_basemap(ax, zoom=0, crs= gdf.crs)

如果我的代码有什么问题,请告诉我,为什么它没有出现。
谢谢!
发布于 2022-10-19 18:31:45
看起来您的数据位于WGS84 84/EPSG:4326(即lat/lon)坐标中。所以我认为你把geopandas.GeoDataFrame.set_crs和geopandas.GeoDataFrame.to_crs混淆了,它告诉地质公园数据的CRS是什么,而geopandas.GeoDataFrame.to_crs则把数据从当前的CRS转换成你指定的新的CRS。另外,请注意,在默认情况下,这些操作都不是就地的。所以我觉得你想:
gdf = geo.GeoDataFrame(
df, geometry=gpd.points_from_xy(df['X'], df['Y'])
)
gdf = gdf.set_crs("epsg:4326")
gdf_mercator = gdf.to_crs("epsg:3857")发布于 2022-10-19 18:40:44
这和迈克尔·德尔加多的回答是一样的。在GeoDataFrame构建时声明CRS比较简单。还要确保您使用的是正确的CRS。
米维
import geopandas as gpd
import geopandas as geo
import pandas as pd
import contextily as cx
# construct a dataframe with X and Y of some points in US
places = gpd.read_file(
gpd.datasets.get_path("naturalearth_cities"),
mask=gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")).loc[
lambda d: d["iso_a3"].eq("USA")
],
)
df = pd.DataFrame({"X": places.geometry.x, "Y": places.geometry.y})
# user code, state CRS at construction time
gdf = geo.GeoDataFrame(
df, geometry=gpd.points_from_xy(df["X"], df["Y"]), crs="epsg:4326"
)
ax = gdf.plot(color="red", figsize=(9, 9))
cx.add_basemap(ax, zoom=0, crs=gdf.crs)https://stackoverflow.com/questions/74129976
复制相似问题