KMLを単純化する(ポイント数を減らす)方法は?
-
08-07-2019 - |
質問
この投稿と同様の問題があります。埋め込みGoogleマップに最大1000個のポリゴンを表示する必要があります。ポリゴンはSQLデータベースにあり、 http://alpha.foresttransparency.org/concession.1.kml 。
(非常に高速な)開発マシンでも、数十個のシェイプをロードするのに時間がかかります。本当に2つの質問です。
-
特定のズームレベルを超えたら、これらをオーバーレイではなくマーカーとしてレンダリングするための適切な戦略は何ですか?
-
特定のズームレベルで意味をなす以上のポイントを表示しないように、ポリゴンを単純化する(ポイントの数を減らす)ための公開アルゴリズムはありますか?
解決
他のヒント
最初の質問では、特定のポリゴンの面積を計算し、各ズームレベルを特定の最小面積に関連付けて、ズームレベルに応じてポリゴンが消えたりマーカーが表示されたりするようにします。
2番目の質問では、Mark Besseyの提案を使用します。
KMLについてはあまり知りませんが、質問2の通常の解決策は、ポイントを反復処理し、特定のサイズ以下の線分を削除することです。これにより、「不幸」が発生します。場合によっては効果がありますが、比較的高速で簡単です。
2つのことをお勧めします。 -接触しているポリゴンを計算して結合します。これには多くの処理と難しい計算が含まれますが、私はそれを実行したので、それが可能であることを知っています。 -PNG形式のKMLを使用する代わりに独自のオーバーレイを作成し、前の提案でそれらを組み合わせます。多くのPNGを作成する必要がありますが、クライアント上では非常に高速です。
幸運:)
少し前に#2の質問に対する解決策が必要でしたが、利用可能な行単純化アルゴリズムのいくつかを見て、独自のアルゴリズムを作成しました。
プロセスはシンプルで、うまく機能しているように見えますが、正しく実装しないと少し遅くなる可能性があります:
P [0..n]
はポイントの配列です
T [n]
を、ポイント P [n-1]、P [n]、P [n + 1]によって形成される三角形として定義します。 ]
Max
は、この行を削減しようとしているポイントの数です。
- セット内のすべての可能な三角形
T [1..n-1]
の面積を計算します。 - 最小面積の三角形
T [i]
を選択します - ポイント
P [i]
を削除して、本質的に三角形を平らにします - 影響を受ける三角形の面積を再計算します
T [n-1]、T [n + 1]
- ポイント数が>の場合、ステップ2に進みます。
Max