数据结构#

GeoPandas 实现了两种主要数据结构,一个 GeoSeries 和一个 GeoDataFrame。这些分别是 pandas.Seriespandas.DataFrame 的子类。

地理系列#

A GeoSeries 本质上是一个向量,其中向量中的每个条目是一组对应于一个观察的形状。一个条目可以只包含一个形状(例如一个单独的多边形)或者多个形状,可视为一个观察(例如组成夏威夷州的多个多边形或像印度尼西亚这样的国家)。

GeoPandas 有三种基本的几何对象类(实际上是 Shapely 对象):

  • 点 / 多点

  • 线 / 多线

  • 多边形 / 多重多边形

请注意,所有的GeoSeries中的条目不需要是相同的几何类型,尽管如果不是这种情况,某些导出操作将会失败。

属性和方法概述#

GeoSeries 类实现了 Shapely 对象几乎所有的属性和方法。当应用于 GeoSeries 时,它们将对系列中的所有几何形状逐元素应用。二元操作可以在两个 GeoSeries 之间应用,此时操作是逐元素进行的。这两个系列将通过匹配索引进行对齐。二元操作也可以应用于单个几何形状,此时操作将对系列中与该几何形状对应的每个元素进行。在任一情况下,将根据需要返回一个 SeriesGeoSeries

这里简要总结了一些GeoSeries的属性和方法,完整列表可以在GeoSeries API参考中找到。还有一系列方法可以通过扩展现有形状或应用诸如“并集”的集合操作来创建新形状,如几何操作中所述。

属性#

基本方法#

关系测试#

地理数据框架#

一个 GeoDataFrame 是一个包含 GeoSeries 的表格数据结构。

GeoDataFrame最重要的属性是它总是有一列GeoSeries,它具有特殊的地位 - “活动几何列”。当空间方法应用于GeoDataFrame(或调用像area这样的空间属性)时,这些操作将始终作用于活动几何列。

活动几何列 - 无论对应的 GeoSeries 叫什么名字 - 都可以通过 geometry 属性 (gdf.geometry) 进行访问,几何列的名称可以通过输入 gdf.geometry.namegdf.active_geometry_name 来找到。

一个 GeoDataFrame 也可以包含其他带有几何(shapely)对象的列,但一次只能有一列是活动几何列。要更改哪个列是活动几何列,请使用 GeoDataFrame.set_geometry() 方法。

一个使用来自 geodatasetsgeoda.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);
../../_images/colombia_borders.png

当前名为“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();
../../_images/colombia_centroids.png

注意:一个 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