Mapbox for Android:根据当前缩放级别

时间:2016-08-24 10:16:17

标签: android mapbox geojson

我在Android应用中将大量GeoJSON数据添加到Mapbox中。这使得在更高的缩放级别上滚动地图非常慢。出于这个原因,我想根据当前的缩放级别更改输入数据。我找了一个像getCurrentZoomlevel()这样的函数,但是我能找到的只是MapView类中的getMaxZoomLevel()函数,这只给出了我可能的最大缩放级别。有没有我可以调用的功能,它给我当前的缩放级别?

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

1 个答案:

答案 0 :(得分:3)

从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中介绍的Style API。它允许您添加geojson图层并设置样式。如果您有兴趣,我建议您查看Mapbox Android Demo App中的示例。 This Github issue展示了我添加的一些例子。

编辑:忘记提及从地图中删除多边形或折线,您有几个选项。使用mapboxMap.removeAnnotations();删除地图中的所有注释,或使用mapboxMap.removePolygon();删除多边形,例如。 removePolygon接收一个Polygon对象,在将多边形添加到地图时需要指定该对象:

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