Ich habe ein Python-Skript, das einem Shapefile ein Attributfeld hinzufügt, wenn es nicht existiert. Dies ist mit ArcGIS (grafisch oder über Python) leicht möglich, ich suche jedoch nach etwas, das nicht von ArcGIS abhängt.
Ich habe dies mit OGR erfolglos versucht , da mein Shapefile Funktionen enthält .
Ich habe mir pyshp angesehen , aber auf ähnliche Weise gibt es keine Möglichkeit, das Schema zu ändern, nachdem es erstellt wurde. Ich habe es noch nicht mit Shapefile (für Python) versucht, aber ich sehe keine Werbung für diese Funktion. Ich kann auch nicht sehen, wie dies durch Basteln mit der DBF-Datei über dbfpy erfolgen kann .
Hat jemand irgendwelche Ideen?
Antworten:
Sie sollten sich diese Fragen ansehen, da sie bereits beantwortet wurden: Wie füge ich mit Python benutzerdefinierte Feature-Attribute zu Shapefile hinzu?
/programming/4215658/adding-custom-feature-attributes-to-esri-shapefile-with-python
Wenn Sie als Ergebnis nur ein Shapefile wollen, löschen Sie einfach Ihre Eingabedateien am Ende Ihres Skripts.
quelle
Hier ist eine Lösung. Besser spät als nie:
http://geospatialpython.com/2013/04/add-field-to-existing-shapefile.html?m=1
quelle
Dank eines verblüffenden Formats namens DBF ist das Hinzufügen von Feldern zu Shapefiles mit vorhandenen Attributdaten nicht möglich, ohne dass das DBF neu geschrieben oder aufgefüllt werden muss. Ich kenne keine fertige Lösung, aber ich würde ein Skript schreiben, um ein neues Shapefile auf der Grundlage eines vorhandenen Shapefiles zu erstellen und dem neuen Shapefile die zusätzlichen Felder hinzuzufügen. Kopieren Sie dann die Geometrie- / Attributdaten aus dem alten in das neue Shapefile. Entfernen Sie als letzten Schritt das alte Shapefile und benennen Sie das neue um. All dies ist mit OGR-Python-Bindungen ziemlich einfach zu bewerkstelligen.
Alternativ können Sie dbfpy verwenden, um das Obige nur mit der DBF-Datei auszuführen. Die Reihenfolge der Schritte bleibt gleich:
Sie müssen keine Änderungen am Shapefile (.shp) selbst oder an den anderen Dateien vornehmen, da diese nicht auf die im DBF enthaltenen Attributinformationen verweisen. Sie müssen jedoch die Reihenfolge der Datensätze im alten und im neuen DBF genau gleich halten.
quelle
DBFpy sollte dafür funktionieren. Hast du dann Beispiel auf dieser Seite gesehen:
http://dbfpy.sourceforge.net/
Stellen Sie sicher, dass das Shapefile derzeit von keiner anderen Anwendung, einschließlich ArcGIS, bearbeitet wird, da dies zu Problemen beim Sperren führen kann.
quelle
from dbfpy import dbf; db = dbf.Dbf('my.dbf'); db.addField(("FOO", "C", 15))
Ich habe mit OGR eine Lösung gefunden und dank der Hilfe einer früheren Frage . Hier ist ein vollständiges Beispiel:
Mein Problem war, dass ich
layer_defn.AddFieldDefn(new_field)
eher benutzte alslayer.CreateField(new_field)
. Vielen Dank an die Hilfe, und entschuldigen Sie, dass Sie nicht genau nach der ähnlichen anderen Frage gesucht haben.quelle