本系列文章是根据GeoPandas
官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。
点击“阅读原文”或者直接访问下方链接,查看翻译整理的“GeoPandas 0.12.2 中文文档”。
https://www.mizhushare.com/docs
-
可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/185Qs6RpVhyP2nm9VV39Ehw?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/geopandas
读取数据:
GeoPandas
可以使用geopandas.read_file()
命令读取几乎任何基于矢量的空间数据格式,包括 ESRI shapefile
、GeoJSON
、 GeoPackage
等文件格式,返回一个 GeoDataFrame
对象。上述命令的实现是因为 GeoPandas
使用了 fiona
库,而 fiona
库又使用了一个旨在促进空间数据转换的名为 GDAL/OGR
的大型开源程序。
在文件名之后传递给geopandas.read_file()
的任何参数都会直接传递给fiona.open()
,后者会进行实际的数据导入。
总的来说,geopandas.read_file()
非常有效,无需额外参数就可以做你想做的事,如要获得更多帮助,请输入:
1>>> import fiona
2
3>>> help(fiona.open)
除此之外,可以使用driver
关键字显式设置驱动程序(shapefile
、GeoJSON
),目前fiona
只公开了默认的驱动程序,可以通过以下命令查看:
1>>> import fiona
2>>> fiona.supported_drivers
-
加载shapefile文件:
1>>> china_gdf = gpd.read_file("./datasets/china/china_provinces.shp")
2>>> china_gdf.head()
3 OBJECTID 省域代 Shape_Leng Shape_Area geometry
40 1 11 10.115308 1.734812 POLYGON ((116.67527 41.04010, 116.67616 41.040...
51 2 12 12.341771 1.231230 POLYGON ((117.44383 40.25101, 117.45611 40.246...
62 3 13 57.093011 19.725624 MULTIPOLYGON (((118.85390 39.10692, 118.84934 ...
73 4 14 27.203120 15.993148 POLYGON ((114.13714 40.73445, 114.13860 40.732...
84 5 15 149.939859 129.126641 MULTIPOLYGON (((124.48740 40.15550, 124.48747 ...
9
10>>> china_gdf.plot()
绘图结果如下图所示:
-
加载geojson格式数据:
1>>> china_gdf = gpd.read_file('./datasets/china.geojson')
2>>> china_gdf.head()
3 OBJECTID 省域代 Shape_Leng Shape_Area geometry
40 1 11 10.115308 1.734812 POLYGON ((116.67527 41.04010, 116.67616 41.040...
51 2 12 12.341771 1.231230 POLYGON ((117.44383 40.25101, 117.45611 40.246...
62 3 13 57.093011 19.725624 MULTIPOLYGON (((118.85390 39.10692, 118.84934 ...
73 4 14 27.203120 15.993148 POLYGON ((114.13714 40.73445, 114.13860 40.732...
84 5 15 149.939859 129.126641 MULTIPOLYGON (((124.48740 40.15550, 124.48747 ...
-
加载文件地理数据库中的数据:
1# 文件地理数据库中包含两个文件:china_national + china_provinces
2# 使用 layer 关键字从多层文件中选择一个图层读取文件地理数据库中指定文件
3>>> china_national = gpd.read_file('./datasets/china.gdb' , layer = "china_national")
4>>> china_national
5 OBJECTID AREA PERIMETER ... Shape_Length Shape_Area geometry
60 1 0.001184 0.168217 ... 462.764697 961.831319 MULTIPOLYGON (((113.23390 6.31909, 113.23230 6...
7
8[1 rows x 10 columns]
9
10>>> china_national.plot()
绘图结果如下图所示:
1>>> china_provinces = gpd.read_file('./datasets/china.gdb' , layer = "china_provinces")
2>>> china_provinces.plot()
绘图结果如下图所示:
-
加载 web URL 资源:
在 fiona
支持的情况下,geopandas
还可以直接从 web URL
加载资源,例如来自 geojson.xyz
的 GeoJSON
文件:
1>>> url = "http://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_110m_land.geojson"
2
3>>> gdf = gpd.read_file(url)
4>>> gdf
5 scalerank featureclass geometry
60 1 Country POLYGON ((-59.57209 -80.04018, -59.86585 -80.5...
71 1 Country POLYGON ((-159.20818 -79.49706, -161.12760 -79...
82 1 Country POLYGON ((-45.15476 -78.04707, -43.92083 -78.4...
93 1 Country POLYGON ((-121.21151 -73.50099, -119.91885 -73...
104 1 Country POLYGON ((-125.55957 -73.48135, -124.03188 -73...
11.. ... ... ...
12122 1 Country POLYGON ((51.13619 80.54728, 49.79368 80.41543...
13123 1 Country POLYGON ((99.93976 78.88094, 97.75794 78.75620...
14124 1 Country POLYGON ((-87.02000 79.66000, -85.81435 79.336...
15125 1 Country POLYGON ((-68.50000 83.10632, -65.82735 83.028...
16126 1 Country POLYGON ((-27.10046 83.51966, -20.84539 82.726...
17
18[127 rows x 3 columns]
19
20>>> gdf.plot()
绘图结果如下图所示:
-
加载包含数据的 ZIP 文件:
如果数据集位于 ZIP
文件的文件夹中,则必须附加其名称;如果 ZIP
文件中的一个文件夹中有多个数据集,您还必须指定文件名。
1>>> zipfile = "./datasets/nybb_16a.zip"
2>>> nybb = gpd.read_file(zipfile)
3>>> nybb
4 BoroCode BoroName Shape_Leng Shape_Area geometry
50 5 Staten Island 330470.010332 1.623820e+09 MULTIPOLYGON (((970217.022 145643.332, 970227....
61 4 Queens 896344.047763 3.045213e+09 MULTIPOLYGON (((1029606.077 156073.814, 102957...
72 3 Brooklyn 741080.523166 1.937479e+09 MULTIPOLYGON (((1021176.479 151374.797, 102100...
83 1 Manhattan 359299.096471 6.364715e+08 MULTIPOLYGON (((981219.056 188655.316, 980940....
94 2 Bronx 464392.991824 1.186925e+09 MULTIPOLYGON (((1012821.806 229228.265, 101278...
10
11>>> nybb.plot()
绘图结果如下图所示:
写出数据:
可以使用 geopandas.GeoDataFrame.to_file()
方法将 GeoDataFrames
导出为许多不同的标准格式。
此外,可以使用 geopandas.GeoDataFrame.to_postgis()
方法将 GeoDataFrames
上传到 PostGIS
数据库。
GeoDataFrames
可以包含比大多数文件格式支持的字段类型更多的字段类型。例如,元组或列表可以很容易地存储在 GeoDataFrames
中,但将它们保存到例如GeoPackage
或 Shapefile
将引发 ValueError
。在保存到文件之前,需要将它们转换为所选驱动程序支持的格式。
-
写出为Shapefile文件:
1>>> china_gdf.to_file("./out/china.shp",encoding="utf-8")
-
写出为GeoJSON文件:
1>>> china_gdf.to_file("./out/china.geojson", driver='GeoJSON')
-
写出为GeoPackage文件:
1>>> china_national.to_file("./out/package.gpkg", layer='china_national', driver="GPKG")
2>>> china_provinces.to_file("./out/package.gpkg", layer='china_provinces', driver="GPKG")
本篇文章来源于微信公众号: 码农设计师