J'essaie de faire une jointure spatiale un peu comme l'exemple ici: Existe - t-il une option python pour "joindre les attributs par emplacement"? . Cependant, cette approche semble vraiment inefficace / lente. Même le faire avec un modeste 250 points prend presque 2 minutes et il échoue entièrement sur les fichiers de formes avec> 1000 points. Est-ce qu'il y a une meilleure approche? Je voudrais le faire entièrement en Python sans utiliser ArcGIS, QGIS, etc.
Je serais également intéressé de savoir s'il est possible de sommer les attributs (c'est-à-dire la population) de tous les points qui se trouvent dans un polygone et de joindre cette quantité au fichier de formes du polygone.
Voici le code que j'essaie de convertir. Je reçois une erreur sur la ligne 9:
poly['properties']['score'] += point['properties']['score']
qui dit:
TypeError: type (s) d'opérande non pris en charge pour + =: 'NoneType' et 'float'.
Si je remplace le "+ =" par "=" cela fonctionne bien mais cela ne résume pas les champs. J'ai également essayé de les faire sous forme d'entiers, mais cela échoue également.
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']})