使用 GeoPandas 处理空间关系

在 Python 中处理地理空间数据

Dani Arribas-Bel

Geographic Data Science Lab (University of Liverpool)

逐元素空间关系方法

brussels.within(france)
False
paris.within(france)
True
在 Python 中处理地理空间数据

逐元素空间关系方法

brussels.within(france)
False

针对整个 GeoDataFrame?

cities.head()
           name                                      geometry
0  Vatican City   POINT (12.45338654497177 41.90328217996012)
1    San Marino     POINT (12.44177015780014 43.936095834768)
2         Vaduz   POINT (9.516669472907267 47.13372377429357)
3       Lobamba  POINT (31.19999710971274 -26.46666746135247)
...
在 Python 中处理地理空间数据

逐元素空间关系方法

cities 中每个几何体执行 within()

cities.within(france)
0      False
1      False
2      False
       ...  
240    False
241    False
242    False
Length: 243, dtype: bool
cities['geometry'][0].within(france)
False
cities['geometry'][1].within(france)
False
cities['geometry'][2].within(france)
False

...

在 Python 中处理地理空间数据

按空间关系筛选

根据 within() 结果筛选 cities

cities[cities.within(france)]
        name                                     geometry
10    Monaco  POINT (7.406913173465057 43.73964568785249)
13   Andorra    POINT (1.51648596050552 42.5000014435459)
235    Paris   POINT (2.33138946713035 48.86863878981461)
在 Python 中处理地理空间数据

按空间关系筛选

亚马逊河流经哪些国家?

rivers = geopandas.read_file("ne_50m_rivers_lake_centerlines.shp")
rivers.head()
              type      name                                 geometry
0  Lake Centerline      Kama  LINESTRING (51.94 55.70, 51.88 55.69...
1            River      Kama  LINESTRING (53.69 58.21, 53.68 58.27...
2  Lake Centerline      Abay  LINESTRING (37.11 11.85, 37.15 11.89...
...
amazon = rivers[rivers['name'] == 'Amazonas'].geometry.squeeze()
mask = countries.intersects(amazon)
在 Python 中处理地理空间数据

按空间关系筛选

countries[mask]
         name      continent                                 geometry
22     Brazil  South America  POLYGON ((-57.63 -30.22, -56.29 -28....
35   Colombia  South America  POLYGON ((-66.88 1.25, -67.07 1.13, ...
124      Peru  South America  POLYGON ((-69.53 -10.95, -68.67 -12....
  • within
  • contains
  • intersects

更多内容:https://shapely.readthedocs.io/en/latest/

在 Python 中处理地理空间数据

Shapely 对象

paris.within(france)
True

GeoPandas

cities.within(france)
0      False
1      False
2      False
       ...
france.intersects(amazon)
False
countries.intersects(amazon)
0      False
1      False
2      False
       ...
在 Python 中处理地理空间数据

Vamos praticar!

在 Python 中处理地理空间数据

Preparing Video For Download...