クエリに問題があります。n_type列に値を持つラインストリングのネットワークがあります。これは、いくつかのオプションの1つです。同じタイプで連続したラインを形成するラインストリングをグループ化した新しいテーブルを生成したいと思います。
前:

後:

これが私がこれまでに得たものです。結果を返しますが、意味がありません。型が一致せず、返される機能が多すぎます。
また、「連続的」とは、その隣から5フィート以内にあり、30度未満の角度で交わる線として定義したことに注意してください。
WITH RECURSIVE all_links (i, pk_uid, n_type, geom) AS (
SELECT 1 AS i,
pk_uid,
n_type,
geom
FROM network
WHERE n_type != 'none'
UNION ALL
SELECT a.i + 1,
b.pk_uid,
b.n_type,
b.geom
FROM network b, all_links a
WHERE b.n_type = a.n_type
AND b.geom <#> a.geom <= 5 --lines are continuous if within 5 feet of neighbor
AND ABS( DEGREES( 3*pi() - st_azimuth(st_startpoint(a.geom),st_endpoint(a.geom)) + st_azimuth(st_startpoint(b.geom),st_endpoint(b.geom)))::int % 360 - 180) <= 30 ) --only take links within 30 degrees of the same angle
SELECT i, n_type, ST_Union(the_geom) FROM all_links GROUP BY i, n_type
私は再帰クエリが進むべき道であると想定しましたが、それについて間違っていることが証明されてうれしいです。再帰的なことは少し難しいです。
編集:また、ST_UnionとST_Linemergeを使用して集計し、結果をダンプしようとしたことも追加する必要があります。この機能は機能しますが、30度を超える交差点を考慮しておらず、接続の5フィートの許容範囲を守ることができません。
@MickyTありがとう。最後のSELECT句でユニオンを実行できるが、当面はすべての結果を確認できるように*を選択しただけであることを述べたはずです。コードスニペットを変更して、最終的にどのようになるかを示します。
—
spencerrecneps 2015
再帰的なクエリを理解するのは困難です。笑と+1
—
ジョンパウエル
ざっと見てみると、ベース/アンカークエリに問題がある可能性があります。A、B、Cなどの各行の開始点を選択する必要があります。これは、再帰部分で作成します。おそらく、何らかの種類の順序をアンカークエリに追加する必要があります(おそらく、xまたはyの方向で、データを見ないと分からないでしょう)。これを分解して、再帰部分を続行する前に、最初に適切な開始点を取得していることを確認します。(ISH)私は最近、時系列の筋を見つけるために再帰クエリを使用して、私はアンカーポイントが正しく識別したら、残りは簡単だった
—
ジョン・パウエル
@dbaston。良い点ですが、これは再帰クエリでも行うことができ、誰もがそれをインストールしているわけではありません。
—
John Powell、
a.pk_uid != b.pk_uid