Mapbox for Android:根据当前缩放级别更改地图输入

问题描述 投票:0回答:2

我正在 Android 应用程序中将大量 GeoJSON 数据添加到 Mapbox 中。这使得在较高缩放级别上滚动地图变得非常慢。因此,我想根据当前的缩放级别更改输入数据。我寻找像 getCurrentZoomlevel() 这样的函数,但我所能找到的只是 MapView 类中的 getMaxZoomLevel() 函数,这只能提供最大可能的缩放级别。我可以调用一个函数来获取当前的缩放级别吗?

为了使该解决方案发挥作用,我还需要根据缩放级别动态删除和添加某些多边形。是否可以在不重新加载整个地图的情况下删除多边形?

android mapbox geojson
2个回答
4
投票

从 Mapbox Android SDK 的

4.0.0
开始,与地图的交互是使用 MapboxMap 对象而不是 MapView 进行的。听起来您正在尝试添加一个不存在的缩放侦听器,但
onCameraChangeListener
确实存在,您可以从中检查缩放级别。

mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition position) {

        ...

        if (position.zoom < 12) {

            ...

        }
    }
});

如果您的 GeoJSON 文件很大并且您正在尝试绘制多边形/折线,您可能需要查看我们将在

4.2.0
中介绍的样式 API。它允许您添加 geojson 图层并设置它们的样式。如果您有兴趣,我建议您查看 Mapbox Android 演示应用程序 中的示例。 这个 Github 问题展示了我添加的一堆示例。

编辑:忘记提及从地图中删除多边形或多段线,您有几个选项。例如,可以使用

mapboxMap.removeAnnotations();
从地图中删除所有注释,或者使用
mapboxMap.removePolygon();
删除多边形。
removePolygon
接受一个
Polygon
对象,您在将多边形添加到地图时需要分配该对象:

Polygon polygon = map.addPolygon(new PolygonOptions()
                        .addAll(<List of points making up polygon>)
                        .setFillColor(color));

0
投票

您可以像这样监听mapBox地图缩放更改事件:(MapBox V10)

 mapView.camera.addCameraZoomChangeListener { zoom ->
   // you can use zoom here 
 }
© www.soinside.com 2019 - 2024. All rights reserved.