Uzamsal birleştirme listesi enlem, boylam ve çokgen Python

Sep 02 2020

WGS84'te enlem, enlem sütunları olan bir veri çerçevem ​​var.

Ayrıca, ülke adının öznitelik tablosunda yer aldığı tüm ülkelerin sınırları ile çokgen katmanım (GeoJSON, bunu bir SHP'ye de dönüştürebilirim) var.

Veri çerçevesine, her lat, lon için ülke adını alacağım bir sütun eklemek istiyorum.

Bunu yapmanın etkili yolu ne olabilir (2000 enlem boylam çiftim olduğunu varsayarak)?

GÜNCELLEME:

@BERA sayesinde bu işlevi oluşturdum:

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

Yanıtlar

2 BERA Sep 02 2020 at 13:08

Uzamsal Birleştirme:

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

Koordinatların bir pandas df'sine sahipseniz, aşağıdaki gibi jeopandalar oluşturun: Koordinatlarla bir DataFrame'den bir GeoDataFrame oluşturma