0
私はいくつかのクリック可能なポリゴンをArrayListとして持っています。ビューの境界内にあるポリゴンをレンダリングする方法、つまりズームレベルでのみ表示する方法はありますか?それらのすべてをレンダリングするのではなく。ビュー内のポリゴンのみをレンダリングする:Google Maps Android
私はいくつかのクリック可能なポリゴンをArrayListとして持っています。ビューの境界内にあるポリゴンをレンダリングする方法、つまりズームレベルでのみ表示する方法はありますか?それらのすべてをレンダリングするのではなく。ビュー内のポリゴンのみをレンダリングする:Google Maps Android
マップにポリゴンを追加して、地図のカメラの変更に合わせて表示することができます。
Polygon polygon = map.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
.strokeColor(Color.RED)
.fillColor(Color.BLUE)
.visibility(false);
カメラの変更リスナーをGoogleマップインスタンスに追加します。
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
if (cameraPosition.zoom > 12) { // Your zoom level to show polygon
polygon.setVisible(true);
}
}
});
CameraPositionのズームレベルがさらに離れている必要がある場合は、追加のケースを実装できます。
List<Polygon> polygons = new ArrayList<>();
polygons.add(map.addPolygon(new PolygonOptions()
.add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
.strokeColor(Color.RED)
.fillColor(Color.BLUE)
.visibility(false)); //Repeat for as many as you have
:それは、あなたが示されるべきポリゴン点検、ArrayListの中にカメラを変更した後、すべてのポリゴンを置くことができ、多くのpoligonsの処理を改善するには:)
EDIT
を助けたホープカメラの変更リスナーで:
if (cameraPosition.zoom > 12) { // Your required zoom level to show polygons
LatLngBounds latLngBounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
for (Polygon polygon : polygons) {
for (LatLng latLng : polygon.getPoints()) {
if (latLngBounds.contains(latLng)) {
polygon.setVisible(true);
break; //Needed if only one polygon can be visible at a time, remove if several can be visible at a time
}
}
}
}
NOTE私は、これは動作するはずだと思うが、私はしませんでしたこれをテストして、それが助けて欲しいと思ってください:)
これは役に立ちます。しかし、ポリゴン数が100を超えると、ハードコーディングされているようです。あなたが知っている選択肢はありますか? – raincrash
私の答え、幸せなコーディング:)を更新しました –
ポリゴンの数を目に見えるものに減らすためにパフォーマンスに関して違いがあるかどうかをチェックしましたか?私は、マップAPIには、見えないポリゴンを「描画」するのに時間を費やすことを避ける最適化もいくつかあると仮定します。それとも、他の理由でポリゴンの数を減らしたいのですか? – user2808624