0

我正在尝试在纽约地图上绘制一些“车站”坐标。我使用 Geopandas(gpd) 创建一个 GeoDataFrame 并从 gpd.datasets 创建一个 NYC 地图,EPSG 为 4326。

此外,我想按照 Geopandas 教程 ( https://geopandas.org/gallery/plotting_basemap_background.html ) 为我的地图添加背景图像。但是,这适用于 3857 的 EPSG。有什么方法可以维护信息并更改 EPSG?

这是我的代码库

# Creating GeoDataFrame
gdf = gpd.GeoDataFrame(stations, geometry=gpd.points_from_xy(stations.Longitude, stations.Latitude))
# Find the NYC Borough map from contextily pkg
nyc = gpd.read_file(gpd.datasets.get_path('nybb')).to_crs(epsg=4326)
ax = nyc.plot(figsize=(10,10), alpha=0.3, edgecolor="k")

# Contextily adding background image
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))

add_basemap(ax, zoom=10, url='http://tile.stamen.com/toner-lite/tileZ/tileX/tileY.png')
# nyc.to_crs(epsg=4326)
gdf.plot(ax=ax, color="red")
ax.set_axis_off()
4

1 回答 1

0

就在这里。您通常可以将数据的 EPSG 信息传递给add_basemap()上下文函数,通过

add_basemap(ax, crs=nyc.crs.to_string(), zoom=10, url='...')

唯一需要的是,您已在数据上设置了适当的 CRS。

在您的情况下,您可能应该添加该contextily.wrap_tiles()功能。

tr_basemap, tr_extent = ctx.wrap_tiles(basemap, extent, t_crs='EPSG:4326')

这应该给你,你想要什么。

如需进一步阅读,您可以在这里查看:

https://contextily.readthedocs.io/en/latest/warping_guide.html#Convert-the-tiles-to-your-data%E2%80%99s-CRS https://contextily.readthedocs.io/en/latest /reference.html

于 2020-07-23T06:55:45.660 回答