数据结构#
GeoPandas实现了两个主要的数据结构,一个 GeoSeries
和一个 GeoDataFrame
。这些是的子类 pandas.Series
和 pandas.DataFrame
,分别为。
GeoSeries#
A GeoSeries
本质上是一个向量,其中向量中的每个条目都是对应于一个观测的一组形状。一个条目可能只由一个形状(如单个多边形)或多个形状组成,这些形状被认为是一个观察值(如组成夏威夷州或印度尼西亚等国家的多个多边形)。
地貌熊猫 有三个基本的几何对象类(它们实际上是 整齐地 对象):
点/多点
线条/多条线
多边形/多个多边形
请注意, GeoSeries
不需要是相同的几何类型,尽管如果不是这样,某些导出操作将失败。
属性和方法概述#
这个 GeoSeries
类实现Shaply对象的几乎所有属性和方法。当应用于 GeoSeries
,它们将按元素方式应用于该系列中的所有几何图形。二进制运算可以在两个 GeoSeries
在这种情况下,操作是按元素执行的。这两个系列将通过匹配索引来对齐。二元运算也可以应用于单个几何图形,在这种情况下,将对具有该几何图形的系列中的每个元素执行该运算。在这两种情况下, Series
或者是 GeoSeries
将视情况退回。
这里简要总结了GeoSeries的几个属性和方法,完整的列表可以在 all attributes and methods page 。还有一系列方法可用于通过扩展现有形状或应用集合论运算(如 geometric manipulations 。
属性#
area
:形状面积(投影单位--参见 projections )bounds
:每个形状的每个轴上的最大和最小坐标的元组total_bounds
:整个GeoSeries的每个轴上的最大和最小坐标的元组geom_type
:几何图形的类型。is_valid
:测试坐标是否构成合理的几何形状 (according to this )。
基本方法#
distance()
: returnsSeries
with minimum distance from each entry toother
representative_point()
:退货GeoSeries
保证位于每个几何图形内的点的数量。是的 NOT 返回质心。to_crs()
: change coordinate reference system. See projections
关系测试#
geom_almost_equals()
:形状几乎和other
(当浮点精度问题使形状略有不同时,这一点很好)contains()
: is shape contained withinother
intersects()
: does shape intersectother
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();

当前,具有国家/地区边框的名为“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();

注: 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