Я намагаюся зробити просторове з'єднання подібно до прикладу тут: Чи є варіант python "приєднати атрибути за місцезнаходженням"? . Однак такий підхід здається дійсно неефективним / повільним. Навіть запуск цього моменту зі скромними 250 балами займає майже 2 хвилини, і він повністю провалюється на форматі з> 1000 очок. Чи є кращий підхід? Я б хотів це зробити повністю на Python, не використовуючи ArcGIS, QGIS тощо.
Мені б також цікаво дізнатись, чи можливо атрибути SUM (тобто сукупність) усіх точок, які потрапляють у полігон, і приєднати цю кількість до формі профілю багатокутника.
Ось код, який я намагаюся перетворити. Я отримую помилку в рядку 9:
poly['properties']['score'] += point['properties']['score']
що говорить:
TypeError: непідтримувані типи операндів для + =: 'NoneType' і 'float'.
Якщо я заміню "+ =" на "=", він працює нормально, але це не підсумовує поля. Я також намагався зробити їх як цілі числа, але це також не вдається.
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']})