0

レイヤー内の線分を分割するノードを選択したい。ノードが 2 本の線と交差する場所でのみ選択したいのですが、2 本以上の線 (T 字路の交差点や 4 方向の交差点など) と交わるノードは選択したくありません。

これが私が提供できる最高の写真です(写真を投稿するという評判はありません)。左側の --- 行は最初のセグメントで、右側の --x--x--x 行は 2 番目のセグメントです。O は、選択したい真ん中のノードです。

--------------------------------------0--x---x--x- --x---x---x--x--x--x--x--x--x--x

2 本以上の線がノードに接しているノードを選択したくありません。

これまでのところ、このクエリを試しました

CREATE TABLE contacts_st_touching_faults as
SELECT ST_Intersection(a.the_geom, b.the_geom), Count(Distinct a.gid) = 2
FROM final_layer as a, final_layer as b
WHERE ST_Touches(a.the_geom, b.the_geom)
AND a.gid != b.gid
GROUP BY ST_Intersection(a.the_geom, b.the_geom)

このクエリを実行すると、2 本以上の線が交差する交差点 (T 交差点と 4 方向交差点) が表示されます。

また、ST_intersects を subing してみましたが、ST_touches ほどうまく機能していないように見えましたが、それらを機能させる方法やその他の方法を知っていれば、大歓迎です!

助けてくれてありがとう!

4

2 に答える 2

0

これはうまくいくはずです:

WITH contacts AS(
SELECT a.gid AS gid1,b.gid AS gid2, ST_Intersection(a.the_geom, b.the_geom) AS intersection
FROM final_layer as a, final_layer as b
WHERE ST_Touches(a.the_geom, b.the_geom)
AND a.gid<b.gid
)
SELECT *
FROM contacts c1
LEFT JOIN contacts c2
  ON ((c1.gid1=c2.gid1 AND c1.gid2<>c2.gid2) OR (c1.gid1=c2.gid2 AND c1.gid1<>c1.gid2))
  AND c1.intersection=c2.intersection
WHERE c2.gid1 IS NULL;

ST_Intersection を最終クエリに移動するとパフォーマンスが向上しますが、単純にしたかったのです。

于 2013-04-24T14:09:32.030 に答える
0

これにより、牽引線が交差するノードがリストされます。

    SELECT array_agg(gid) AS gids, count(gid) AS count, geom
    から
      -- ラインからすべての頂点 (ポイント) を一覧表示します
      (SELECT gid, (ST_DumpPoints(geom)).geom AS geom
      FROM lines_layer) AS p
    GROUP BY p.geom
    HAVING count(gid) = 2
    ORDER BY count(gid);

すべてのノードについて、「= 2」を「> 1」に置き換えます

于 2013-11-17T23:19:33.563 に答える