Ich versuche, eine räumliche Verknüpfung zu erstellen, ähnlich wie im folgenden Beispiel: Gibt es eine Python-Option zum "Verknüpfen von Attributen nach Speicherort"? . Dieser Ansatz scheint jedoch wirklich ineffizient / langsam zu sein. Selbst das Ausführen mit bescheidenen 250 Punkten dauert fast 2 Minuten und schlägt bei Shapefiles mit> 1.000 Punkten vollständig fehl. Gibt es einen besseren Ansatz? Ich möchte dies vollständig in Python tun, ohne ArcGIS, QGIS usw. zu verwenden.
Es würde mich auch interessieren, ob es möglich ist, Attribute (dh Grundgesamtheit) aller Punkte, die in ein Polygon fallen, zu summieren und diese Menge mit dem Polygon-Shapefile zu verbinden.
Hier ist der Code, den ich konvertieren möchte. Ich erhalte eine Fehlermeldung in Zeile 9:
poly['properties']['score'] += point['properties']['score']
was sagt:
TypeError: Nicht unterstützte Operandentypen für + =: 'NoneType' und 'float'.
Wenn ich das "+ =" durch "=" ersetze, läuft es gut, aber das summiert nicht die Felder. Ich habe auch versucht, diese als ganze Zahlen zu machen, aber das schlägt auch fehl.
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']})