数据结构#
GeoPandas 实现了两种主要数据结构,一个 GeoSeries 和一个
GeoDataFrame。这些分别是 pandas.Series 和
pandas.DataFrame 的子类。
地理系列#
A GeoSeries 本质上是一个向量,其中向量中的每个条目是一组对应于一个观察的形状。一个条目可以只包含一个形状(例如一个单独的多边形)或者多个形状,可视为一个观察(例如组成夏威夷州的多个多边形或像印度尼西亚这样的国家)。
GeoPandas 有三种基本的几何对象类(实际上是 Shapely 对象):
点 / 多点
线 / 多线
多边形 / 多重多边形
请注意,所有的GeoSeries中的条目不需要是相同的几何类型,尽管如果不是这种情况,某些导出操作将会失败。
属性和方法概述#
GeoSeries 类实现了 Shapely 对象几乎所有的属性和方法。当应用于 GeoSeries 时,它们将对系列中的所有几何形状逐元素应用。二元操作可以在两个 GeoSeries 之间应用,此时操作是逐元素进行的。这两个系列将通过匹配索引进行对齐。二元操作也可以应用于单个几何形状,此时操作将对系列中与该几何形状对应的每个元素进行。在任一情况下,将根据需要返回一个 Series 或 GeoSeries。
这里简要总结了一些GeoSeries的属性和方法,完整列表可以在GeoSeries API参考中找到。还有一系列方法可以通过扩展现有形状或应用诸如“并集”的集合操作来创建新形状,如几何操作中所述。
属性#
area: 形状面积(投影单位 - 见 projections)bounds: 每个形状在每个轴上的最大和最小坐标的元组total_bounds: 整个 GeoSeries 每个轴的最大和最小坐标的元组geom_type: 几何类型。
基本方法#
关系测试#
geom_equals_exact(): 形状是否与other相同(至指定小数位的容差)contains(): 是形状包含在other内intersects():形状是否与other相交
地理数据框架#
一个 GeoDataFrame 是一个包含 GeoSeries 的表格数据结构。
GeoDataFrame最重要的属性是它总是有一列GeoSeries,它具有特殊的地位 - “活动几何列”。当空间方法应用于GeoDataFrame(或调用像area这样的空间属性)时,这些操作将始终作用于活动几何列。
活动几何列 - 无论对应的 GeoSeries 叫什么名字 - 都可以通过 geometry 属性 (gdf.geometry) 进行访问,几何列的名称可以通过输入 gdf.geometry.name 或 gdf.active_geometry_name 来找到。
一个 GeoDataFrame 也可以包含其他带有几何(shapely)对象的列,但一次只能有一列是活动几何列。要更改哪个列是活动几何列,请使用 GeoDataFrame.set_geometry() 方法。
一个使用来自 geodatasets 的 geoda.malaria 数据集的示例,包含哥伦比亚的县:
In [1]: import geodatasets
In [2]: colombia = geopandas.read_file(geodatasets.get_path('geoda.malaria'))
In [3]: colombia.head()
Out[3]:
ID ADM0 ... RP2005 geometry
0 1 COLOMBIA ... 61773 POLYGON ((-71.32639 11.84789, -71.33579 11.855...
1 2 COLOMBIA ... 36465 POLYGON ((-72.42191 11.79824, -72.4198 11.795,...
2 3 COLOMBIA ... 18368 POLYGON ((-72.1891 11.5242, -72.1833 11.5323, ...
3 4 COLOMBIA ... 7566 POLYGON ((-72.638 11.3679, -72.6259 11.3499, -...
4 5 COLOMBIA ... 9343 POLYGON ((-74.77489 10.93158, -74.7753 10.9338...
[5 rows x 51 columns]
# Plot countries
In [4]: colombia.plot(markersize=.5);
当前名为“geometry”的列包含县边界,是活跃的几何列:
In [5]: colombia.geometry.name
Out[5]: 'geometry'
您还可以将此列重命名为“borders”:
In [6]: colombia = colombia.rename_geometry('borders')
In [7]: colombia.geometry.name
Out[7]: 'borders'
现在,您创建了质心并使其成为几何体:
In [8]: colombia['centroid_column'] = colombia.centroid
In [9]: colombia = colombia.set_geometry('centroid_column')
In [10]: colombia.plot();
注意:一个 GeoDataFrame 通过名称跟踪活动列,因此如果您更改活动几何列的名称,您还必须重置几何:
gdf = gdf.rename(columns={'old_name': 'new_name'}).set_geometry('new_name')
注意 2: 有些混淆的是,默认情况下,当您使用 read_file() 命令时,来自文件的包含空间对象的列默认命名为“geometry”,并将被设置为活动几何列。然而,尽管对列的名称和跟踪活动列的特殊属性的名称使用相同术语,但它们是不同的。您可以轻松地通过 set_geometry() 命令将活动几何列切换到不同的 GeoSeries 。此外,gdf.geometry 将始终返回活动几何列,而 不是 名为 geometry 的列。如果您希望调用名为“geometry”的列,并且不同的列是活动几何列,请使用 gdf['geometry'],而不是 gdf.geometry。
属性和方法#
对GeoSeries描述的任何属性调用或方法都可以在GeoDataFrame上使用——它们只是应用于活动的几何列GeoSeries。
然而, GeoDataFrames 也有一些额外的方法用于:
显示选项#
GeoPandas具有一个options属性,包含全局配置属性:
In [11]: import geopandas
In [12]: geopandas.options
Out[12]:
Options(
display_precision: None [default: None]
The precision (maximum number of decimals) of the coordinates in the
WKT representation in the Series/DataFrame display. By default (None),
it tries to infer and use 3 decimals for projected coordinates and 5
decimals for geographic coordinates.
use_pygeos: False [default: False]
Deprecated option previously used to enable PyGEOS. It will be removed
in GeoPandas 1.1.
io_engine: None [default: None]
The default engine for ``read_file`` and ``to_file``. Options are
'pyogrio' and 'fiona'.
)
可使用 geopandas.options.display_precision 选项控制几何列中坐标显示的小数位数。在上面的 colombia 示例中,默认显示 5 位小数的地理坐标:
In [13]: colombia['centroid_column'].head()
Out[13]:
0 POINT (-71.74594 12.00885)
1 POINT (-72.56514 11.58174)
2 POINT (-72.35203 11.32204)
3 POINT (-73.14121 11.15251)
4 POINT (-74.64555 10.88454)
Name: centroid_column, dtype: geometry
如果你想更改这个,例如查看更多小数位,可以这样做:
In [14]: geopandas.options.display_precision = 9
In [15]: colombia['centroid_column'].head()
Out[15]:
0 POINT (-71.745940217 12.008854228)
1 POINT (-72.565144214 11.581744777)
2 POINT (-72.352030378 11.322036612)
3 POINT (-73.1412073 11.152507044)
4 POINT (-74.645551117 10.884543716)
Name: centroid_column, dtype: geometry