我正在 Android 应用程序中将大量 GeoJSON 数据添加到 Mapbox 中。这使得在较高缩放级别上滚动地图变得非常慢。因此,我想根据当前的缩放级别更改输入数据。我寻找像 getCurrentZoomlevel() 这样的函数,但我所能找到的只是 MapView 类中的 getMaxZoomLevel() 函数,这只能提供最大可能的缩放级别。我可以调用一个函数来获取当前的缩放级别吗?
为了使该解决方案发挥作用,我还需要根据缩放级别动态删除和添加某些多边形。是否可以在不重新加载整个地图的情况下删除多边形?
从 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));
您可以像这样监听mapBox地图缩放更改事件:(MapBox V10)
mapView.camera.addCameraZoomChangeListener { zoom ->
// you can use zoom here
}