トポロジを維持するラインネットワークを簡素化する方法


9

約250.000のセグメントを持つシェープファイル(ヨーロッパの主要道路からなる)があり、グラウチングのために単純化する必要があります。しかし、私はそれを適切に行う方法を見つけることができないようです。

これは次のようになります。

http://i.stack.imgur.com/qJ2OJ.png

これは次のようになります。

http://i.stack.imgur.com/FN4Z6.png

残りのポイント間のトポロジー接続を維持しながら、3本未満のライン(交差ではない)に接続されているラインのすべてのポイントを削除する必要があります。誰かがアイデアを持っているなら、それは大歓迎です!

宜しくお願いします

編集:私は@dkastlのアイデアを実装しようとし、以下のコード(underdarkのブログhttp://underdark.wordpress.comから取得したネットワーク生成)を使用して、ネットワークから不要なノード(2つの隣接するラインストリングのみのノード)のみを取得することに成功しました/ 2011/02/07 / a-beginners-guide-to-pgrouting /):

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

だから、私がしなければならないのは、行をマージすることだけです。しかし、私にはその手がかりがありません。上記のクエリの結果のすべての行で隣接する行を取得してそれらをマージするループである必要があると思います。次に、ネットワークを完全に再構築し、上記のクエリが空の結果を返すまでプロセスを繰り返します。


1
pgRoutingでこれを行う必要があるのはなぜですか?すでにソース/ターゲットIDが割り当てられている場合は、ソースとターゲットIDのみを含むラインストリングで新しいジオメトリを作成できます。2番目の画像のようになります。
dkastl 2012

問題は、ラインがセグメント化されていることです(私が投稿した最初の画像を見ると、表示されるすべてのポイントが新しいセグメントの開始/終了です)。
chriserik

1
各ポイントが新しいラインストリングジオメトリを開始することは、画像から明らかではないと思います。pgRoutingのassign_vertex_id関数を実行して、ソース/ターゲット列を埋めましたか?その場合、後でいくつかのクエリを実行して、2回しか存在しないソース/ターゲットIDを特定することができます。つまり、この時点で2つのラインセグメントをマージできるはずです。ソース/ターゲットIDが2回以上存在する場合、それは交差でなければなりません。
dkastl 2012

@dkastl:とても良いアイデアです!私はそれをどこまで達成したかを示す質問を更新しました。
chriserik 2012

回答:


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