Spatial join list lat, lon และ multipolygon Python
Sep 02 2020
ฉันมีดาต้าเฟรมที่มีคอลัมน์ lat, lon ใน WGS84
ฉันยังมีเลเยอร์หลายรูปหลายเหลี่ยม (GeoJSON ฉันยังสามารถแปลงเป็น SHP) พร้อมกับขอบเขตของทุกประเทศโดยที่ชื่อของประเทศอยู่ในตารางแอตทริบิวต์
ฉันต้องการเพิ่มคอลัมน์ดาต้าเฟรมที่สำหรับแต่ละ lat ฉันจะมีชื่อประเทศ
อะไรจะเป็นวิธีที่มีประสิทธิภาพในการทำเช่นนั้น (สมมติว่าฉันมีคู่ lat lon 2,000 คู่)
อัพเดท:
ขอบคุณ @BERA ฉันสร้างฟังก์ชั่นนี้:
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
คำตอบ
2 BERA Sep 02 2020 at 13:08
เข้าร่วมเชิงพื้นที่:
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
หากคุณมี df แพนด้าของ coords ให้สร้าง geopandas ดังนี้: การสร้าง GeoDataFrame จาก DataFrame พร้อมพิกัด