用 shapefile 文件作图


shapefile 文件是美国 ESRI(Environmental Systems Research Institute) 开发的一种矢量图形格式的文件,主要用于描述球面上的几何对象,包括点、线与多边形。以中国第二次冰川编目为例,其 Shapefile 文件可存储每一条冰川的多边形(顶点由一系列经纬度坐标构成),以及冰川的属性,例如冰川的名称、位置、面积、海拔等。Shapefile 通常由多个子文件组成,分别为 “.shp”、”.shx”、”.dbf”、”.prj” ,其中 “.shp” 用于保存几何体,例如冰川的形状;”.shx” 用于记录每一个几何体在 “.shp” 中的序号,例如冰川的索引;”.dbf” 用于存储几何体的属性,例如冰川的面积;”.prj” 用于保存地理坐标系统与投影信息。

绘制中国大陆以及省界市界的轮廓图

首先从 GADM(Database of Global Administrative Areas) 下载中国大陆的 shapefile 文件,下载后的数据主要包含四个层级:

  • gadm36_CHN_0,中国大陆的多边形文件
  • gadm36_CHN_1,各个省自治区直辖市的多边形文件
  • gadm36_CHN_2,各个市的多边形文件
  • gadm36_CHN_3,各个县的多边形文件

这里用 cartopy.io.shapereader 读取 gadm36_CHN_0.shp 文件并结合从 Natural Earth 下载的 1:50m Raster Data 文件来绘制中国大陆的轮廓图。

输出结果为

中国大陆的轮廓图

用 cartopy.io.shapereader 读取 gadm36_CHN_1 文件并结合从 Natural Earth 下载的 1:50m Raster Data 文件来绘制中国大陆各个省自治区直辖市的轮廓图。

输出结果为

中国大陆各个省自治区直辖市的轮廓图

用 cartopy.io.shapereader 读取 gadm36_CHN_2 文件并结合从 Natural Earth 下载的 1:50m Raster Data 文件来绘制中国大陆各个市的轮廓图。

输出结果为

中国大陆各个市的轮廓图

用 cartopy.io.shapereader 读取 gadm36_CHN_1 文件并结合从 Natural Earth 下载的 1:50m Raster Data 文件来绘制中国大陆的新疆、西藏、青海、四川、云南等地区的轮廓图。

输出结果为

中国大陆的新疆、西藏、青海、四川、云南等地区的轮廓图

注意:在阿克赛钦、藏南等地区,GADM 提供的中国大陆边界数据存在明显的错误,更多详情请参考 GMT 自带中国国界问题。准确的中国边界数据以及其他的地学数据请参考 GMT 中文社区数据集

绘制亚洲地区的山脉图

geopandas 读取从 Global Mountain Biodiversity Assessment 下载的 GMBA mountain inventory_V1.2_mega-regions 文件来绘制亚洲地区山脉的轮廓图。

输出结果为

亚洲地区共列出了 459 条山脉(见下图),第零列为山脉的序号,第一列和第二列为山脉的名称和所属国家,第三列为山脉的多边形,其顶点由一系列的(经度,纬度)构成。

亚洲地区山脉的轮廓图

geopandas 读取从 Global Mountain Biodiversity Assessment 下载的 GMBA mountain inventory_V1.2_mega-regions 文件来绘制喜马拉雅山、念青唐古拉山、横断山脉的轮廓图。

输出结果为

喜马拉雅山、念青唐古拉山、横断山脉的轮廓图

在使用 ax.add_geometries 添加几何体时需注意:若几何体的类型为 MultiPolygon,则 geometry 和 [geometry] 都是可以的,若几何体的类型为 Polygon,则必须是 [geometry] 。查看几何体类型可通过 list(shp.records())sf.geom_type 来实现。


参考

关于 “用 shapefile 文件作图” 的 2 个意见

  1. 提一点点意见:GADM 提供的中国边界数据有误(未包含台湾省和藏南地区),建议使用 GMT 中文社区提供的中国边界数据。

发表评论

电子邮件地址不会被公开。 必填项已用*标注