Saya memiliki sekitar 1000 shapefile yang rusak (lihat pesan kesalahan terlampir). Shapefile dihasilkan dari Pengembang eCognition 8. Ada alat skrip yang tampaknya untuk memperbaiki shapefile setelah diidentifikasi sebagai rusak.
Edit:
Saya ingin membuat skrip cepat untuk mengulang semua shapefile saya dan memeriksa apakah jumlah shape cocok dengan record tabel. Saya bisa menghitung catatan tabel menggunakan yang berikut ini:
# Name: fcCount.py
# Purpose: calculate the number of features in a featureclass
# Import system modules
import arcpy
from arcpy import env
env.workspace = "C:/data"
Sample = "MyShp.shp"
result_dbf = int(arcpy.GetCount_management(Sample).getOutput(0))
print result_dbf
Saya pada akhirnya ingin membuat semacam pemeriksaan logika seperti:
if result_dbf = result_shp:
pass
else:
print "There is a problem with" + str(Sample)
Bagaimana saya bisa menghitung bentuk secara langsung tanpa mengakses file .dbf? Atau, dengan kata lain, apa cara terbaik untuk memeriksa secara terprogram apakah jumlah bentuk cocok dengan jumlah catatan tabel?
Jawaban:
Bagaimana dengan menggunakan pyshp ? Saya menginstalnya dengan pip dan apa yang saya coba di bawah ini hampir sama dengan README :
Sayangnya (atau mungkin untungnya?) Saya tidak punya shapefile yang didongkrak untuk menguji untuk melihat apakah tidak. bentuk bisa! = tidak. catatan.
Tunggu sebentar, saya sekarang punya shapefile yang didongkrak berkat ide Kirk di komentar di bawah. Saya mencadangkan dbf, membuat salinan seluruh shapefile, menghapus beberapa fitur, lalu mengganti nama dbf yang dicadangkan kembali ke aslinya, dan lihatlah, jumlah bentuk <jumlah catatan:
sumber
Dari bunyi pertanyaan Anda, sepertinya yang benar-benar ingin Anda lakukan adalah menentukan apakah shapefile memiliki masalah dengannya (dalam hal ini, catatan yang tidak cocok). Jika Anda hanya perlu mengidentifikasi mereka yang memiliki masalah, Anda sebenarnya tidak perlu menghitung catatan dalam DBF dan Shapefile untuk menentukan apakah itu salah. Inilah alasannya:
Jika Anda mencoba menjalankan fungsi GetCount pada shapefile yang memiliki jumlah catatan berbeda, itu akan gagal dengan kesalahan:
Karena fungsi GetCount gagal dalam skenario ini, dan semua yang Anda ingin lakukan adalah mengidentifikasi shapefile dalam kesalahan, Anda dapat menangkap ini dengan klausa coba / kecuali dalam kode Anda, alih-alih jika / kalau Anda sebelumnya mencoba untuk menggunakan.
Saya mengambil kebebasan untuk menambahkan kode dan loop "Daftar FeatureClasses" sehingga Anda dapat menguji semua FC di ruang kerja Anda tanpa harus menguji masing-masing secara manual.
sumber
Format shapefile didokumentasikan. Saya kira jumlah catatan dalam file shp tidak sesuai dengan jumlah catatan dalam file dbf.
Format file shp didokumentasikan di sini . Jadi Anda bisa menulis program untuk menghitung jumlah bentuk. Format dbf didokumentasikan di banyak tempat dan Anda harus dapat menemukan sampel untuk menghitung baris, misalnya di sini .
sumber
Script terlampir loop melalui direktori dan memeriksa apakah jumlah bentuk cocok dengan jumlah catatan untuk setiap shapefile.
sumber
Menggunakan check geometry akan membantu Anda melalui langkah pertama.
Onus
Repair Geometry akan memungkinkan Anda memilih urutan dan prioritas masalah yang ingin Anda perbaiki.
berikut adalah beberapa tautan versi lama lainnya . Ketika Anda menjalankan shapefile checker, maka Anda selesai dengan membangun kembali dbf?
Itu adalah langkah yang menciptakan catatan yang cocok. Satu dari dua hal telah terjadi yang menyebabkan kesalahan.
Beberapa hal dapat menyebabkan ini.
SHX sebenarnya adalah indeks antara keduanya.
Menghitung bentuk tanpa menghitung catatan dbf hanya setengah dari solusi.
sumber
Melihat artikel wikipedia tentang shapefile , file .shx harus berisi indeks pada file .shp, bukan pada file .dbf. Jadi mungkin perlu untuk memeriksa apakah .shx dan .shp cocok bersama.
Dimungkinkan untuk membuka shapefile tanpa .dbf (artinya Anda tidak memiliki tabel atribut), tetapi indeks yang rusak akan menghasilkan pesan kesalahan.
sumber