Ich habe eine Software (nicht Arc), die jede Nacht auf einem Nicht-Produktions-Computer ausgeführt wird, der Shapefile-Features aus einer externen Datenbank aktualisiert. In regelmäßigen Abständen möchte ich alle Features im Shapefile löschen (nicht die Datei selbst, die verbleiben muss) und die Software das Shapefile von Grund auf neu erstellen lassen. Ich möchte diesen Prozess automatisieren.
Ich habe derzeit keine GIS-Software auf diesem Computer installiert. Ich hatte gehofft, in Python eine Routine erstellen zu können , mit der die Features automatisch gelöscht werden, ähnlich wie mit dem Geoverarbeitungswerkzeug "Features löschen" von Arc .
Gibt es Python-Module, mit denen ich das machen könnte? Am liebsten Open Source? Ich habe mir Shapely und PyShp angesehen , aber nichts gefunden, das es mir erlaubt, die Features in der Masse zu löschen, oder das mit einer WHERE-Klausel übereinstimmt. Sie können Features schreiben und analysieren, haben jedoch nirgendwo DELETE FEATURES-Funktionen gesehen.
Mir muss auf jeden Fall etwas Einfaches fehlen ...
BEARBEITEN: Ich habe 35 Ordner (verschiedene geografische Ausmaße, alle in ihrer eigenen Projektion) mit 35-65 Shapefiles, mit denen ungefähr 1000 Shapefiles bearbeitet werden können.
quelle
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
Die Befehlszeile ogr2ogr mit einer where-Klausel, die garantiert leere Ergebnisse erzeugt, ist eine schnelle und einfache Methode:
Die Übersichtsseite für Python und OGR (und GDAL) lautet http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
quelle
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. Pablos Antwort ist jedoch erweiterbarer.Sie können dies in pyshp tun. Es ist einfach, aber nicht offensichtlich, da ich mir diesen Anwendungsfall nie vorgestellt habe. Bei automatisierten Update-Anwendungen ist dies jedoch sinnvoll. Ich habe die folgenden 6 Codezeilen getestet und es hat super funktioniert:
Sie haben jetzt ein Shapefile über das Original geschrieben, das die richtigen Header und die ursprünglichen DBF-Felder enthält. Es wird sicher in GIS-Software- und Shapefile-Bibliotheken geöffnet, hat jedoch keine Features oder DBF-Datensätze.
Die Lambda-Funktion überträgt den ursprünglichen Begrenzungsrahmen als Platzhalter. Sie können beliebige Gleitkommawerte in ein Array von [xmin, ymin, xmax, ymax] einfügen. Beispiel:
Das Ändern von DBF-Feldern ist ebenfalls einfach und in den pyshp-Dokumenten dokumentiert.
Ich hoffe, das hilft.
quelle
Speichern Sie eine Kopie des leeren Shapefiles und überschreiben Sie das gewünschte Shapefile.
quelle