Rumsliga Sammanfogningar med Geopandas
Svep för att visa menyn
Rumsliga joins är ett kraftfullt sätt att kombinera geospatiala datamängder baserat på deras rumsliga relationer istället för att bara matcha attributvärden. Med geopandas kan du enkelt utföra rumsliga joins för att besvara frågor som "Vilka punkter ligger inom vilka polygoner?" eller "Vilka objekt är närmast varandra?" Det centrala verktyget för detta i geopandas är metoden sjoin(), som sammanfogar två GeoDataFrame-objekt genom att utvärdera deras rumsliga relationer.
Anta att du har två geospatiala datamängder: en som innehåller skolors positioner (som punkter) och en annan som innehåller gränser för bostadsområden (som polygoner). Genom att utföra en rumslig join kan du avgöra vilken skola som ligger i vilket bostadsområde, eller räkna antalet skolor per område.
Metoden sjoin() i geopandas låter dig ange vilken typ av rumslig relation som ska användas för joinen, såsom within, contains eller intersects. Dessutom kan du välja typ av join — left, right eller inner — vilket avgör hur poster från varje datamängd matchas och behålls i resultatet.
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"]])
I exemplet ovan ser du tre typer av joins:
- Left join: behåller alla punkter (skolor) och lägger till information om bostadsområde där det finns tillgängligt;
- Right join: behåller alla polygoner (bostadsområden) och lägger till skolor som finns inom dem;
- Inner join: behåller endast punkter som ligger inom ett bostadsområde.
Valet av rätt typ av join beror på dina analysmål. Om du till exempel vill ha med alla skolor oavsett om de ligger inom ett bostadsområde, använd left join. Om du vill se alla bostadsområden och de skolor de innehåller, använd right join. Om du bara är intresserad av skolor som ligger inom bostadsområden, använd inner join.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal