Rumlige Joins med Geopandas
Stryg for at vise menuen
Rumlige joins er en effektiv metode til at kombinere geospatiale datasæt baseret på deres rumlige relationer i stedet for blot at matche attributværdier. Med geopandas kan du nemt udføre rumlige joins for at besvare spørgsmål som "Hvilke punkter ligger inden for hvilke polygoner?" eller "Hvilke objekter er tættest på hinanden?" Det centrale værktøj til dette i geopandas er metoden sjoin(), som sammenfletter to GeoDataFrame-objekter ved at evaluere deres rumlige relationer.
Antag, at du har to geospatiale datasæt: et med placeringer af skoler (som punkter) og et andet med afgrænsninger af kvarterer (som polygoner). Ved at udføre et rumligt join kan du bestemme, hvilken skole der ligger i hvilket kvarter, eller tælle antallet af skoler pr. kvarter.
Metoden sjoin() i geopandas giver dig mulighed for at angive typen af rumlig relation, der skal bruges til joinet, såsom within, contains eller intersects. Derudover kan du vælge typen af join — left, right eller inner — hvilket bestemmer, hvordan poster fra hvert datasæt matches og bevares 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 eksemplet ovenfor ses tre typer joins:
- Left join: bevarer alle punkter (skoler) og tilføjer information om kvarter, hvor det er muligt;
- Right join: bevarer alle polygoner (kvarterer) og tilføjer skoler, der er indeholdt i dem;
- Inner join: bevarer kun punkter, der ligger inden for et kvarter.
Valget af den korrekte join-type afhænger af analysens formål. Hvis du for eksempel ønsker alle skoler uanset om de ligger i et kvarter, skal du bruge et left join. Hvis du vil se alle kvarterer og de skoler, de indeholder, skal du bruge et right join. Hvis du kun er interesseret i skoler, der ligger inden for kvarterer, skal du bruge et inner join.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat