Saya memiliki skrip Python yang menambahkan bidang atribut ke Shapefile jika tidak ada. Ini mudah dilakukan dengan ArcGIS (grafis atau melalui Python), tetapi saya sedang mencari sesuatu yang tidak bergantung pada ArcGIS.
Saya mencoba ini tidak berhasil dengan OGR, karena Shapefile saya berisi fitur .
Saya telah melihat pyshp , tetapi juga tidak ada cara untuk memodifikasi skema setelah dibuat. Saya belum pernah mencoba dengan shapefile (untuk Python) , tetapi saya tidak melihat fitur ini diiklankan. Saya juga tidak bisa melihat bagaimana hal ini dapat dilakukan dengan bermain-main dengan file DBF via dbfpy .
Adakah yang punya ide?
Jawaban:
Anda harus melihat pada pertanyaan-pertanyaan ini karena sudah dijawab: Bagaimana cara menambahkan atribut Fitur khusus ke Shapefile menggunakan Python?
/programming/4215658/adding-custom-feature-attributes-to-esri-shapefile-with-python
Jika Anda ingin hasilnya, hanya satu shapefile, cukup hapus file input Anda di akhir skrip Anda.
sumber
Inilah solusinya. Lebih baik terlambat daripada tidak sama sekali:
http://geospatialpython.com/2013/04/add-field-to-existing-shapefile.html?m=1
sumber
Berkat format yang agak mati otak yang disebut DBF, menambahkan bidang ke shapefile dengan data atribut yang ada tidak mungkin tanpa menulis ulang atau menambahkan padding ke DBF. Saya tidak tahu solusi yang sudah jadi, tetapi apa yang akan saya lakukan adalah menulis skrip untuk membuat shapefile baru berdasarkan yang sudah ada dan menambahkan bidang tambahan ke shapefile baru. Kemudian salin data atribut / geometri dari yang lama ke bentuk yang baru. Dan sebagai langkah terakhir, hapus shapefile lama, dan ganti nama yang baru. Semua ini cukup mudah dilakukan menggunakan binding python OGR.
Sebagai alternatif, Anda dapat menggunakan dbfpy untuk melakukan hal di atas hanya dengan file DBF. Urutan langkah tetap sama:
Anda tidak perlu membuat perubahan apa pun pada shapefile (.shp) itu sendiri atau file lainnya, karena mereka tidak mereferensikan informasi atribut yang terkandung dalam DBF. Namun Anda perlu menjaga urutan catatan persis sama di DBF lama dan yang baru.
sumber
DBFpy harus bekerja untuk ini. Pernahkah Anda melihat contoh di halaman ini:
http://dbfpy.sourceforge.net/
Pastikan shapefile tidak sedang diedit oleh aplikasi lain termasuk ArcGIS pada saat itu karena ini dapat menyebabkan masalah melalui penguncian.
sumber
from dbfpy import dbf; db = dbf.Dbf('my.dbf'); db.addField(("FOO", "C", 15))
Saya menemukan solusi menggunakan OGR dan terima kasih untuk membantu dari pertanyaan sebelumnya . Ini adalah contoh lengkapnya:
Masalah saya adalah bahwa saya menggunakan
layer_defn.AddFieldDefn(new_field)
daripadalayer.CreateField(new_field)
. Terima kasih banyak atas bantuannya, dan maaf karena tidak memeriksa pertanyaan lain yang serupa.sumber