PostGISから無向グラフを作成する方法は?


9

この質問は、私がしばらくウェブを検索してきましたが、まだ特定していない可能性のあるリソースに関連しています。

プロジェクトで今作業しているのは、オフィスルーム、廊下、階段、エレベーター、建物間のルートを表すグラフで最短経路アルゴリズムを実行する必要があることです。

プレゼンテーションレイヤーについては、MapServerでPythonスクリプトを使用することを考えましたが、エッジを簡単に追加または削除できるように、OpenEVから生成された(シェープファイルが必要とされる)postGIS dbからグラフを構築する方法についてさらに考えていますその後のポイントに関する重みまたは情報。

Pythonには、グラフを処理するnetworkXと呼ばれるモジュールがあり、この問題はここでstackexchange 取り上げられていますが、私が作成しようとしているグラフは有向グラフではなく、無向グラフです。

更新:5日前Ben ReillyのutilitynetworkがnetworkXプロジェクトに追加されました。Utilitynetworkは、シェープファイル機能から有向グラフを構築します。
質問は、postGISデータベースからフィーチャを読み取る同様のアプローチについて未解決のままです。


pgRoutingを使いたくないですか?
アンダーダーク

私はpgRoutingを使用しますが、実装しようとしているアルゴリズムは双方向のa-starであり、既成のオプションではありません。
user39901230 2010年

回答:


5

NetworkXには、有向グラフを無向グラフに変換するメソッドがあります

さらに、シェープファイル(またはシェープファイルのディレクトリ)を読み取るコードは、実際には有向グラフを出力する必要はありません。これは、当時必要だったものです。私は試していませんが、1行を置き換えます:

net = nx.DiGraph()

...トリックをするだけかもしれません。

NetworkXは、1.4(機能)でシェイプファイルをそのまま(OGRを使用して)読み取ることができるように見えます。


混乱させて申し訳ありません。私が実際にやろうとしていることは、shp2pgsqlを使用してシェープファイルをpostGISデータベースに変換し、postGISデータベースからnetworkXグラフにインポートすることです。
user39901230 2010年

ベンに感謝します。5日前にチケットを閉じ、コードがnetworkXプロジェクトに追加されたことに気づきました。postGISデータベースの機能を使用して同じことを実行できるかどうかを確認することは興味深いことでしたが、クリスマス休暇中にそれを確認します。
user39901230 2010年

networkxにはモジュールが含まれていますが、v1.4はまだリリースされていないため、utilitynetworkの使用例をいくつか示すことができます。これまでのところ私はtestnetworkloadを通って、あなたのサンプルざっと目を通してきたここで見つける:gis.stackexchange.com/questions/210/alternatives-to-pgrouting/...
user39901230

これについては、まだやるべきことがいくつかあります。そのため、私はpypiを使用していません。私は今ウィキを公開しました、それは最高の実用的なサンプルを含んでいるはずです:bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly

これを最終学部のプロジェクトに含めるつもりなので、私も貢献できますか?
user39901230 2011年


2

他のフレームワークの使用にどの程度関心があるか、またはすでに解決済みかどうかはわかりませんが、Geodjangoプロジェクトは、PostGISバインディングがインストールされたpostgresを含む、さまざまなGIS対応データベースのために、GISデータモデルに本当にすばらしいORM機能を追加します。

Geodjangoリンクはこちらです:http ://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

DjangoはPythonのWebフレームワークであり、geodjangoはバックエンドWeb開発用のGISデータを編集および表示するようになりましたが、直接OGR Pythonバインディングよりもはるかに直感的で強力なクラスセットを提供します(より多くの 'pythonic'よりも直接「C構文から変換」。たとえば、コンストラクターでwkbLineString定数を使用してogr.Geometryクラスを作成するのではなく、django.contrib.gis.geos.linestring.LineStringクラスを直接作成できます)。

次の場所にあるgeodjangoチュートリアル:http ://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

Postgresデータベースからの読み取り/書き込みを構成するために必要な手順は、他のdjango pythonモデルを使用するのと同じくらい簡単で、頭痛の種は地理空間データベースのセットアップです。したがって、データをpostgresデータベースにロードするには、上のチュートリアルのアンカー#layermappingリンクを参照してください。これは、シェープファイルで使用可能なデータと、データモデル用に設定されたデータベース列との間のフィールドマッピングです。

少なくとも、チュートリアルを実行してPostGISバインディングをセットアップし、このGISツールが探しているものかどうかを確認するには、2〜3時間かかります。

また、GIS対応データベース(たとえば、pgsqlのPostGISバインディング)がある場合、データベースに格納された関数を使用して、データベースジオメトリ(ライン/ポリゴン)データを直接「内に」「含む」ことができます(例ST_Contains(...):サンプルSQLを参照)ここでpostgis / pgsqlの場合:http : //postgis.refractions.net/docs/ch04.html#id2639062 ...そしてGeodjangoの最も優れた点はこれらの空間ルックアップを実行するように最適化されていることです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.