Bir linestring'in kendisiyle kesişip kesişmediğini belirlemek için bir PostGIS işlevi var mı?


16

Bir LineString'in kendisiyle kesişip kesişmediğini söyleyen bir işlev arıyordum. st_intersectsAynı LineString ile iki kez aramayı denedim , ama açıkçası aynı linestrings kesişecek. Herhangi bir işlev yoksa planım, satır dizesindeki tüm noktaları almak ve tek tek lincordlar oluşturmak ve daha sonra st_intersects ile her yeni linestring'i birbirine karşı kontrol etmek olacaktır. Bunun gelmesini istemiyorum, ama korkacağım.

Peki bir linestring'in kendi kendine kesişip kesişmediğini kontrol etmek için herhangi bir PostGIS fonksiyonu var mı? Bir poligonun karmaşık olup olmadığını bulmaya benzer olmalı


Burada PostGIS'in bana akıllıca yardımcı olmadığı ikinci bir cevap vardı, ancak bir bütün olarak sorun hakkında bazı yararlı bilgilere bir bağlantı içeriyordu. Silinmiş gibi görünüyor. Bu bağlantıya sahip olan var mı?
Jeff

Yanıtlar:


14

Kendiliğinden kesişen bir linestring'i aşağıdakilerle test edebilirsiniz ST_IsSimple(geom):

SELECT ST_IsSimple('LINESTRING (50 50, 150 150, 50 150, 150 50)');
 st_issimple
-------------
 f
(1 row)

POINT noktasında otomatik kavşak (100.0 100.0)

Yukarıdaki resim ve altyazı JTS TestBuilder'dan ("Basit?" Seçeneğini tıklayın)

Kendiliğinden kesişme POINT ( 100.0 100.0 )

Bu, ST_UnaryUnion(geom)geçerli / basit üç parçalı çok satırlı döndürme (PostGIS 2.0'dan beri) ile düzeltilebilir :

MULTILINESTRING((50 50, 100 100), 
  (100 100, 150 150, 50 150, 100 100), 
  (100 100, 150 50))

Bu harika! Cevabın çok basit olması gerektiğini biliyordum. Resmi oluşturmak için JTS Testbuilder kullandığınızı söylediniz. Postgis'te kavşak noktasını / noktalarını elde etmenin herhangi bir yolu var mı?
Jeff

Bu zor detay. JTS TestBuilder CheckNoding var, ancak bu çağrı başına bir MULTIPOINT yerine yalnızca bir düğüm koordinatı bulur. PostGIS ile başa çıkma noktalarını nasıl alacağınızdan tam olarak emin değilim.
Mike T
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.