Spatial join list lat, lon e multipolygon Python
Sep 02 2020
Ho un dataframe con colonne lat, lon in WGS84.
Ho anche uno strato multipoligono (GeoJSON, posso anche convertirlo in un SHP) con i confini di tutti i paesi, dove il nome del paese è nella tabella degli attributi.
Vorrei aggiungere al dataframe una colonna dove per ogni lat, lon avrò il nome del paese.
Quale sarebbe il modo efficiente per farlo (supponendo di avere 2000 coppie lat-lon)?
AGGIORNARE:
Grazie a @BERA ho creato questa funzione:
import geopandas as gpd
from shapely.geometry import Point
df_countries = gpd.read_file(r"C:\countries.geojson")
def get_countries(df, lat_col, lon_col,df_countries):
df_latlon = df[[lat_col,lon_col]].copy()
df_latlon['Coordinates'] = list(zip(df_latlon[lon_col], df_latlon[lat_col]))
df_latlon['Coordinates'] = df_latlon['Coordinates'].apply(Point)
df_latlon = gpd.GeoDataFrame(df_latlon, geometry='Coordinates')
df_latlon = df_latlon.set_crs(epsg=4326)
df_latlon = gpd.sjoin(df_latlon, df_countries[['CNTRY_NAME','geometry']], how='left')
return df_latlon
Risposte
2 BERA Sep 02 2020 at 13:08
Join spaziale:
import geopandas as gpd
dfpoints = gpd.read_file(r"C:\folder\bs_riks.shp")
dfpolys = gpd.read_file(r"C:\folder\ak_riks.shp")
df = gpd.sjoin(dfpoints, dfpolys, how='left')
#or: df = gpd.sjoin(dfpoints, dfpolys[['CNTRY_NAME','geometry']], how='left') #If you dont want all attributes from the polygons
Se hai un panda df delle coordinate, crea geopande in questo modo: Creazione di un GeoDataFrame da un DataFrame con coordinate