Spatial Join List Lat, Lon und Multipolygon Python
Sep 02 2020
Ich habe einen Datenrahmen mit lat, lon-Spalten in WGS84.
Ich habe auch eine Multipolygon-Ebene (GeoJSON, ich kann sie auch in ein SHP konvertieren) mit allen Ländergrenzen, wobei der Name des Landes in der Attributtabelle steht.
Ich möchte dem Datenrahmen eine Spalte hinzufügen, in der ich für jeden Lat den Lon-Namen habe.
Was wäre der effiziente Weg, dies zu tun (vorausgesetzt, ich habe 2000 Lat-Lon-Paare)?
AKTUALISIEREN:
Dank @BERA habe ich diese Funktion erstellt:
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
Antworten
2 BERA Sep 02 2020 at 13:08
Spatial Join:
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
Wenn Sie einen Pandas df der Koordinaten haben , erstellen Sie Geopandas wie folgt: Erstellen eines GeoDataFrame aus einem DataFrame mit Koordinaten