Estou tentando fazer uma junção espacial muito parecida com o exemplo aqui: Existe uma opção python para "juntar atributos por local"? . No entanto, essa abordagem parece realmente ineficiente / lenta. Mesmo executando isso com 250 pontos modestos leva quase 2 minutos e falha totalmente em arquivos de forma com mais de 1.000 pontos. Existe uma abordagem melhor? Eu gostaria de fazer isso inteiramente em Python sem usar ArcGIS, QGIS, etc.
Também gostaria de saber se é possível adicionar atributos SUM (ou seja, população) de todos os pontos que se enquadram em um polígono e associar essa quantidade ao shapefile do polígono.
Aqui está o código que estou tentando converter. Eu recebo um erro na linha 9:
poly['properties']['score'] += point['properties']['score']
que diz:
TypeError: tipo (s) de operando não suportado para + =: 'NoneType' e 'float'.
Se eu substituir o "+ =" por "=", ele funciona bem, mas isso não soma os campos. Eu também tentei fazer isso como números inteiros, mas isso também falha.
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']})