Seperti yang Anda temukan dengan coba-coba, ada beberapa masalah yang perlu Anda perbaiki, yang terakhir diselesaikan dengan menggunakan argumen ogr2ogr -nlt GEOMETRY
* .
* Catat rekomendasi dalam komentar @ LeeHachadoorian yang -nlt PROMOTE_TO_MULTI
digunakan sebagai solusi default, alih-alih nlt GEOMETRY
, karena yang pertama mempromosikan praktik terbaik selain manfaat tambahan.
Izin Pengguna dan Pesan Kesalahan
Pertama, ogr2ogr tidak dapat membuka shapefile Anda, dan Anda menyadari bahwa masalah perizinan ternyata memengaruhi pengguna OS yang mengakses shapefile Anda. Tapi ada pelajaran penting di sini untuk orang lain, khususnya, pesan kesalahan ogr2ogr tentang hal ini menyesatkan! Memang, salah satu komentator pertama mengira shapefile Anda tidak valid, dan memang, tebakan pertama saya adalah bahwa mungkin ada kesalahan / kesalahan ketik pada path / nama file, atau bahwa mungkin ada karakter yang tidak konvensional dalam path file — seperti space — itu melanggar kemampuan ogr2ogr untuk menunjuk ke shapefile. Ketika Anda menemukan, itu sebenarnya hanya masalah dengan izin pengguna. Karena pesan kesalahan menciptakan herring merah, ini adalah kemungkinan orang lain perlu mengingatnya. :)
Keistimewaan Pengguna SQL dan Kegagalan Misteri
Saya akan bingung dengan kesalahan kedua Anda untuk sementara waktu, tetapi dengan menguji pengguna SQL Anda dengan utilitas impor yang berbeda (shp2pgsql), yang cerdas, Anda mendapat pesan kesalahan yang lebih tepat dan memberikan hak istimewa yang diperlukan pengguna SQL Anda di atas spatial_ref_sys
meja. Jadi seseorang yang mengalami kesulitan dalam mendapatkan instruksi impor ogr2ogr mereka agar berfungsi dengan baik harus memastikan pengguna SQL mereka memiliki hak yang cukup baik pada database itu sendiri dan tabel 'spatial_ref_sys'.
Jenis Geometri Campuran dan Praktik Terbaik
Rintangan terakhir yang Anda temui tampaknya terkait dengan fakta bahwa shapefile memungkinkan geometri tunggal dan multipart untuk hidup berdampingan dalam dataset / file yang sama. Ini dianggap praktik buruk untuk mencampur tipe geometri dalam tabel yang sama, bahkan untuk satu / multipart dari tipe fitur yang sama, dan secara default, pemain open source di toolchain Anda akan mencoba melindungi Anda dari pencampuran tipe geometri. Untungnya, mereka memberi Anda beberapa opsi. Awalnya saya merekomendasikan pengaturan argumen -nlt GEOMETRY
* pada instruksi ogr2ogr Anda, yang memungkinkan Anda untuk mengimpor dataset poligon Anda terlepas dari konvensi looser ESRI. Maklum, ini berarti Anda mungkin memiliki geometri bagian tunggal dan banyak bagian di meja Anda, dan itu bisa membuat sakit kepala lain untuk nanti!
Perlu disebutkan bahwa ogr2ogr memiliki -nlt
opsi lain yang harus Anda pertimbangkan, yaitu PROMOTE_TO_MULTI
. Mengutip dokumentasi ..
Dimulai dengan GDAL 1.10, PROMOTE_TO_MULTI dapat digunakan untuk secara otomatis mempromosikan lapisan yang mencampur poligon atau multipoligon ke multipoligon, dan lapisan yang mencampur linestrings atau multilinestrings ke multilinestrings. Dapat berguna saat mengonversi shapefile ke PostGIS dan driver target lain yang menerapkan pemeriksaan ketat untuk tipe geometri.
Dengan kata lain, jika Anda menggunakan PROMOTE_TO_MULTI
bendera, maka SEMUA fitur Anda akan dikonversi ke fitur multi-bagian, bahkan ketika mereka terdiri dari satu bagian. Seperti yang dicatat oleh @LeeHachadoorian dalam komentar — dan saya yakin sebagian besar akan setuju — Anda disarankan untuk lebih memilih PROMOTE_TO_MULTI
daripada GEOMETRY
flag yang lebih longgar , karena sesuai dengan praktik terbaik, menyatukan geometri fitur di tabel Anda. Pada dasarnya, kode apa pun yang Anda tulis semestinya hanya mengharapkan geometri multi bagian. Diakui, ini bisa menjadi lebih bersih dan menyederhanakan beberapa pengembangan.
Nasihat Umum untuk Seseorang Yang Memiliki Masalah dengan SHP untuk POST Impor
- Pastikan jalur Anda tidak memiliki karakter funky di dalamnya dan tidak ada kesalahan ketik atau salah eja dalam jalur atau nama file
- Ketika @ user1919 ditemukan, pastikan pengguna OS Anda memiliki hak yang cukup untuk mengakses shapefile! Seperti yang mereka tunjukkan, ini dapat membantu untuk mencoba membuka shapefile di perangkat lunak lain, seperti QGIS — jika ia bekerja di satu perangkat lunak, maka itu tidak rusak, dan itu seharusnya berfungsi di perangkat lunak lain.
Pada awalnya, pertimbangkan untuk mengeksekusi perintah ogr2ogr Anda sudo
untuk mengesampingkan masalah izin sampai setelah Anda tahu pasti bahwa skrip Anda berfungsi sebagaimana dimaksud.
- Juga ketika @ user1919 menyadari, pastikan pengguna SQL Anda memiliki hak yang cukup baik pada database yang ditargetkan oleh skrip Anda, maupun
spatial_ref_sys
tabel.
Sekali lagi, pada awalnya, pertimbangkan untuk menggunakan pengguna super PostGRESql di sini untuk menyingkirkan masalah hak istimewa SQL hingga skrip Anda berfungsi. Jika skrip Anda berfungsi dengan superuser kemudian gagal dengan pengguna otomasi yang disukai, Anda tahu masalahnya terkait dengan pengguna SQL dan bukan data atau lingkungan Anda (instalasi gdal / ogr, dll.)
Coba atur -nlt
bendera ke salah satu PROMOTE_TO_MULTI
atau GEOMETRY
. Karena shapefile memungkinkan konvensi jenis fitur yang lebih longgar, kadang-kadang Anda harus menginstruksikan utilitas open source Anda agar lebih akomodatif :)
Jika Anda mengimpor ke PostGRESql atau MySQL, coba atur -lco PRECISION=no
..fair warning, saya tidak benar-benar mengerti apa argumen ini, tapi inilah yang saya alami .. Seperti yang Anda tahu, shapefile sering menyertakan SHAPE_LENGTH
dan SHAPE_AREA
bidang, dan saya Kadang-kadang saya perhatikan ketika saya mengalami kegagalan misteri, jika saya menghapus bidang-bidang itu saya bisa mendapatkan data untuk diimpor dengan benar. Namun, jika saya gunakan -lco PRECISION=no
, saya bisa mendapatkan data untuk diimpor tanpa harus menghapus bidang itu. Rekomendasi saya adalah menggunakan parameter ini sebagai langkah pemecahan masalah, tetapi untuk memahami masalah apa yang benar-benar diselesaikan sebelum Anda menerima impor dalam solusi produksi.
Akhirnya, jika Anda menggunakan MySQL, perhatikan bahwa beberapa geometri fitur yang sangat besar dapat menyinggung max_allowed_packet
parameter MySQL . Anda dapat membaca lebih lanjut tentang ini di dokumentasi untuk driver MySQL .. tetapi solusinya adalah mengubah konfigurasi MySQL Anda untuk memungkinkan lebih besar dari nilai default.
Contoh SHP ke PostGIS Import Command untuk ogr2ogr
Demi pemula yang mungkin berkeliaran di sini, seperti inilah sebagian besar SHP to Post import saya menggunakan ogr2ogr. Perhatikan bahwa saya membungkus jalur file / nama dalam tanda kutip, ini melindungi terhadap spasi, karakter aneh, dan pemecah baris di terminal .. juga saya sudah memasukkan sebagian besar argumen yang dibahas di atas, selain menimpa bidang nama geometri, Bidang FID, dan nama layer:
ogr2ogr -f "PostgreSQL" "PG:host=127.0.0.1 user=myuser dbname=mydb password=mypassw0rd" "C:/path/to/some_shapefile.shp" -lco GEOMETRY_NAME=the_geom -lco FID=gid -lco PRECISION=no -nlt PROMOTE_TO_MULTI -nln new_layername -overwrite