我在Android应用中将大量GeoJSON数据添加到Mapbox中。这使得在更高的缩放级别上滚动地图非常慢。出于这个原因,我想根据当前的缩放级别更改输入数据。我找了一个像getCurrentZoomlevel()这样的函数,但是我能找到的只是MapView类中的getMaxZoomLevel()函数,这只给出了我可能的最大缩放级别。有没有我可以调用的功能,它给我当前的缩放级别?
要使此解决方案正常工作,我还需要根据缩放级别动态删除和添加某些多边形。是否可以在不重新加载整个地图的情况下删除多边形?
答案 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));