Spatiaaliset Liitokset Geopandasilla
Pyyhkäise näyttääksesi valikon
Aineistojen yhdistäminen spatiaalisten suhteiden perusteella on tehokas tapa yhdistää paikkatietoaineistoja pelkkien attribuuttien sijaan. geopandas-kirjastolla voit helposti suorittaa spatiaalisen yhdistämisen ja vastata kysymyksiin, kuten "Mitkä pisteet sijaitsevat missäkin polygonissa?" tai "Mitkä kohteet ovat lähimpänä toisiaan?" Tärkein työkalu tähän geopandas-kirjastossa on sjoin()-metodi, joka yhdistää kaksi GeoDataFrame-objektia arvioimalla niiden spatiaalista suhdetta.
Oletetaan, että sinulla on kaksi paikkatietoaineistoa: toinen sisältää koulujen sijainnit (pisteinä) ja toinen kaupunginosien rajat (polygoneina). Spatiaalisen yhdistämisen avulla voit selvittää, missä kaupunginosassa kukin koulu sijaitsee tai laskea koulujen määrän kaupunginosittain.
sjoin()-kirjaston geopandas-metodilla voit määrittää, minkälaista spatiaalista suhdetta yhdistämisessä käytetään, kuten within, contains tai intersects. Lisäksi voit valita yhdistämistyypin — left, right tai inner — joka määrittää, miten kummankin aineiston rivit yhdistetään ja säilytetään tuloksessa.
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"]])
Yllä olevassa esimerkissä näkyy kolme yhdistämistyyppiä:
- Left join: säilyttää kaikki pisteet (koulut) ja lisää kaupunginosan tiedon, jos saatavilla;
- Right join: säilyttää kaikki polygonit (kaupunginosat) ja lisää niihin sisältyvät koulut;
- Inner join: säilyttää vain ne pisteet, jotka sijaitsevat kaupunginosassa.
Oikean yhdistämistyypin valinta riippuu analyysin tavoitteista. Jos haluat kaikki koulut riippumatta siitä, sijaitsevatko ne kaupunginosassa, käytä left join -yhdistämistä. Jos haluat nähdä kaikki kaupunginosat ja niihin kuuluvat koulut, käytä right join -yhdistämistä. Jos kiinnostavat vain kaupunginosissa sijaitsevat koulut, käytä inner join -yhdistämistä.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme