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