Apa yang dimaksud dengan Perilaku -skipfailures di ogr2ogr?

9

Saya mencoba menjalankan ogr2ogr untuk mengubah geojson menjadi shapefile. Semua baik sampai salah satu fitur geojson memiliki geometri yang tidak valid (misalnya, array koordinat geometri titik kosong).

Saya menyertakan flag -skipfailures, tetapi ogr2ogr berhenti segera setelah fitur pertama tidak valid. Apakah saya tidak melakukan kesalahan di sini?

Contoh panggilan ogr2ogr:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson
pengguna890
sumber

Jawaban:

4

Coba tambahkan -nlt geometryke skrip ogr Anda:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson -nlt geometry

Saya mengalami masalah yang Anda jelaskan menggunakan ogr2ogr untuk menerjemahkan kumpulan data yang berisi fitur singlepart dan multipart di lapisan yang sama; misalnya, POINT dan MULTIPOINT, LINE AND MULTILINE, dan POLYGON dan MULTIPOLYGON.

Secara default, OGR ingin Anda mematuhi konvensi dan hanya menggunakan satu tipe fitur per dataset. Jika Anda melanggar aturan, OGR akan melempar kesalahan umum dan merekomendasikan -skipfailuresbenderanya. Ini bisa menyesatkan jika masalah sebenarnya adalah geometri campuran / cocok di lapisan yang sama.

Karena ESRI shapefile memungkinkan fitur tunggal / multi bagian dalam lapisan yang sama, Anda perlu menyadari bahwa OGR dapat membuang kesalahan ini bahkan jika Anda memiliki geometri yang valid. Dalam skenario itu Anda memiliki dua opsi: 1) Konversi fitur multi-bagian ke singlepart (yang dapat dilakukan melalui -explodecollectionsflag), atau 2) menggunakan -nltflag dan tentukan GEOMETRYsebagai opsi. The -nlt GEOMETRYpilihan memungkinkan Anda untuk menggabungkan campuran jenis fitur di lapisan yang sama. Tentu saja, sebagai akibatnya, OGR tidak akan tidak akan melindungi praktik terbaik.

Jika file GeoJSON Anda "mulai hidup" sebagai bentuk ESRI, mungkin Anda memiliki fitur POINT dan MULTIPOINT yang terkandung dalam dataset tersebut, sehingga Anda mungkin menghadapi masalah ini bahkan dengan poin yang valid.

elrobis
sumber
2
 -skipfailures: Continue after a failure, skipping the failed feature.

Satu penjelasan untuk perilaku yang Anda alami bisa jadi semua fitur di file geoJSON Anda rusak. Sudahkah Anda menguji validitasnya, misalnya menggunakan QGIS "Periksa validitas geometri"?

underdark
sumber
Semua fitur lainnya valid. Jika saya memperbaiki satu titik geometri yang dijelaskan dalam posting asli saya, semua poin geojson lainnya akan ditambahkan ke output shapefile.
user890
1

Perilaku yang dimaksud dalam pemahaman saya adalah bahwa jika ditemukan fitur yang tidak valid, itu akan dilewati dan konversi akan dilanjutkan dengan fitur yang valid berikutnya daripada berhenti.

Tampaknya Anda melakukan semuanya dengan benar, jadi saya tidak tahu apa yang salah! Sudahkah Anda mencoba format yang berbeda hanya untuk melihat apakah itu berfungsi?

Darren Cope
sumber