Daftar gabungan spasial lat, lon dan multipolygon Python
Sep 02 2020
Saya memiliki kerangka data dengan kolom lat, lon di WGS84.
Saya juga memiliki lapisan multipolygon (GeoJSON, saya juga bisa mengubahnya menjadi SHP) dengan batas semua negara, di mana nama negaranya ada di tabel atribut.
Saya ingin menambahkan kolom dataframe di mana untuk setiap lintang, saya akan memiliki nama negaranya.
Apa cara yang efisien untuk melakukan itu (dengan asumsi saya memiliki 2000 pasangan lat lon)?
MEMPERBARUI:
Berkat @BERA, saya telah membuat fungsi ini:
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
Jawaban
2 BERA Sep 02 2020 at 13:08
Gabungan Spasial:
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
Jika Anda memiliki pandas df dari coord, buat geopandas seperti ini: Membuat GeoDataFrame dari DataFrame dengan koordinat
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'