Google maps 仅渲染视图边界内的多边形:Google Maps Android

Google maps 仅渲染视图边界内的多边形:Google Maps Android,google-maps,google-maps-android-api-2,Google Maps,Google Maps Android Api 2,我有一些可点击的多边形作为阵列列表。是否有方法渲染视图边界内的多边形,即仅在缩放级别可见?而不是渲染所有多边形。您可以在禁用visibile的情况下将多边形添加到地图中,并根据google地图摄影机的更改使其可见 Polygon polygon = map.addPolygon(new PolygonOptions() .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0)) .s

我有一些可点击的多边形作为阵列列表。是否有方法渲染视图边界内的多边形,即仅在缩放级别可见?而不是渲染所有多边形。

您可以在禁用visibile的情况下将多边形添加到地图中,并根据google地图摄影机的更改使其可见

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在缩放级别之外有更多数据。希望有帮助:)

编辑

要改进对许多多边形的处理,可以将所有多边形放在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

注意我认为这应该行得通,但我没有测试,希望它有帮助:)

你可以在禁用visibile的情况下将多边形添加到地图中,并根据google地图摄像头的更改使其可见

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在缩放级别之外有更多数据。希望有帮助:)

编辑

要改进对许多多边形的处理,可以将所有多边形放在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

注意我认为这应该有效,但我没有测试它,希望它有帮助:)

这是有帮助的。但对于100个多边形,似乎更“硬编码”。你知道还有其他选择吗?更新了我的答案,happy Codeing:)你检查过了吗,将多边形的数量减少到可见多边形是否会对性能产生影响?我假设maps API也有一些优化,这避免了花费时间“绘制”不可见多边形。或者出于哪些其他原因,您希望减少多边形的数量?我没有在代码中检查它,但我认为使用此方法可能会降低性能。我不确定谷歌是否对此进行了优化,但我猜他们不会这样做。这是有帮助的。但对于100个多边形,似乎更“硬编码”。你知道还有其他选择吗?更新了我的答案,happy Codeing:)你检查过了吗,将多边形的数量减少到可见多边形是否会对性能产生影响?我假设maps API也有一些优化,这避免了花费时间“绘制”不可见多边形。或者出于哪些其他原因,您希望减少多边形的数量?我没有在代码中检查它,但我认为使用此方法可能会降低性能。我不确定谷歌是否对此进行了优化,但我猜他们没有