Saya telah mencari fungsi yang dapat memberi tahu saya jika LineString berpotongan dengan sendirinya. Saya sudah mencoba menelepon st_intersects
dengan LineString yang sama dua kali, tetapi jelas linestrings yang identik akan berpotongan. Rencana saya jika tidak ada fungsi adalah untuk mendapatkan semua poin dalam string baris, dan membuat linestrings individu dan kemudian memeriksa setiap linestring baru terhadap satu sama lain dengan st_intersects. Saya tidak ingin hal ini terjadi, tetapi saya khawatir hal itu akan terjadi.
Jadi, apakah ada fungsi PostGIS untuk memeriksa apakah linestring berpotongan sendiri? Seharusnya mirip dengan mencari tahu apakah poligon itu kompleks, saya kira
Jawaban:
Anda dapat menguji untuk linestring yang memotong sendiri dengan
ST_IsSimple(geom)
:Gambar di atas dan di bawah keterangan dari JTS TestBuilder (klik "Sederhana?")
Ini dapat diperbaiki dengan
ST_UnaryUnion(geom)
(sejak PostGIS 2.0), yang mengembalikan multilinestring tiga potong yang valid / sederhana:sumber