Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Rumsliga Sammanfogningar med Geopandas | Rumsliga Analysmetoder
Geospatial Analys med Python

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.

123456789101112131415161718192021222324252627282930313233343536
import 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.

question mark

Vilket påstående om rumsliga joiner i geopandas är korrekt?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 1

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 1
some-alt