数据结构#

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

GeoSeries#

A GeoSeries 本质上是一个向量,其中向量中的每个条目都是对应于一个观测的一组形状。一个条目可能只由一个形状(如单个多边形)或多个形状组成,这些形状被认为是一个观察值(如组成夏威夷州或印度尼西亚等国家的多个多边形)。

地貌熊猫 有三个基本的几何对象类(它们实际上是 整齐地 对象):

  • 点/多点

  • 线条/多条线

  • 多边形/多个多边形

请注意, GeoSeries 不需要是相同的几何类型,尽管如果不是这样,某些导出操作将失败。

属性和方法概述#

这个 GeoSeries 类实现Shaply对象的几乎所有属性和方法。当应用于 GeoSeries ,它们将按元素方式应用于该系列中的所有几何图形。二进制运算可以在两个 GeoSeries 在这种情况下,操作是按元素执行的。这两个系列将通过匹配索引来对齐。二元运算也可以应用于单个几何图形,在这种情况下,将对具有该几何图形的系列中的每个元素执行该运算。在这两种情况下, Series 或者是 GeoSeries 将视情况退回。

这里简要总结了GeoSeries的几个属性和方法,完整的列表可以在 all attributes and methods page 。还有一系列方法可用于通过扩展现有形状或应用集合论运算(如 geometric manipulations

属性#

基本方法#

关系测试#

GeoDataFrame#

A GeoDataFrame 是一个表格数据结构,它包含一个 GeoSeries

的最重要的属性 GeoDataFrame 就是它总是有一个 GeoSeries 具有特殊状态的列。这 GeoSeries 被称为 GeoDataFrame 当将空间方法应用于 GeoDataFrame (或空间属性,如 area 被调用),则此命令将始终作用于“GEOMETRY”列。

无论它的名称是什么,都可以通过 geometry 属性 (gdf.geometry ),以及 geometry 列可以通过键入以下命令找到 gdf.geometry.name

A GeoDataFrame 也可以包含具有几何体(形状)对象的其他柱,但一次只能有一列是激活的几何体。要更改哪一列是活动几何图形列,请使用 GeoDataFrame.set_geometry() 方法。

一个使用 worlds GeoDataFrame:

In [1]: world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

In [2]: world.head()
Out[2]: 
     pop_est      continent                      name iso_a3  gdp_md_est                                           geometry
0     920938        Oceania                      Fiji    FJI      8374.0  MULTIPOLYGON (((180.00000 -16.06713, 180.00000...
1   53950935         Africa                  Tanzania    TZA    150600.0  POLYGON ((33.90371 -0.95000, 34.07262 -1.05982...
2     603253         Africa                 W. Sahara    ESH       906.5  POLYGON ((-8.66559 27.65643, -8.66512 27.58948...
3   35623680  North America                    Canada    CAN   1674000.0  MULTIPOLYGON (((-122.84000 49.00000, -122.9742...
4  326625791  North America  United States of America    USA  18560000.0  MULTIPOLYGON (((-122.84000 49.00000, -120.0000...

#Plot countries
In [3]: world.plot();
../../_images/world_borders.png

当前,具有国家/地区边框的名为“GEOMETRY”的列是活动的几何图形列:

In [4]: world.geometry.name
Out[4]: 'geometry'

我们还可以将此列重命名为“BORDERS”:

In [5]: world = world.rename(columns={'geometry': 'borders'}).set_geometry('borders')

In [6]: world.geometry.name
Out[6]: 'borders'

现在,我们创建质心并使其成为几何体:

In [7]: world['centroid_column'] = world.centroid

In [8]: world = world.set_geometry('centroid_column')

In [9]: world.plot();
../../_images/world_centroids.png

注: A GeoDataFrame 按名称跟踪活动列,因此如果重命名活动几何图形列,还必须重置几何图形::

gdf = gdf.rename(columns={'old_name': 'new_name'}).set_geometry('new_name')

注2: 有些令人困惑的是,在默认情况下,当您使用 read_file() 命令时,默认情况下,包含文件中的空间对象的列被命名为“GEOMETRY”,并将被设置为活动的几何图形列。然而,尽管使用相同的术语表示列的名称和跟踪活动列的特殊属性的名称,但它们是不同的。您可以轻松地将活动几何列移动到不同的 GeoSeries 使用 set_geometry() 指挥部。此外, gdf.geometry 将始终返回激活的几何图形列, not 名为的列 geometry 。如果您希望调用名为“geomety”的列,并且另一个列是活动的几何列,请使用 gdf['geometry'] ,非 gdf.geometry

属性和方法#

描述的任何属性调用或方法 GeoSeries 将在一个 GeoDataFrame --实际上,它们只是应用于“几何学” GeoSeries

然而, GeoDataFrames 还有一些额外的输入和输出方法,这些方法在 Input and Output 页和用于地理编码的,请参阅 Geocoding

显示选项#

GeoPandas有一个 options 属性,当前只有一个配置选项来控制:

In [10]: import geopandas

In [11]: geopandas.options
Out[11]: 
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]
      Whether to use PyGEOS to speed up spatial operations. The default is
      True if PyGEOS is installed, and follows the USE_PYGEOS environment
      variable if set.
  )

这个 geopandas.options.display_precision 选项可以控制在几何图形列的坐标显示中显示的小数位数。在 world 以上示例中,默认情况下显示地理坐标的5个小数:

In [12]: world['centroid_column'].head()
Out[12]: 
0    POINT (163.85316 -17.31631)
1      POINT (34.75299 -6.25773)
2     POINT (-12.13783 24.29117)
3     POINT (-98.14238 61.46908)
4    POINT (-112.59944 45.70563)
Name: centroid_column, dtype: geometry

如果要更改此设置,例如查看更多小数,可以执行以下操作:

In [13]: geopandas.options.display_precision = 9

In [14]: world['centroid_column'].head()
Out[14]: 
0    POINT (163.853164645 -17.316309426)
1      POINT (34.752989855 -6.257732429)
2     POINT (-12.137831112 24.291172960)
3     POINT (-98.142381372 61.469076145)
4    POINT (-112.599435912 45.705628002)
Name: centroid_column, dtype: geometry