Saya telah mengambil salinan buku super-fasik 'Python Geospatial Development' oleh Erik Westra ( tautan Amazon ), dan saya sedang mengerjakannya. Saat ini, ini mengajarkan saya untuk memuat data garis pantai GSHHS dari shapefile ke dalam database PostGIS, dalam persiapan untuk membangun aplikasi web geospasial.
Masalah saya adalah ini: ketika saya mencoba untuk mengimpor data GSHHS ke PostGIS, itu ditolak karena garis pantai poligon tidak dianggap 'valid'. Khususnya, saya diberi pesan kesalahan yang menggambarkan beberapa (tetapi tidak semua) poligon garis pantai sebagai 'cincin tidak tertutup'.
Saya mengerti bahwa kesalahan ini mencoba untuk memberitahu saya bahwa poin pertama dan terakhir dari poligon tidak sama. Namun, ini tidak benar. Saya telah memeriksa representasi WKT dari banyak poligon, dan mereka benar. Mereka pasti memulai dan mengakhiri dengan koordinasi yang sama.
Poligon diekstraksi dari shapefile menggunakan pustaka OGR, dan mengekspor setiap fitur poligon ke WKT. Saya sudah mencoba menyusun kembali poligon melalui Shapely, dan bereksperimen dengan WKB, tetapi tidak berhasil. Saya telah dapat memuat data yang sama ke dalam PostGIS sebagai tabel MULTIPOLYGON, menggunakan loader shp2pgsql.
Saya bertanya-tanya apakah ada orang di luar sana yang:
(a) mungkin menggunakan buku yang sama, terjebak pada masalah yang sama, dan punya jawaban untuk saya?
(B) telah mengalami masalah yang sama, dan menemukan solusi?
(c) gagal itu, apakah ada saran 'praktik terbaik' untuk memastikan geometri yang valid sebelum memuat ke PostGIS?
UPDATE: seorang kolega telah menyarankan bahwa masalah 'cincin tidak tertutup' mungkin hanya merupakan gejala dari masalah lain. Mungkin saja konfigurasi PostGIS / PostgreSQL saya memiliki batas ukuran (pada transaksi penyisipan, paket yang diterima, string teks, dll).
Karena saya menggunakan poligon WKT yang sangat panjang sebagai input, PostGIS mungkin memotongnya terlalu dini untuk menyelesaikan setiap poligon. Saya akan mengujinya besok, tetapi sepertinya memang benar. Masukkan batas negara saya hanya menerima beberapa catatan dan bukan yang lain. Dari ingatan, geometri yang diterima adalah untuk negara-negara pulau kecil seperti Antigua (dan karenanya mungkin memiliki representasi WKT pendek).
Jadi ini bisa berakhir menjadi lebih dari utas admin basis data PostGIS, bukan utas geometri yang tidak valid.
Jawaban:
Saya telah melihat data Anda dan contoh buku, masalahnya adalah bahwa ada tiga poligon yang tidak valid dalam data yang diproses dalam buku:
GSHHS_l_L1.shp
ID = 92-W
ID = 486-W
GSHHS_l_L2.shp
ID = 7333-W
Karena ini adalah contoh, akan lebih mudah untuk menghapus poligon-poligon itu dari dataset atau hanya menambahkan satu jika pernyataan dalam kode Anda
sumber