Saya telah mengimpor beberapa data dalam database Postgis dan beberapa geometri dilaporkan tidak valid (ST_IsValidReason melaporkan persimpangan-diri atau persimpangan-sendiri cincin).
Kueri yang saya lakukan tampaknya tidak terpengaruh oleh aspek yang tidak valid dari geometri ini (saya hanya menggunakan kueri ST_Distance).
Apa saja hal-hal yang memecah ketika geometri tidak valid?
Apakah memperbaiki geometri ini "secara otomatis" (buffer (geom, 0) atau ST_SimplifyPreserveTopology (geom, 0,0001)) merupakan opsi?
sumber
ST_Buffer(the_geom, 0.0000001)
mungkin melakukan trik untuk persimpangan diri. Gunakan hanya jika konsekuensi dari geometri yang sedikit lebih besar tidak parah.ST_Buffer(the_geom, 0.0000001)
trick pasti membantu banyak.MULTIPOLYGON
dua Poligon, bukan sebagai tunggalPOLYGON
. Cobalah untuk mendapatkan WKT asli jika memungkinkan.Anda dapat mencegah geometri yang tidak valid memasuki basis data Anda. Untuk pengguna PostgreSQL / PostGIS, ini mudah dilakukan dengan memeriksa kendala . Misalnya, pertimbangkan tabel
public.my_valid_table
dengan kolom geometri poligongeom
, gunakan SQL / DDL berikut:Catatan: tabel ini harus memiliki poligon yang valid sebelum menegakkan batasan.
Jika Anda kemudian mencoba memasukkan / menambah geometri yang tidak valid, Anda akan melihat kesalahan:
sumber