在 cartopy 地图上绘制 shapefile 城市边界
Plot shapefile city borders on top of cartopy map
我正在尝试使用获得的 shapefile here and following this example 在 cartopy 地形图的顶部绘制湾区 city/town 边界的轮廓。出于某种原因,即使我通过 zorder
指定边框位于顶部,边框也不会显示。我错过了什么吗?
# import functions
import matplotlib.pyplot as plt
import cartopy.io.img_tiles as cimgt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# Create a Stamen terrain background instance
stamen_terrain = cimgt.Stamen('terrain-background')
fig = plt.figure(figsize = (10, 10))
ax = fig.add_subplot(1, 1, 1, projection=stamen_terrain.crs)
# Set range of map, stipulate zoom level
ax.set_extent([-122.7, -121.5, 37.15, 38.15], crs=ccrs.Geodetic())
ax.add_image(stamen_terrain, 12, zorder = 0)
# Add city borders - not working
filename = r'./shapefile/ba_cities.shp' # from https://earthworks.stanford.edu/catalog/stanford-vj593xs7263
shape_feature = ShapelyFeature(Reader(filename).geometries(), ccrs.PlateCarree(), edgecolor='black')
ax.add_feature(shape_feature, zorder = 1)
plt.show()
正如@ImportanceOfBeingErnest 和@swatchai 建议的那样,ShapelyFeature cartopy.feature.ShapelyFeature()
中的 CRS(坐标参考系统)参数不正确。
可以在 shapefile 附带的 .xml 文件之一中找到正确的 EPSG(欧洲石油调查组?)代码:
<gco:CharacterString>26910</gco:CharacterString>
</code>
<codeSpace>
<gco:CharacterString>EPSG</gco:CharacterString>
并将其作为第二个参数传递到 ShapelyFeature()
中就可以让 shapefile 正确绘制城市边界:
# Add city borders
filename = r'./shapefile/ba_cities.shp'
shape_feature = ShapelyFeature(Reader(filename).geometries(), ccrs.epsg(26910),
linewidth = 1, facecolor = (1, 1, 1, 0),
edgecolor = (0.5, 0.5, 0.5, 1))
ax.add_feature(shape_feature)
plt.show()
我正在尝试使用获得的 shapefile here and following this example 在 cartopy 地形图的顶部绘制湾区 city/town 边界的轮廓。出于某种原因,即使我通过 zorder
指定边框位于顶部,边框也不会显示。我错过了什么吗?
# import functions
import matplotlib.pyplot as plt
import cartopy.io.img_tiles as cimgt
import cartopy.crs as ccrs
from cartopy.io.shapereader import Reader
from cartopy.feature import ShapelyFeature
# Create a Stamen terrain background instance
stamen_terrain = cimgt.Stamen('terrain-background')
fig = plt.figure(figsize = (10, 10))
ax = fig.add_subplot(1, 1, 1, projection=stamen_terrain.crs)
# Set range of map, stipulate zoom level
ax.set_extent([-122.7, -121.5, 37.15, 38.15], crs=ccrs.Geodetic())
ax.add_image(stamen_terrain, 12, zorder = 0)
# Add city borders - not working
filename = r'./shapefile/ba_cities.shp' # from https://earthworks.stanford.edu/catalog/stanford-vj593xs7263
shape_feature = ShapelyFeature(Reader(filename).geometries(), ccrs.PlateCarree(), edgecolor='black')
ax.add_feature(shape_feature, zorder = 1)
plt.show()
正如@ImportanceOfBeingErnest 和@swatchai 建议的那样,ShapelyFeature cartopy.feature.ShapelyFeature()
中的 CRS(坐标参考系统)参数不正确。
可以在 shapefile 附带的 .xml 文件之一中找到正确的 EPSG(欧洲石油调查组?)代码:
<gco:CharacterString>26910</gco:CharacterString>
</code>
<codeSpace>
<gco:CharacterString>EPSG</gco:CharacterString>
并将其作为第二个参数传递到 ShapelyFeature()
中就可以让 shapefile 正确绘制城市边界:
# Add city borders
filename = r'./shapefile/ba_cities.shp'
shape_feature = ShapelyFeature(Reader(filename).geometries(), ccrs.epsg(26910),
linewidth = 1, facecolor = (1, 1, 1, 0),
edgecolor = (0.5, 0.5, 0.5, 1))
ax.add_feature(shape_feature)
plt.show()