すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:パスモデル

最終更新日:Jan 11, 2024

パスデータは、エッジとノードで構成されるジオメトリックネットワーク図です。 道路網と交通網の構築に使用されます。

概要

Ganos NetworkingはPostgreSQLの拡張です。 Ganos Networking は、コストモデルに基づいて最速、最短、最適なパスを見つける一連の関数とストアドプロシージャを提供します。 コストが時間である場合、最速のパスが最適パスです。 コストが距離の場合、最短のパスが最適パスです。 パスモデルは、道路網上の経路計画、電子地図上の GPS ナビゲーションでの経路検索と計画、およびルーティングに使用できます。 パスモデルは pgRouting 関数と完全に互換性があり、既存のアプリケーションをスムーズに移行できます。

クイックスタート

  • 拡張を作成します。

    拡張機能を作成するGanos_Networkingカスケード;

  • テーブルを作成します。

    CREATE TABLE edge_table (
        id BIGSERIAL、
        dir文字の変化、
        ソースBIGINT、
        ターゲットBIGINT、
        コストFLOAT、
        reverse_cost FLOAT、
        容量BIGINT、
        reverse_capacity BIGINT、
        category_id INTEGER、
        reverse_category_id INTEGER、
        x1フロート、
        y1フロート、
        x2フロート、
        y2フロート、
        the_geomジオメトリ
    ); 
  • データを挿入します。

    INSERT INTO edge_table ()
        category_id, reverse_category_id,
        コスト, reverse_cost,
        capacity, reverse_capacity,
        x1, y1,
        x2, y2値
    (3、1、1、1、80、130、2、0、2、1) 、(3, 2, -1, 1, -1, 100, 2, 1, 3, 1),
    (2, 1, -1, 1, -1, 130, 3, 1, 4, 1),
    (2, 4, 1, 1, 100, 50, 2, 1, 2),
    (1、4、1、-1、130、-1、3、1、3、2) 、(4、2、1、1、50、100、0、2、1、2) 、(4、1、1、1、50、130、1、2、2) 、(2、1、1、1、100、130、2、2、3、2) 、(1、3、1、1、130、80、3、2、4、2) 、(1、4、1、1、130、50、2、2、3) 、(1、2、1、-1、130、-1、3、2、3) 、(2, 3, 1, -1, 100, -1, 2, 3, 3),
    (2、4、1、-1、100、-1、3、3、4、3) 、(3、1、1、1、80、130、2、3、2、4) 、(3、4、1、1、80、50、4、2、4、3) 、(3、3、1、1、80、80、4、1、4、2) 、(1、2、1、1、130、100、0.5、3.5、1.999999999999、3.5) 、(4、1、1、1、50、130、3.5、2.3、3.5、4); 
  • データを更新します。

    UPDATE edge_table SET the_geom = st_makeline(st_point(x1,y1),st_point(x2,y2)),
    dir = CASE WHEN (cost>0 AND reverse_cost>0) THEN 'B'  
               (cost>0およびreverse_cost<0) が「FT」である場合  
               WHEN (cost<0 AND reverse_cost>0) THEN 'TF'  
               ELSE ''エンド; 
  • トポロジを作成します。

    SELECT pgr_createTopology('edge_table' 、0.001);
  • 最短パスを照会します。

    -ダイクストラのアルゴリズムを使用して最短パスを照会します。
    * pgr_dijkstraから選択 (
        'SELECT id、source、target、cost、reverse_cost FROM edge_table '、
        2, 3
    );
    
     seq | path_seq | ノード | エッジ | コスト | agg_cost
    ----- --------- ------- ---------------------------------
       1 | 1 | 2 | 4 | 1 | 0
       2 | 2 | 5 | 8 | 1
       3 | 3 | 6 | 9 | 1 | 2
       4 | 4 | 9 | 16 | 1 | 3
       5 | 5 | 4 | 3 | 1 | 4
       6 | 6 | 3 | -1 | 0 | 5
    (6行)
    
    -- A * アルゴリズムを使用して最短パスを照会します。
    * pgr_astarからのSELECT ()
        'SELECT id、source、target、cost、reverse_cost、x1、y1、x2、y2 FROM edge_table '、
        2, 12,
        directed := false, ヒューリスティック:= 2);
    
     seq | path_seq | ノード | エッジ | コスト | agg_cost
    ----- --------- ------- ---------------------------------
       1 | 1 | 2 | 2 | 1 | 0
       2 | 2 | 3 | 3 | 1
       3 | 3 | 4 | 16 | 1 | 2
       4 | 4 | 9 | 15 | 1 | 3
       5 | 5 | 12 | -1 | 0 | 4
    (5行)
    
    -ターン制限付き最短パス (TRSP) アルゴリズムを使用して、最短パスを照会します。
    * pgr_trspから選択 (SELECT * FROM pgr_trsp)
            'SELECT id::INTEGER、source::INTEGER、target::INTEGER、cost FROM edge_table '、
            2、7、false、false、
            'SELECT to_cost, target_id::int4,
            from_edge | | coalesce('','' | | via_path, ''') AS via_path
            制限から'
        );
    
     seq | id1 | id2 | コスト
    ----- ----- ------ ----------
       0 | 2 | 4 | 1
       1 | 5 | 10 | 1
       2 | 10 | 12 | 1
       3 | 11 | 11 | 1
       4 | 6 | 8 | 1
       5 | 5 | 7 | 1
       6 | 8 | 6 | 1
       7 | 7 | -1 | 0
    (8行) 
  • 拡張を削除します。

    ドロップ拡張Ganos_Networkingカスケード;

SQL リファレンス

詳細については、「公式pgRoutingマニュアル」をご参照ください。