Mam oprogramowanie (nie Arc), które działa co noc na nieprodukcyjnej maszynie, która aktualizuje funkcje pliku kształtu z zewnętrznej bazy danych. Okresowo chciałbym usunąć wszystkie funkcje z pliku shapefile (nie sam plik, który musi pozostać) i pozwolić programowi „odbudować” plik shapefile od zera. Chciałbym zautomatyzować ten proces.
Nie mam obecnie zainstalowanego oprogramowania GIS na tym komputerze. Miałem nadzieję, że uda mi się napisać skrypt w Pythonie, który automatycznie usunie funkcje, podobnie jak narzędzie geoprzetwarzania Arc's Delete Features .
Czy są jakieś moduły Pythona, które pozwolą mi to zrobić? Preferujesz oprogramowanie typu open source? Spojrzałem na zgrabną i PyShp ale nie widziałem niczego, co pozwoliłoby mi usunąć funkcje w masie albo że dopasowany do klauzuli WHERE. Mogą pisać funkcje i analizować je, ale nigdzie nie widziały funkcji USUŃ FUNKCJE.
Z pewnością brakuje mi czegoś prostego ...
EDYCJA: Mam 35 folderów (różne zakresy geograficzne, wszystkie we własnej projekcji), z 35-65 plikami kształtów, co daje około 1000 plików kształtów do załatwienia.
źródło
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
Linia komendowa ogr2ogr z klauzulą where gwarantującą tworzenie pustych wyników jest jedną szybką i łatwą metodą:
Strona przeglądu Pythona i OGR (i GDAL) to http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
źródło
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. Odpowiedź Pabla jest jednak bardziej elastyczna.Możesz to zrobić w pyshp. Jest to proste, ale nie oczywiste, ponieważ nigdy nie przewidziałem tego przypadku użycia. Ale ma to sens w przypadku aplikacji do automatycznych aktualizacji. Przetestowałem następujące 6 wierszy kodu i działało świetnie:
Masz teraz plik kształtu zapisany na oryginale, który ma poprawne nagłówki i oryginalne pola dbf. Otworzy się bezpiecznie w oprogramowaniu GIS i bibliotekach plików kształtów, ale nie ma żadnych funkcji ani rekordów dbf.
Funkcja lambda przenosi oryginalną ramkę ograniczającą jako symbol zastępczy. Możesz umieścić dowolne wartości zmiennoprzecinkowe w tablicy [xmin, ymin, xmax, ymax]. Przykład:
Zmiana pól dbf jest również prosta i udokumentowana w dokumentach pyshp.
Mam nadzieję, że to pomaga.
źródło
Dlaczego nie zapisać kopii pustego pliku Shapefile i nadpisać interesujący go plik Shapefile.
źródło