আমি কয়েক মিলিয়ন জিপিএস পয়েন্টের জন্য একটি দেশ (এবং কখনও কখনও রাষ্ট্র) সন্ধান করতে নীচের কোডটি ব্যবহার করছি। কোডটি বর্তমানে প্রতি পয়েন্টে প্রায় এক সেকেন্ড সময় নেয় যা অবিশ্বাস্যরূপে ধীর। শেফফাইলটি 6 এমবি।
আমি পড়েছি যে জিওপ্যান্ডগুলি স্থানিক যোগদানের জন্য rtree ব্যবহার করে, তাদের অবিশ্বাস্যভাবে দক্ষ করে তোলে, তবে এটি এখানে কাজ করে বলে মনে হয় না। আমি কি ভুল করছি? আমি প্রতি সেকেন্ড বা এক হাজার পয়েন্টের জন্য আশা করছিলাম।
শেফফাইল এবং সিএসভি এখানে (5MB) ডাউনলোড করা যাবে: https://www.DPboxbox.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