52

TIGER LINEデータ セットから、詳細な米国郡の地図を作成しました。地理的特徴を表すために、データをサンプリング、平滑化、または劣化させて、より直線的で、より箱型の、「ノイズの少ない」形状を取得するにはどうすればよいでしょうか?

サンプリングを効率的に行うことができる場合、または並列データ セットを生成して保存できる場合は、レンダリング時にサンプリングを行うことができます。私はPostGISを使用しており、線はによって生成されたマルチポリラインshp2pgsqlです -- しかし、波線を取り、それを人間の通訳者にとってほぼ同じ意味の滑らかな線に減らすソリューションは非常に便利です。

4

7 に答える 7

64

Douglas-Peucker は間違いなく正しいアプローチです。PostGIS と QGIS でその実装にアクセスする簡単な方法がいくつかあります。同様の質問でこの投稿に出くわした人のためにここに追加すると思います。目標は、次のようなものから始めることです。

代替テキスト

最終的には次のようになります。

代替テキスト

PostGIS では Douglas-Peucker は として実装されてsimplifyおり、構文はbostongis.orgで詳しく説明されていますが、次の変形です。

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

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

これは非常に基本的なツールセットであり、私は低すぎるレベルで質問をしましたが、基礎となる数学を学ぶのは良かったです。 PolyLineReduction/と、あまり必要ではないことが判明したサンプル コードが含まれています。

于 2009-12-05T09:25:30.787 に答える
31

ポイントを単純に捨てることの問題は、元のポリゴンの形状をすぐに歪める可能性があることです。より良いアプローチは、別の方向からアプローチすることです。多角形の基本的な近似から始めて、複雑な形状に向かって上向きに調整します。

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

于 2009-12-04T22:13:10.347 に答える
25

ポリゴンを削除しないため、QGIS の代わりに ogr2ogr を使用することをお勧めします。

ogr2ogr output.shp input.shp -simplify 0.0001
于 2013-05-08T17:14:33.363 に答える
8

以下は単純な反復平滑化アルゴリズムです。

任意のパス上の 3 つの連続するポイントごとに、中間ポイントに交点がなく、2 つの外側ポイント間の直接パスの小さなしきい値角度内にある場合は、それを削除します。

満足するまで繰り返します。

于 2009-12-04T22:04:22.347 に答える
8

線の最も知覚しにくい部分を繰り返し削除する Visvalingam のアルゴリズムを試すこともできます。そのアルゴリズムの優れた説明は次のとおりです。

于 2013-03-27T23:36:06.143 に答える
5

Douglas-Peuckerアルゴリズムと Radial Distance アルゴリズムの組み合わせを使用するSimplify.jsを使用することもできます。github プロジェクトにリストされている他の言語への多くのポートへのリンクもあります。

于 2013-10-17T17:03:02.633 に答える