問題タブ [pgrouting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgis - pgroutingを使用して一貫したトポロジを作成します
特定の都市のルーティング情報を必要とするアプリケーションを開発しています。まず、openstreetmapデータファイル(* .osm)をダウンロードし、osm2pgroutingツール(http://workshop.pgrouting.org/chapters/installation.html)を使用してpostgreSQLデータベースにインポートしました。この後、次のテーブルがあります。
- ノード:単純なロケーションポイントが含まれています
- 方法:いくつかのノードが関与する方法が含まれています
- vertices_tmp:Djistra、A*...などのpgrouting関数に使用できるノードを格納します。
「vertices_tmp」テーブルにないノードを使用して、ノード間の距離を計算しますか?または、「vertices_tmp」に格納されているノードでのみ実行しますか?
ウェイテーブルには、さまざまな場所のポイント(ノード)をカプセル化する「the_geom」という名前のフィールドがあります。例えば:
"MULTILINESTRING((1.5897786 42.5600441,1.5898376 42.5601455,1.589992 42.5605438,1.590095 42.5606795,1.5901782 42.5608026,1.5902238 42.561018,1.5902912 42.5616808,1.5903685 42.561899,1.5904008 42.5620563,1.5903836 42.5624117,1.5904265 42.5627151,1.5904947 42.5628368,1.5905981 42.5629553,1.5906926 42.5631007,1.590802 42.5633238,1.5908604 42.5634883,1.5909501 42.5637139,1.5910869 42.5638755,1.5913053 42.5639639,1.5914994 42.5640237,1.591648 42.5640261,1.5919232 42.5640145,1.5921124 42.5640363,1.5923292 42.5640953,1.592804 42.5643306))"
中間ノードでルーティングできますか、それともソース/ターゲットノードのみでルーティングできますか?
私の目標は、アメニティタグに応じて、運転距離や徒歩距離だけでなく、さまざまなノードまたはPOI間をルーティングできるようにすることです。さらに、ソース/ターゲットノードの最短パスを計算する必要があります。
これを行うためのアイデアはありますか?
routing - pgrouting のためにデータベースから直接 osm データを取得します
ルート ファインダーを必要とするアプリケーションを作成しています。
OSM データを PostGIS データベースに保存していますが、現在、このデータはアプリケーションによって操作される可能性があります。たとえば、道路が移動、追加、または削除される可能性があります。
私は pgRouting を調べていましたが、OSM データを .osm 形式または形状ファイルにする必要があるようです。
pgRouting が OSM テーブルに直接アクセスしてグラフを作成することは可能ですか? そうでない場合、それが可能な他のルーティング システムはありますか?
ありがとう
postgresql - バス路線と時刻表を含む shortest_path
何日も解決策を探していますが、解決する方法が見つかりません。
私の目標は、バスの所要時間に基づいて、2 つのバス停間の最短経路を見つけることです。
だから私はバス路線とそれぞれの時刻表を持っています。コストは、実際のバス停と次のバス停との時間差 (秒単位) で表されます。ソースとターゲットはバス停の ID です
問題は、各バスが 1 日に何度も同じ路線を走っており、毎回同じ方法で運行されているため、並列リンクがいくつかあることです。
pgrouting の shortest_path 関数を試してみましたが、並列リンクが原因で itt が何度も間違ったソリューションを返します。
私はshooting_starについて見てきましたが、私の場合、ジオメトリなしでは使用できないと思います。
私は PostGIS 2.0.1 で PostGreSQL 9.1.9 を持っています。私のデータベース抽出の例を次に示します。
ここの最後の行は他の行と同じバス路線 (idcourse = 1) ですが、1 時間後です。
これを取得するためのリクエストは次のとおりです。
php - pgrouting を使用してルート距離を取得する際の問題
pgrouting-workshop ファイルから始めましたが、複数の方法を使用して正確なルート長を取得するのに問題があります。
最初の方法は、pgrouting.php スクリプトへの ajax 呼び出しから返された長さ変数を合計するだけです。ルーティング データベースから返される長さは、距離の式から取得されるようです: sqrt((x2-x1)^2 + (y2-y1)^s) ここで、x 座標は経度、y 座標は epsg:4326 の緯度です。緯度と経度は地表に投影したときの長さが違うので、この値の良し悪しはよくわかりませんが、このゲームは初めてなので...
この最初の方法では正確な合計距離が得られなかったため、長さの計算に haversine 式を使用して、ajax 呼び出しから返された各セグメントの長さを合計することにしました。しかし、この長さを「カラスが飛ぶように」(ATCF) 開始点と終了点の間の距離と比較したところ、この長さは ATCF の長さより短いことがわかりました。そこで、これらの各ルート セグメントを openlayers の個別のベクター レイヤーに追加したところ、これらのセグメントがルート全体をカバーしていないことがわかりました。特にルートの曲線部分では、多くのセグメントが欠落しています。
そこで、1 つのセグメントの開始点と前のセグメントの終了点の間の距離を取得して、ギャップを合計することにしました。ただし、これらのセグメントが順番どおりに返されないことがわかりました。
私は困惑しています。pgrouting を使用して正確なルート長を取得するにはどうすればよいですか? 使用した html および php スクリプトは次のとおりです。
ルーティング-final05.html:
pgrouting.php (ここでは何も変更していません。これはワークショップ ファイルから直接取得したものです)
postgresql - pgr_astar と不可能なエッジ (例: ロックされたドア)
私は postgresql / PostGIS を pgrouting で使用しており、最短パスを計算する必要があります。以前のバージョンの pgrouting では、shortest_path_astar を使用していました。私のルーティング グラフには、ロックされたドアなど、不可能なセグメントがありました。私が使用した:
基本的には、ドアが閉まっているとき (door = ''S'')、コストを -1 に固定しました。この関数の新しいバージョン pgr_astar までは問題なく動作していました。shortest_path_astar の代わりに pgr_astar を使用すると、このクエリはサーバーをクラッシュさせます。
クラッシュを回避するために関数を変更するにはどうすればよいですか?
performance - PostgreSQL の機能とメモリの問題
このサイトから多くの助けを受け取った後、私は最終的に私が望んでいた仕事をする関数のセットを作成しました. ありがとうございます。しかし、最後の問題が 1 つあります。それは、メモリの効率的な使用です。問題は次の
とおりです。postgreSQL 9.3 では、postGIS 2.1 と pgRouting 2.0 を使用して、pgrouting 関数 pgr_trsp を使用して 2 点間のルートを計算し、ジオメトリ (Linestring) 値を返す関数を作成しました。コードは次のとおりです。
この関数は別の関数で使用され、ジオメトリ結果で大きなテーブル (800k+) をバッチ更新します。ここに参照用があります:
例外は、前述のテーブルから一部のデータが欠落している場合や、ルーティング パスが見つからない場合を処理するため、絶対に必要です。ただし、更新クエリが数分後にクラッシュするという問題を引き起こしているようです。数分の実行後に受け取るメッセージは次のとおりです。
エラー: メモリ不足
SQL 状態: 53200
詳細: サイズ 640000 の要求で失敗しました。
問題は、この関数を効果的に使用または再コーディングして、必要なテーブルを更新するにはどうすればよいかということです。何か案は?
前もって感謝します!