2009-12-04 22 views
49

私は詳細な米国郡の地図を、TIGER LINEのデータセットから持っています。データをサンプリング、スムーズ、またはデグラデーションすることで、地理的特徴(この場合は郡の境界線や州線だけを表しますが、一般的な場合もあります)を表現するために、よりまっすぐな、よりボクシーな、GISデータをインテリジェントに劣化または平滑化する方法(ポリゴンを簡略化する)?

サンプリングは、効率的に実行できるか、パラレルデータセットを生成して保存できるかをレンダリング時に行うことができます。私はPostGISを使用していますが、行はshp2pgsqlで生成されたマルチポリラインですが、派手な線を取り、それを人間のインタプリタとほぼ同じ意味の滑らかな線に縮小する方法は非常に便利です。ここ

答えて

29

単純にポイントを捨ててしまう問題は、元のポリゴンの形状をすばやく歪めることができることです。より良いアプローチは、他の方向からそれに来ることです。ポリゴンの基本的な近似から始めて、複雑な形状に向かって上に向かって細かく調整します。

このアプローチの優れた例はDouglas-Puecker algorithmです。完全なポリゴンから2つの頂点を描き始めます。最初の2つの頂点の間に描かれたエッジから最も遠いものを選択して、3番目の頂点を追加します。元のポリゴンとよく似たものが得られるまで、ポイントを追加し続けます。

8

は、単純な反復平滑化アルゴリズムは次のとおり、任意の経路上の各3つの連続する点について

中点無交点を持たず、二つの外側の点の間の直接経路のいくつかの小さなしきい値角度内にある場合、それを削除します。

満足するまで繰り返す。

58

ダグラス・ピッカーは間違いなく正しいアプローチです。 PostGISとQGISの実装にアクセスするための簡単な方法がいくつかありますが、私はここで同様の質問でこの投稿に出会う人たちに追加すると思います。

alt text

と、このようなもので終わる:PostGISのダグラスPeuckerで

alt text

simplify、構文、詳細として実装されている目標は、このような何かを始めることです here at bostongis.orgは、次のものの一部です。

SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table

これは全国のデータセットであっても非常にうまく機能しました。また、QGISのメニュー項目Tools > Geometry Tools > Simplify Geometriesは、任意のジオメトリの簡略化されたシェイプファイルをエクスポートして、現在のプロジェクトにレイヤとして追加することが分かります。

これは非常に基本的なツールセットです。低レベルで質問しましたが、基になる数学を学ぶのはうれしかったですが、here: http://www.mappinghacks.com/code/PolyLineReduction/という良い説明があります。あまりにも必要になる!

+5

ニースに記載されている他の言語への多くのポートへのリンクもあります。他のポリゴンと共通のエッジを維持しながらこれを行う方法はありますか?例えば共通の国境を持つ欧州の簡素化された国。 – naught101

+0

QGISで他のポリゴン一般化オプション[qgisでポリゴンを滑らかに/一般化する方法](http://gis.stackexchange.com/questions/25914/how-to-smooth-generalize-a-polygon-in-qgis)姉妹GIS-SEサイトで –

+2

クールですが、複数のポリゴンが互いに隣り合っているときにそれらを扱う方法はありますか?異なる郵便番号区域の形をしているときのように? – Gerwald

7

Visvalingamのアルゴリズムを試すこともできます。このアルゴリズムは、最小限の知覚可能な部分を繰り返し削除します。ここではそのアルゴリズムの偉大な説明は次のとおりです。

代わりにQGISの
17

、私はそれdoes not delete polygonsのでogr2ogr使用することをお勧め!

ogr2ogr output.shp input.shp -simplify 0.0001 
+3

単位は投影の単位を単純化していますか?たとえば、おそらくそれらは緯度または経度ですか? –

+0

ユニットは実際にはファイル内の座標に使用される単位であるようです。 –