Saya memiliki perangkat lunak (bukan Arc) yang beroperasi setiap malam di mesin non-produksi yang memperbarui fitur shapefile dari database eksternal. Secara berkala saya ingin menghapus semua fitur di shapefile (bukan file itu sendiri, yang harus tetap) dan membiarkan perangkat lunak "membangun kembali" shapefile dari awal. Saya ingin mengotomatiskan proses ini.
Saya tidak memiliki perangkat lunak GIS yang terinstal di mesin itu. Saya berharap bahwa saya bisa skrip rutin dengan Python yang secara otomatis akan menghapus fitur, seperti alat geoprocessing Arc's Delete Features .
Apakah ada modul Python yang memungkinkan saya melakukan ini? Sumber terbuka yang disukai? Aku memandang Shapely dan PyShp tapi tidak melihat apa pun yang akan memungkinkan saya untuk menghapus fitur dalam massal atau yang cocok klausa WHERE. Mereka dapat menulis fitur dan menganalisisnya, tetapi belum melihat fungsi DELETE FITUR di mana saja.
Saya pasti melewatkan sesuatu yang sederhana ...
EDIT: Saya punya 35 folder (luasan geografis berbeda, semuanya dalam proyeksi mereka sendiri), dengan 35-65 shapefile dengan sekitar 1000 shapefile yang harus ditangani.
sumber
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
Baris perintah ogr2ogr dengan klausa yang dijamin membuat hasil kosong adalah salah satu metode cepat dan mudah:
Halaman ikhtisar untuk python dan OGR (dan GDAL) adalah http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
sumber
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. Namun jawaban Pablo lebih bisa diperluas.Anda dapat melakukan ini di pyshp. Ini sederhana tetapi tidak jelas karena saya tidak pernah membayangkan use case ini. Tetapi masuk akal untuk aplikasi pembaruan otomatis. Saya menguji 6 baris kode berikut dan itu berhasil:
Anda sekarang memiliki shapefile yang ditulis di atas dokumen asli yang memiliki header dan bidang dbf asli yang benar. Ini akan terbuka dengan aman di perangkat lunak SIG dan pustaka shapefile tetapi tidak memiliki fitur atau catatan dbf.
Fungsi lambda mentransfer kotak pembatas asli sebagai pengganti. Anda bisa meletakkan nilai float apa pun yang Anda inginkan dalam array [xmin, ymin, xmax, ymax]. Contoh:
Mengubah bidang dbf juga sederhana dan didokumentasikan dalam dokumen pyshp.
Semoga itu bisa membantu.
sumber
Mengapa tidak menyimpan salinan Shapefile kosong dan menulis-berlebihan Shapefile Anda yang menarik.
sumber