Saya menggunakan kode di bawah ini untuk menemukan negara (dan terkadang menyatakan) untuk jutaan titik GPS. Kode saat ini membutuhkan sekitar satu detik per titik, yang sangat lambat. Shapefile adalah 6 MB.
Saya membaca bahwa geopanda menggunakan rtrees untuk gabungan spasial, membuatnya sangat efisien, tetapi ini tampaknya tidak berfungsi di sini. Apa yang saya lakukan salah? Saya berharap untuk seribu poin per detik atau lebih.
Shapefile dan csv dapat diunduh di sini (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