আমি এখানে উদাহরণের মতো একটি স্থানিক যোগদানের চেষ্টা করছি: "অবস্থান অনুসারে অ্যাট্রিবিউটসে যোগ দেওয়ার" অজগর বিকল্প আছে কি? । যাইহোক, এই পদ্ধতির সত্যই অদক্ষ / ধীর বলে মনে হচ্ছে। এমনকি সামান্য 250 পয়েন্ট সহ এটি চালাতে প্রায় 2 মিনিট সময় লাগে এবং এটি> 1000 পয়েন্ট সহ শেফফাইলে পুরোপুরি ব্যর্থ হয়। একটি ভাল পদ্ধতির আছে কি? আমি আর্কজিআইএস, কিউজিআইএস ইত্যাদি ব্যবহার না করে পাইথনে পুরোপুরি এটি করতে চাই
আমি আরও জানতে আগ্রহী যে এটি একটি বহুভুজের মধ্যে পড়ে এমন সমস্ত পয়েন্টগুলির SUM বৈশিষ্ট্যগুলি (অর্থাত্ জনসংখ্যা) এর পক্ষে সম্ভব এবং এটি বহুভুজ শেফফাইলে সেই পরিমাণে যুক্ত হবে কিনা।
কোডটি রূপান্তর করার চেষ্টা করছি। 9 নং লাইনে আমি একটি ত্রুটি পেয়েছি:
poly['properties']['score'] += point['properties']['score']
যা বলে:
প্রকারের ত্রুটি: + =: 'ননটাইপ' এবং 'ফ্লোট' এর জন্য অসমর্থিত অপরেন্দ্র প্রকার (গুলি)।
যদি আমি "+" "কে" = "দিয়ে প্রতিস্থাপন করি তবে তা ঠিকঠাক চলতে পারে তবে ক্ষেত্রগুলির সমষ্টি হয় না। আমি এগুলি পূর্ণসংখ্যা হিসাবে তৈরি করার চেষ্টা করেছি তবে সেটিও ব্যর্থ হয়।
with fiona.open(poly_shp, 'r') as n:
with fiona.open(point_shp,'r') as s:
outSchema = {'geometry': 'Polygon','properties':{'region':'str','score':'float'}}
with fiona.open (out_shp, 'w', 'ESRI Shapefile', outSchema, crs) as output:
for point in s:
for poly in n:
if shape(point['geometry']).within(shape(poly['geometry'])):
poly['properties']['score']) += point['properties']['score'])
output.write({
'properties':{
'region':poly['properties']['NAME'],
'score':poly['properties']['score']},
'geometry':poly['geometry']})