Geometrii Shapely și relații spațiale

Lucrul cu date geospațiale în Python

Dani Arribas-Bel

Geographic Data Science Lab (University of Liverpool)

Valori scalare de geometrie

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)
Lucrul cu date geospațiale în Python

Valori scalare de geometrie

brussels = cities.loc[170, 'geometry']
print(brussels)
POINT (4.33137074969045 50.83526293533032)
type(brussels)
shapely.geometry.point.Point
Lucrul cu date geospațiale în Python

Pachetul Python Shapely

type(brussels)
shapely.geometry.point.Point

Shapely

  • Pachet Python pentru manipularea și analiza obiectelor geometrice
  • Oferă obiectele Point, LineString și Polygon
  • GeoSeries (coloana 'geometry' din GeoDataFrame) conține obiecte Shapely
Lucrul cu date geospațiale în Python

Obiecte geometrice

Accesare dintr-un 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()

Creare manuală:

from shapely.geometry import Point
p = Point(1, 2)
print(p)
POINT (1 2)
Lucrul cu date geospațiale în Python

Metode spațiale

Aria unei geometrii:

belgium.area
3.8299974609075753

Distanța dintre 2 geometrii:

brussels.distance(paris)
2.8049127723186214

Și multe altele! (ex. centroid, simplify, ...)

Lucrul cu date geospațiale în Python

Relații spațiale

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

Lucrul cu date geospațiale în Python

Relații spațiale

belgium.contains(brussels)
True
france.contains(brussels)
False
brussels.within(belgium)
True
belgium.touches(france)
True
line.intersects(france)
True
line.intersects(uk)
False
Lucrul cu date geospațiale în Python

Să exersăm!

Lucrul cu date geospațiale în Python

Preparing Video For Download...