0

PostGIS にライン シェープファイルをロードしpgr_createTopology、pgRouting で使用して、ソースとターゲットを追加してテーブルをルーティング可能にしました (ライン ソース番号とターゲット番号の 2 つのエンド ノードを割り当てます)。次の図は表の一部です。

ここに画像の説明を入力

テーブル内の行に属するエンド ノードの座標がいくつかあります。これらの座標に対応するソース/ターゲットの数を知りたいと思います。

たとえば、上の表で、259463.392, 2737830.062が と のエンド ノードの 1 つであると仮定するline id=1line id=2、この座標はsource/target=175

私はSQLの初心者で、いくつかのクエリを試しましたが、エラーが発生しました:

SELECT ST_AsText(geom) from source;
   FROM public.tc_line15_split;

エラー:

ERROR:  syntax error at or near "FROM"
LINE 2:        FROM public.tc_line15_split;
               ^
********** Error **********

ERROR: syntax error at or near "FROM"
SQL state: 42601
Character: 45

更新#1

列のソース/ターゲットにノード座標の情報が含まれている場合、私は何が欲しいかを知ることができると考えていますが、そうではないようです。それらは数字を含む列です。

以下のように頂点テーブルを取得しました。

ここに画像の説明を入力

次のクエリを使用して、以下のテーブルを取得しました。

select source, target, st_astext(geom) as geom from public.tc_line15_split;

ここに画像の説明を入力

上記の2つの表から必要なものが得られるかどうかをまだ探しています。

そこで、以下のクエリを試して、指定された座標の近くに 2 つの行を取得しました。

select id from tc_line15_split 
where st_dwithin(geom, st_setsrid(st_makepoint(259463.392, 2737830.062), 3826), 0.1);

ここに画像の説明を入力

その後、最初の図に示された表から、座標がそれぞれ id 170/51 の source/target=54 であることがわかりましたが、それでもまだ非効率的です。

指定された座標がこれらの2つの線の間にあることがわかった後、この場合line id=51と両方に含まれる同じソース/ターゲット番号を見つける方法があるのでしょうか?line id=170


更新#2

頂点テーブルに基づいて、次のクエリを使用して、指定された座標の対応するソース番号 (ポイント ID でもある) を取得しました。

select id from tc_line15_split_vertices_pgr 
where st_dwithin(the_geom, st_setsrid(st_makepoint(259463.392, 2737830.062), 3826), 0.1);

ここに画像の説明を入力

4

2 に答える 2

1

達成しようとしているのが、共通のノードを共有するネットワーク エッジの数を把握することである場合、これを達成する最も簡単な方法は、 によって生成された頂点テーブルを使用することpgr_createTopology()です。ドキュメントによると、エッジテーブルと同じ名前のテーブルが生成されますが、_vertices_pgr追加されています。

次にメソッドを実行すると、テーブルpgr_analyzeGraph()内の空の列my_table_vertices_pgrに各頂点の統計が入力されます。これらの統計の 1 つがcnt列で、特定の頂点が隣接するエッジによって共有される回数を示します。

ここに画像の説明を入力

編集:

あなたの質問の他の側面のいくつかについて:

質問の最初のクエリは、構文が原因でエラーを返します。これは機能するはずです。

SELECT ST_AsText(geom) FROM public.tc_line15_split;

更新 #1 について -> ノード座標は頂点テーブルに明示的に保存されませんが、次の15クエリを使用して特定のノード ID (例: ) を取得できます。

SELECT ST_AsText(ST_Centroid(the_geom))
    FROM tc_line15_split_vertices_pgr
    WHERE id = 15

または、単に X と Y が必要な場合:

SELECT ST_X(the_geom), ST_Y(the_geom)
    FROM tc_line15_split_vertices_pgr
    WHERE id = 15
于 2016-11-02T20:59:53.890 に答える
1

テーブルを一覧表示するには:

select source, target, st_astext(geom) as geom from public.tc_line15_split;

id や geom などの列を持つ頂点テーブルも必要です。場所に最も近いノードを見つけたい場合は、次のようなものを使用できます。

select id from vertices where st_dwithin(geom, st_setsrid(st_makepoint(x,y), 3826), tol);

ここで、x、y は座標で、tol は検索半径です。

于 2016-11-02T13:55:09.317 に答える