아래 코드를 사용하여 수백만 개의 GPS 포인트가있는 국가 (및 때로는 주)를 찾습니다. 코드는 현재 포인트 당 약 1 초가 걸리며 매우 느립니다. shapefile은 6MB입니다.
geopandas는 공간 조인에 rtree를 사용하여 매우 효율적으로 만들지 만 여기서는 작동하지 않는 것 같습니다. 내가 뭘 잘못하고 있죠? 나는 초당 천 점 정도를 바라고 있었다.
shapefile 및 csv는 여기 (5MB)에서 다운로드 할 수 있습니다. https://www.dropbox.com/s/gdkxtpqupj0sidm/SpatialJoin.zip?dl=0
import pandas as pd
import geopandas as gpd
from geopandas import GeoDataFrame, read_file
from geopandas.tools import sjoin
from shapely.geometry import Point, mapping,shape
import time
#parameters
shapefile="K:/.../Shapefiles/Used/World.shp"
df=pd.read_csv("K:/.../output2.csv",index_col=None,nrows=20)# Limit to 20 rows for testing
if __name__=="__main__":
start=time.time()
df['geometry'] = df.apply(lambda z: Point(z.Longitude, z.Latitude), axis=1)
PointsGeodataframe = gpd.GeoDataFrame(df)
PolygonsGeodataframe = gpd.GeoDataFrame.from_file(shapefile)
PointsGeodataframe.crs = PolygonsGeodataframe.crs
print time.time()-start
merged=sjoin(PointsGeodataframe, PolygonsGeodataframe, how='left')
print time.time()-start
merged.to_csv("K:/01. Personal/04. Models/10. Location/output.csv",index=None)
print time.time()-start