2016-05-13 10 views
1

私はKMLを使用して地図上に特定のゾーンを表示しています。地図上にクリックして情報を得ることができます。アプリケーションはオフラインで作業する必要がありますので、KMLファイルをローカルで使用しています。OSMBonusPackでKMLを効率的に使用

私の問題は、現在、KMLゾーンを表示しているオーバーレイが有効になっている場合、アプリケーションの全体的な速度が低下し、特定のズームレベルの後にポリゴンが大きくなりすぎてレンダリングできなくなる場合です。

私は、KMLを実装するための一般的なヒントを得たいと思います.OSMBonusPackとKMLの関連で、より多くのリソースを消費します。

(例:私はOSMDroidの場合でも、私の視力のうちゾーンテクスチャをレンダリングし、私はそのようなことを防ぐための方法が分からないことに注意。)

+1

マップビューオブジェクトから画面外のオーバーレイを削除することを検討してください。また、ポリゴンのポイントを減らすことは役に立ちます – spy

答えて

1

は、多くのグラフィカルオブジェクトの表示を最適化しようとすると膨大な質問です。 一般的に、この領域には2つの古典的な解があります。

1)低ズームレベルでは、表示するオブジェクトが多数あります。しかし、私たちが遠く離れているので、私たちはそれらを単純化しようとすることができます。 代表的なソリューション:マーカーのクラスタリング、ポリライン/ポリゴンの簡略化。

=>マーカークラスタリングはOBPで利用できますが、KMLではデフォルトではオーバーレイ変換には使用されません。

=> DouglasPeuckerReducerでポリライン/ポリゴン簡約化を利用できます。

=>ズームレベルに応じて動的な単純化はありません。コンテキスト内で改善が得られると思われる場合は、ポリゴン/ポリラインをサブクラス化して描画メソッドを適用して実装するのは大したことではありません。

2)高いズームレベルでは、いくつかのオブジェクトの近くにあります。しかし、多くのオブジェクトは完全にビューの外側です。 典型的な解決方法:境界ボックスを使用したクイックチェック。オブジェクトまたはオブジェクトのグループを排除します(適切にグループ化されていることを前提とします)。

=>これは現在osmdroid/OSMBonusPackでは実装されていません。実装は、バウンディングボックス属性を維持し、このバウンディングボックスをマップビューのバウンディングボックスに対してチェックするdrawメソッドを用いて、修正されたFolderOverlayによって行うことができる。 これは、オブジェクトの論理的なグループではなく、オブジェクトの空間グループ(空間的に近いオブジェクト)に対してこのフォルダを使用する場合にのみ効率的です。

+0

この非常に明確な答えをお寄せいただきありがとうございます。皆さんと@ NikolaiDoroninの回答は役に立ちましたが、あなたのご質問は最高でしたので、私はこの回答に答えを示しています。また、KMLオーバーレイのリソースを少なくしたり、使いやすくするための参考になったことがあれば、とても感謝しています。私はまだ私が100%でそれを使用していないと感じていますが、私の問題は今解決されています。 –

1

あなたの問題はではなく、レンダリング多角形であるように見えますKML処理。

あなたがしようと最初にすべきことは、層の種類を変更している。

<org.osmdroid.views.MapView 
     android:layerType="software" 
     android:id="@+id/mapView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
+0

月曜日にこれを試してフィードバックを与えます。その間、私はこれがマークアップ言語であることを見ます、それはアンドロイドマニフェストに入りますか? –

+1

いいえ、レイアウトで 'layerType'属性を設定できます。[this](https://github.com/lassana/osmdroid-shape-extension/blob/master/app/src/main/res/layout)のようになります。 /activity_main.xml)。 –

+0

大丈夫、高倍率でレンダリングするには大きすぎるポリゴンの問題を解決しました。しかし、遅れが減っても、私はさらに調査しなければならない問題です。 –