2016-04-18 127 views

回答

1

你可以添加多邊形的地圖與visibile關閉,並根據谷歌地圖相機的變化使他們的知名度。

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); 

將相機更改偵聽器添加到GoogleMap實例。

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具有更多數據與縮放級別不同。希望它能幫助:)

編輯

改善許多poligons的處理,你可以把你所有的多邊形中ArrayList和相機變更後,應檢查會顯示一個多邊形:

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 

在攝像頭的變化監聽器:

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 
      } 
     } 
    } 
} 

注意我認爲這應該工作,但是我沒有測試這個,希望它有幫助:)

+0

這是有幫助的。但似乎更多的'硬編碼'爲100多邊形。你有沒有其他的選擇? – raincrash

+0

更新了我的答案,快樂的編碼:) –

+0

您是否檢查過,是否在性能方面有所差別,以減少多邊形的數量到可見的多邊形?我會假設地圖API也有一些優化,避免花費時間在「繪製」不可見的多邊形上。或者您希望減少多邊形數量的其他原因? – user2808624