Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Rumlige Joins med Geopandas | Rumlige Analyseteknikker
Geospatiel Analyse med Python

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.

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

question mark

Hvilken påstand om spatial joins i geopandas er korrekt?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 1
some-alt