地理ネットワークデータモデル

このドキュメントは、地理ネットワークモデルクラスの目的と構造を説明することを意図しています.GNMはGDALの一部であり,地理ネットワークの作成,管理,解析の方法を提供します.

GNMクラスの主な目的: - GDAL(以前のOGR)が空間ベクトルフォーマットに対して提供しているように,異なる既存のネットワークフォーマットの抽象化を提供すること;- ネットワーク機能を全く持っていない空間フォーマットにネットワーク機能を提供すること.

一般概念

任意の実世界ネットワークは,それ自体がGDALDatasetとして表現されることができるベクトルデータのセットとして表現することができます.GNMでは,このデータは2つの部分で構成されています.ネットワークのトポロジ(グラフ),ネットワークのメタデータ(名前/説明),特別なフィーチャ識別子のセットなどは"ネットワーク部分"に属し,GDALの一般的なレイヤ,フィーチャ,ジオメトリは"空間/属性部分"に属します.異なるフォーマットのデータセットで作業するために,GNMで以下のクラスが設計されました.

ネットワーク

GNMNetwork は抽象ネットワークを表します.実際には,ネットワークデータと空間/属性データは,データセットの形式によっては分離できない場合があります(追加のレイヤ/フィールド/タグのみ),一方,GNMNetworkの具体的な実装は,全データセットからどのデータが"ネットワーク部分"を参照しているかを"知っており",それを操作することができます.GNMNetworkはユーザに以下の機能を提供します:

-接続の設定/解除.これらのネットワークトポロジを構築するための一般的なメソッド(自動的および手動)は,一般的な方法で接続されるフィーチャの識別子を受け取り,具体的な実装は,トポロジをどこに,どのように保存および構築するかを知っています;-接続の読み取り.一般的な方法で接続を返します;-レイヤ/フィーチャの追加/削除.地物またはレイヤがネットワークに追加されると,いくつかのアクションが開始される場合があります(グラフ内の重みの変更,接続されたフィーチャでのカスケード変更).具体的なGNMNetworkは,それがどのように行われるかを説明します.-ネットワークのビジネスロジックまたは動作の定義.ネットワークルールまたは制約/制限で表現することができます.各ルールが文字列から設定できることが期待されており,各具体的なGNMNetworkは,それを内部形式に変換します.

形式

GNMNetworkはGDALDatasetを継承し,OGRDatasourceに追加機能を持つように見えます.ネットワーク用のGDALドライバのセットがあります.GDALの一般的なネットワーク実装は,ルール,仮想エッジおよび頂点などの追加機能を提供します.また,地物を編集する際には,ネットワークはネットワークルールおよびその他の特定の機能を制御し,編集の保存を拒否することができます.他のネットワークドライバ(pgRouting,OSRM,GraphHopperなど)は,GNMNetworkクラスを介して基本機能を提供する必要があります.

ネットワーク形式

既存のネットワーク形式(PostGIS pgRouting,Oracle Spatial Networks,GML内のトポロジなど)の``ネイティブ``サポートをGNMに追加するには,対応するGNMDriver-GNMNetworkインターフェースを実装する必要があります.ただし,最初から"ネットワーク部分"を持たない形式(ESRI Shapefileなど)でネットワークを作成および使用する必要がある場合には,GNMで既に実装されている 汎用 ネットワーク形式を使用することもできます.

GNMGenericNetwork

GNMGenericNetwork は,GNMNetworkの具体的な実装です.GNMGenericNetworkは,最もGDALDatasetドライバをサポートすることを意図しています(対応するドライバの機能に依存します).技術的には,ネットワーク形式の抽象化は,GDALの抽象化を利用して達成されます:データセットおよびレイヤのアプローチ.GNMGdalNetworkは,GDALDatasetインスタンスを集約し,"ネットワーク部分"が"システムレイヤ"のセット(wkbNoneジオメトリ,特定の属性フィールド)として表現され,空間/属性データは"クラスレイヤ"または"クラス"のセット(通常のジオメトリおよび属性を持つレイヤ)と見なされます."ネットワーク部分"は,GNMGenericNetworkによって自動的に作成および維持され,それを操作するためのメソッドを提供します.

GNMGenericNetworkによる実世界ネットワークの記述方法は,一般的であることを意図しています:-最も一般的なグラフのタイプが使用され,すべての有用な情報が保持されます:エッジの方向(有向/無向),エッジのコスト(重み付け/重みなし).このグラフは,インシデンスリストとして保存されます:ソース頂点フィーチャID,ターゲット頂点フィーチャID,エッジフィーチャID,直接コスト,逆コスト,エッジの方向;-任意のジオメトリを持つ任意のフィーチャがグラフ内の頂点またはエッジになることができます.また,接続エッジの下にまったくフィーチャがない場合もあります(実際には,この場合に仮想エッジが作成されます).これらすべては,ユーザがフィーチャ識別子を操作する一方,GNMGenericNetworkがフィーチャ間の接続の整合性を保証します;-ネットワーク内の任意のフィーチャは,ユニークな識別子であるグローバルフィーチャ識別子(GFID)を取得します.これにより,1つのネットワークの下に任意の数の"クラスレイヤ"を統一することができます;-GNMGenericNetworkは,ネットワークのビジネスロジックを決定するために独自の方法を使用します.詳細については, GNMGenericNetwork::CreateRule() を参照してください.

詳細については, GNMGenericNetwork クラスのドキュメントを参照してください.

一般的な形式のネットワークには,以下の重要な特徴があります:-ネットワークで単一の空間参照システムが使用されており,これは,ネットワークに表示される各地物がこのSRSに変換されることを意味します;-ネットワークは常に空で作成され,地物をインポートまたは作成する必要があります;-データセットから"ネットワーク部分"を削除することはできません-すべてのデータを含むネットワーク全体を削除するだけです.削除はレイヤごとに行われ,ネットワークに登録されたシステムレイヤおよびクラスレイヤのみが削除されます.

ネットワーク解析

GNMのネットワーク解析は, GNMNetwork オブジェクトで実装されています.

GNMGenericNetwork は,グラフをSTLコンテナ内のメモリに保持し,結果を配列形式で返す基本アルゴリズムを提供します(たとえば,std::vectorは,パスのエッジと頂点のGFIDでいっぱいです).ただし,呼び出し元は,フィーチャがネットワークを構成するレイヤから取得されるOGRLayerとして結果を取得します.また,いくつかの追加フィールドが作成されます(VERTEX/EDGEインジケータフィールド,GFID,レイヤ名など).呼び出し元は, GDALDataset::ReleaseResultSet() を介して結果のOGRLayerを解放する必要があります.