PostGISの隣接するラインストリングのリストからすべてのノードを取得します


8

私はPostGisとpgRoutingを使用しています。最短パスクエリによって返された隣接エッジのジオメトリを含むテーブルがあります。これらのエッジを連結して、これらのエッジを構成するすべてのノードのリストを取得します。SQLでこれを行うにはどうすればよいですか?

ソリューションはLineMergeとGeomUnionの混合になると思いますが、それを行うスマートな方法はありますか?

ありがとう。


ST_LineMergeはその仕事をしません。ST_LineMerge — MULTILINESTRINGを縫い合わせることによって形成されたLineStringのセットを返します。PGRoutingは、ラインストリングのリストを送り返します。多分GemUnionが鍵です。できれば確認します。
Fabien Ancelin、2011

回答:


4

わかりましたので、そのSQL関数を使用して自分で行いました。

CREATE OR REPLACE FUNCTION adjacent_linestring_array_to_set_of_points(array_geom geometry[])
   RETURNS SETOF geometry AS
$$
DECLARE
    accu_line geometry;
    temp_line geometry;
BEGIN

FOR temp_line in select * from unnest(array_geom) LOOP
    IF accu_line is NULL THEN
        accu_line := temp_line;
    END IF;
    accu_line := linemerge(GeomUnion(accu_line, temp_line));
END LOOP;

RETURN QUERY SELECT ST_PointN(accu_line, generate_series(1, ST_NPoints(accu_line)));
END;
$$

LANGUAGE 'plpgsql' VOLATILE STRICT;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.