ST_MakeLineは、ジオメトリビューアでレンダリングされていないサポートされていないジオメトリを返します

Aug 20 2020

指定された座標間の最短距離を返すST_MakeLineクエリを実行しようとしています。コードは次のとおりです。

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

結果は次のようになります。

結果がnullを示さないことは明らかです。しかし、ジオメトリビューアで表示すると、次のメッセージが表示されます。

このメッセージの意味と、この問題の回避策を見つける方法を教えてもらえますか?道路のシェープファイルのジオメトリタイプはMULTILINESTRINGです。

St_AsText(route.geom)は、次の結果を示しています。

SELECT ST_AsText( ST_MakeLine(route.geom)) FROM (SELECT *FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

pgr_fromAtoBからの単純なSelectを使用すると、次のようになります。

SELECT * FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191) ORDER BY seq

roads2_nodedは、私が取り組んでいる道路のシェープファイルです。

回答

1 Mohid Aug 22 2020 at 07:28

pg_Routing関数はMultiLineStringsには使用できません。したがって、最初に、roads2テーブルのすべてのデータエントリを使用して新しいテーブルを作成します。次に、roads2の列を新しいテーブルに追加します。たとえば、id、sub_id、name、distance、geomなどです。次に、次のクエリを使用して、roads2のMultiLineStringジオメトリをLineStringに変換します。

ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(linestring,4326) USING ST_GeometryN(geom, 1);

その後、roads2のgeom列を新しいテーブルに追加します。その後、道路ネットワークとトポロジのクエリ、つまりpgr_nodeNetworkとpgr_createTopologyを適用し、関数pgr_fromAtoBを作成します。次にST_MakeLineクエリを実行します。

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('my_table_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

結果はジオメトリを表示します: