0
我有幾個可點擊的多邊形作爲ArrayList。是否有辦法呈現視圖邊界內的多邊形,即僅在縮放級別可見?而不是渲染所有這些。僅在視圖邊界內渲染多邊形:Google Maps Android
我有幾個可點擊的多邊形作爲ArrayList。是否有辦法呈現視圖邊界內的多邊形,即僅在縮放級別可見?而不是渲染所有這些。僅在視圖邊界內渲染多邊形:Google Maps Android
你可以添加多邊形的地圖與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
}
}
}
}
注意我認爲這應該工作,但是我沒有測試這個,希望它有幫助:)
這是有幫助的。但似乎更多的'硬編碼'爲100多邊形。你有沒有其他的選擇? – raincrash
更新了我的答案,快樂的編碼:) –
您是否檢查過,是否在性能方面有所差別,以減少多邊形的數量到可見的多邊形?我會假設地圖API也有一些優化,避免花費時間在「繪製」不可見的多邊形上。或者您希望減少多邊形數量的其他原因? – user2808624