用于地理数据的 Python 工具
GeoPandas 是一个为 pandas 对象添加对地理数据的支持的项目。它目前实现了GeoSeries
和GeoDataFrame
类型,它们分别是pandas.Series
和pandas.DataFrame
的子类。 GeoPandas 对象可以作用于形状良好的几何对象并执行几何操作。
GeoPandas 几何运算是笛卡尔的。坐标参考系 (crs) 可以作为对象的属性存储,并在从文件加载时自动设置。可以使用to_crs()
方法将对象转换为新的坐标系。目前还没有强制执行类似的操作坐标,但将来可能会发生变化。
文档可在 geopandas.org(当前版本)和阅读文档(发行版和开发版本)上获取。
GeoPandas 项目采用开放式治理模式,并由 NumFOCUS 提供财政资助。考虑进行免税捐赠,以帮助项目支付开发人员的时间、专业服务、旅行、研讨会和各种其他需求。
有关所有详细信息,请参阅安装文档。 GeoPandas 依赖于以下软件包:
pandas
shapely
pyogrio
pyproj
packaging
此外, matplotlib
是绘图所需的可选依赖项。这些软件包依赖于几个用于地理空间分析的低级库,这可能是安装的一个挑战。因此,我们建议使用 conda 包管理器安装 GeoPandas。有关更多详细信息,请参阅安装文档。
>>> import geopandas
>>> from shapely.geometry import Polygon
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = geopandas.GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0 0, 1 0, 1 1, 0 0))
1 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))
2 POLYGON ((2 0, 3 0, 3 1, 2 1, 2 0))
dtype: geometry
一些地理操作返回正常的 pandas 对象。 GeoSeries
的area
属性将返回pandas.Series
其中包含GeoSeries
中每个项目的面积:
>>> print(g.area)
0 0.5
1 1.0
2 1.0
dtype: float64
其他操作返回 GeoPandas 对象:
>>> g.buffer(0.5)
0 POLYGON ((-0.3535533905932737 0.35355339059327...
1 POLYGON ((-0.5 0, -0.5 1, -0.4975923633360985 ...
2 POLYGON ((1.5 0, 1.5 1, 1.502407636663901 1.04...
dtype: geometry
GeoPandas 对象也知道如何绘制自身。 GeoPandas 使用 matplotlib 进行绘图。要生成GeoSeries
的绘图,请使用:
>>> g.plot()
GeoPandas 还实现了备用构造函数,可以读取 pyogrio 识别的任何数据格式。要读取包含具有纽约市行政区边界的 ESRI shapefile 的 zip 文件(可以使用geodatasets
包获取该示例):
>>> import geodatasets
>>> nybb_path = geodatasets.get_path('nybb')
>>> boros = geopandas.read_file(nybb_path)
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort_index(inplace=True)
>>> boros
BoroName Shape_Leng Shape_Area
BoroCode
1 Manhattan 359299.096471 6.364715e+08
2 Bronx 464392.991824 1.186925e+09
3 Brooklyn 741080.523166 1.937479e+09
4 Queens 896344.047763 3.045213e+09
5 Staten Island 330470.010332 1.623820e+09
geometry
BoroCode
1 MULTIPOLYGON (((981219.0557861328 188655.31579...
2 MULTIPOLYGON (((1012821.805786133 229228.26458...
3 MULTIPOLYGON (((1021176.479003906 151374.79699...
4 MULTIPOLYGON (((1029606.076599121 156073.81420...
5 MULTIPOLYGON (((970217.0223999023 145643.33221...
>>> boros['geometry'].convex_hull
BoroCode
1 POLYGON ((977855.4451904297 188082.3223876953,...
2 POLYGON ((1017949.977600098 225426.8845825195,...
3 POLYGON ((988872.8212280273 146772.0317993164,...
4 POLYGON ((1000721.531799316 136681.776184082, ...
5 POLYGON ((915517.6877458114 120121.8812543372,...
dtype: geometry