2016-04-18 2 views

答えて

1

マップにポリゴンを追加して、地図のカメラの変更に合わせて表示することができます。

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私は、これは動作するはずだと思うが、私はしませんでしたこれをテストして、それが助けて欲しいと思ってください:)

+0

これは役に立ちます。しかし、ポリゴン数が100を超えると、ハードコーディングされているようです。あなたが知っている選択肢はありますか? – raincrash

+0

私の答え、幸せなコーディング:)を更新しました –

+0

ポリゴンの数を目に見えるものに減らすためにパフォーマンスに関して違いがあるかどうかをチェックしましたか?私は、マップAPIには、見えないポリゴンを「描画」するのに時間を費やすことを避ける最適化もいくつかあると仮定します。それとも、他の理由でポリゴンの数を減らしたいのですか? – user2808624