Estoy usando el siguiente código para encontrar un país (y, a veces, un estado) para millones de puntos GPS. El código actualmente toma aproximadamente un segundo por punto, que es increíblemente lento. El archivo de forma es de 6 MB.
Leí que las geopandas usan rtrees para uniones espaciales, lo que las hace increíblemente eficientes, pero esto no parece funcionar aquí. ¿Qué estoy haciendo mal? Esperaba mil puntos por segundo más o menos.
El archivo de forma y el csv se pueden descargar aquí (5 MB): 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