Milyonlarca GPS noktası için bir ülke (ve bazen devlet) bulmak için aşağıdaki kodu kullanıyorum. Kod şu anda nokta başına yaklaşık bir saniye sürüyor, bu inanılmaz derecede yavaş. Şekil dosyası 6 MB'dir.
Geopandaların uzaysal birleşimler için rtrees kullandıklarını ve onları inanılmaz derecede verimli hale getirdiğini okudum, ancak bu burada işe yaramıyor gibi görünüyor. Neyi yanlış yapıyorum? Saniyede bin puan bekliyordum.
Şekil dosyası ve csv buradan indirilebilir (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