我的代码中有一些路线,用户可以选择他们想要在地图上看到的路线。例如,路线X和路线Y.然后用户看到路线Y并点击一个按钮以查看路线X.路线Y被隐藏,路线X被显示。
现在我的代码显示路线X(路线Y相同,但不同的属性除外)
FeatureCollection featureCollection = BaseFeatureCollection.FromJson
("{\"type\":\"FeatureCollection\",\"features\":" +
"[{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\"" +
",\"coordinates\":[" + stringCoordinates + "]},\"properties\":{}}]}");
GeoJsonSource geoJsonSource = new GeoJsonSource("route", featureCollection);
_mapboxMap.AddSource(geoJsonSource);
_lineLayerX = new LineLayer("linelayerred", "route");
_lineLayerX.SetProperties(
PropertyFactory.LineWidth(new Java.Lang.Float(8.0f)),
PropertyFactory.LinePattern("routex")
);
if (isShowRouteX) {
_mapboxMap.AddLayer(_lineLayerX);
}
然后,当我不想隐藏并显示另一条路线时
_mapboxMap.RemoveLayer(_lineLayerX);
_mapboxMap.AddLayer(_lineLayerY);
简化了代码,但基本上就是我所做的一切,它确实显示了路线。
现在,我第一次添加LineLayer
,它会立即显示在地图上,我不需要放大或缩小。但是如果添加了新的LineLayer
(删除旧版本后),除非地图放大或缩小,否则不会出现更改,就好像我必须这样做才能触发重绘。甚至不向任何方向平移地图都会出现新的线条。 RemoveLayer
虽然执行得很完美。
我甚至试过_mapView.Invalidate()
,但仍然无法工作。我应该添加什么,以便用户无需放大/缩小以查看新的LayerLine
?
此外,我知道PropertyFactory
有Visibility
,它应该/可能更适合我的问题,但它不起作用,尤其是Property.None
。并且不确定这个问题中是否还有主题,所以我不会进一步深入研究。
答案 0 :(得分:0)
终于找到了它,显然我缺少这一行
_mapboxMap.RemoveSource(geoJsonSource);
我把它放在
上_mapboxMap.RemoveLayer(_lineLayerX);
_mapboxMap.RemoveSource(geoJsonSource);
_mapboxMap.AddLayer(_lineLayerY);
现在显示新行,无需放大或缩小。