線ストリングがそれ自体と交差するかどうかを判断するためのPostGIS関数はありますか?


16

LineStringがそれ自体と交差するかどうかを判断できる関数を探していました。st_intersects同じLineStringで2回呼び出してみましたが、明らかに同一のラインストリングが交差します。関数がない場合の私の計画は、線ストリング内のすべてのポイントを取得し、個々の線ストリングを作成してから、st_intersectsを使用してそれぞれの新しい線ストリングをチェックすることです。私はそれがこれに来ることを望んでいません、しかし、私はそれがそうすることを恐れています。

それでは、ラインストリングが自己交差しているかどうかをチェックするためのPostGIS関数はありますか?ポリゴンが複雑かどうかを調べることに似ているはずです


ここに2番目の回答があり、PostGISに関してはあまり役に立ちませんでしたが、問題全体に関するいくつかの役立つ情報へのリンクが含まれていました。削除されたようです。誰もがそのリンクを持っていますか?
ジェフ

回答:


14

自己交差するラインストリングをテストするにはST_IsSimple(geom)

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

POINTでの自己交差(100.0 100.0)

上の画像と下のキャプションはJTS TestBuilderからのものです(「シンプル?」をクリックします)

での自己交差 POINT ( 100.0 100.0 )

これはST_UnaryUnion(geom)(PostGIS 2.0以降)で修正でき、有効/シンプルな3ピースのマルチラインストリングを返します:

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

これは完璧です!答えはとても簡単でなければならないと思いました。JTS Testbuilderを使用してイメージを作成したと言いました。Postgisで交差点を取得する方法はありますか?
ジェフ

それが難しいディテールです。JTS TestBuilderにはCheckNodingがありますが、これはMULTIPOINTではなく、呼び出しごとに1つのノード座標のみを検出します。PostGISでノードポイントを取得する方法が正確にはわかりません。
マイクT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.