Shapely-geometrieën en ruimtelijke relaties

Werken met georuimtelijke data in Python

Dani Arribas-Bel

Geographic Data Science Lab (University of Liverpool)

Scalare geometriewaarden

cities = geopandas.read_file("ne_110m_populated_places.shp")
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)
4    Luxembourg   POINT (6.130002806227083 49.61166037912108)
brussels = cities.loc[170, 'geometry']
print(brussels)
POINT (4.33137074969045 50.83526293533032)
Werken met georuimtelijke data in Python

Scalare geometriewaarden

brussels = cities.loc[170, 'geometry']
print(brussels)
POINT (4.33137074969045 50.83526293533032)
type(brussels)
shapely.geometry.point.Point
Werken met georuimtelijke data in Python

Het Shapely Python-pakket

type(brussels)
shapely.geometry.point.Point

Shapely

  • Python-pakket voor manipulatie en analyse van geometrische objecten
  • Biedt de objecten Point, LineString en Polygon
  • GeoSeries (de 'geometry'-kolom van GeoDataFrame) bevat shapely-objecten
Werken met georuimtelijke data in Python

Geometrie-objecten

Toegang via een GeoDataFrame:

brussels = cities.loc[170, 'geometry']
paris = cities.loc[235, 'geometry']
belgium = countries.loc[countries['name'] == 'Belgium', 'geometry'].squeeze()
france = countries.loc[countries['name'] == 'France', 'geometry'].squeeze()
uk = countries.loc[countries['name'] == 'United Kingdom', 'geometry'].squeeze()

Handmatig maken:

from shapely.geometry import Point
p = Point(1, 2)
print(p)
POINT (1 2)
Werken met georuimtelijke data in Python

Ruimtelijke methoden

De oppervlakte van een geometrie:

belgium.area
3.8299974609075753

De afstand tussen 2 geometrieën:

brussels.distance(paris)
2.8049127723186214

En veel meer! (bijv. centroid, simplify, ...)

Werken met georuimtelijke data in Python

Ruimtelijke relaties

geopandas.GeoSeries([belgium, france, uk, paris,  brussels, line]).plot()

Werken met georuimtelijke data in Python

Ruimtelijke relaties

belgium.contains(brussels)
True
france.contains(brussels)
False
brussels.within(belgium)
True
belgium.touches(france)
True
line.intersects(france)
True
line.intersects(uk)
False
Werken met georuimtelijke data in Python

Laten we oefenen!

Werken met georuimtelijke data in Python

Preparing Video For Download...