Ruimtelijke Joins met Geopandas
Veeg om het menu te tonen
Ruimtelijke joins zijn een krachtige manier om geospatiale datasets te combineren op basis van hun ruimtelijke relaties in plaats van alleen overeenkomende attribuutwaarden. Met geopandas kun je eenvoudig ruimtelijke joins uitvoeren om vragen te beantwoorden zoals "Welke punten vallen binnen welke polygonen?" of "Welke objecten liggen het dichtst bij elkaar?" Het belangrijkste hulpmiddel hiervoor in geopandas is de methode sjoin(), die twee GeoDataFrame-objecten samenvoegt door hun ruimtelijke relaties te evalueren.
Stel dat je twee ruimtelijke datasets hebt: één met locaties van scholen (als punten) en een andere met wijkgrenzen (als polygonen). Door een ruimtelijke join uit te voeren, kun je bepalen welke school zich in welke wijk bevindt, of het aantal scholen per wijk tellen.
Met de methode sjoin() in geopandas kun je het type ruimtelijke relatie specificeren dat je wilt gebruiken voor de join, zoals within, contains of intersects. Daarnaast kun je het type join kiezen — left, right of inner — wat bepaalt hoe records uit elke dataset worden gekoppeld en behouden in het resultaat.
123456789101112131415161718192021222324252627282930313233343536import geopandas as gpd from shapely.geometry import Point, Polygon # Create GeoDataFrame of points (e.g., schools) points = gpd.GeoDataFrame({ "school": ["A", "B", "C"], "geometry": [ Point(1, 1), Point(2, 2), Point(3, 3) ] }) # Create GeoDataFrame of polygons (e.g., neighborhoods) polygons = gpd.GeoDataFrame({ "neighborhood": ["Red", "Blue"], "geometry": [ Polygon([(0,0), (0,2), (2,2), (2,0)]), # Red neighborhood Polygon([(2,2), (2,4), (4,4), (4,2)]) # Blue neighborhood ] }) # Spatial join: which school is in which neighborhood? left_join = gpd.sjoin(points, polygons, how="left", predicate="within") right_join = gpd.sjoin(points, polygons, how="right", predicate="within") inner_join = gpd.sjoin(points, polygons, how="inner", predicate="within") print("Left Join Result:") print(left_join[["school", "neighborhood"]]) print("\nRight Join Result:") print(right_join[["school", "neighborhood"]]) print("\nInner Join Result:") print(inner_join[["school", "neighborhood"]])
In het bovenstaande voorbeeld zie je drie typen joins:
- Left join: behoudt alle punten (scholen), met toevoeging van wijkinformatie waar beschikbaar;
- Right join: behoudt alle polygonen (wijken), met toevoeging van scholen die erin liggen;
- Inner join: behoudt alleen punten die binnen een wijk liggen.
De juiste keuze van het type join hangt af van je analysetoelstelling. Als je bijvoorbeeld alle scholen wilt zien, ongeacht of ze binnen een wijk vallen, gebruik dan een left join. Wil je alle wijken en de scholen die ze bevatten zien, gebruik dan een right join. Als je alleen geïnteresseerd bent in scholen die binnen wijken liggen, gebruik dan een inner join.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.