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으로 지리공간 데이터 다루기

연습해 봅시다!

Python으로 지리공간 데이터 다루기

Preparing Video For Download...