Estoy intentando hacer una unión espacial como en el ejemplo aquí: ¿Hay una opción de python para "unir atributos por ubicación"? . Sin embargo, ese enfoque parece realmente ineficiente / lento. Incluso ejecutar esto con unos modestos 250 puntos lleva casi 2 minutos y falla completamente en archivos de forma con> 1,000 puntos. ¿Hay un mejor enfoque? Me gustaría hacer esto completamente en Python sin usar ArcGIS, QGIS, etc.
También me interesaría saber si es posible SUMAR atributos (es decir, población) de todos los puntos que se encuentran dentro de un polígono y unir esa cantidad al archivo de forma del polígono.
Aquí está el código que estoy tratando de convertir. Me sale un error en la línea 9:
poly['properties']['score'] += point['properties']['score']
que dice:
TypeError: tipos de operando no admitidos para + =: 'NoneType' y 'float'.
Si reemplazo el "+ =" con "=" funciona bien pero eso no suma los campos. También intenté hacerlos como enteros, pero eso también falla.
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']})