Here是用于绘制线几何的mapBox示例。
private void onStyleLoaded(Style style) {
initRouteCoordinates();
style.addSource(new GeoJsonSource("line-source",
FeatureCollection.fromFeatures(new Feature[]{
Feature.fromGeometry(LineString.fromLngLats(routeCoordinates))})));
style.addLayer(new LineLayer("lineLayer", "line-source")
.withProperties(PropertyFactory.lineDasharray(new Float[] {0.01f, 2f}),
PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
PropertyFactory.lineWidth(5f),
PropertyFactory.lineColor(Color.parseColor("#e55e5e"))));
Point point = routeCoordinates.get(0);
mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(point.latitude(), point.longitude()), 17));
}
我需要添加更多点并更新线。如您在示例中所见,在构建时将线几何指定给源层。我以后找不到任何将点添加到当前行的api。
我应该删除这一行并重画一条新线吗?有没有更好的方法?
答案 0 :(得分:3)
您可以添加一次"line-source"
和相应的"lineLayer"
图层,并且每次要添加更多点以更新该线时,设置该来源包含的数据 。即,每次您要更新LineLayer
呈现的数据:
data
的变量中。 (我建议将new GeoJsonSource("line-source", ...
存储在data
变量中,而不是在对style#addSource
的调用中内联创建它,以便以后可以访问它进行更新。)style.getSourceAs("line-source").setGeoJson(data)
。 或者,您可以使用geoJsonSource.setGeoJson(Feature.fromGeometry(LineString.fromLngLats(updatedRouteCoordinates)))
而不是setGeoJson(data)
,这可能更方便,具体取决于您的用例。
您可以根据自己的特定需求修改实现,但是总体思路是,每次要更新该行时,只需要更新现有源的数据,而无需更新其相应的层。 modify properties documentation中介绍了适用于Android的Mapbox Maps SDK的概念。引用文档:
源和图层不是一成不变的,因此可以在地图渲染期间随时对其进行修改