除非地图缩放,否则不会出现新的 LineLayer in/out

New LineLayer won't appear unless map zoomed in/out

我的代码中有一些路线,用户可以选择他们想在地图上看到的路线。例如,有路线 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(),还是不行。我应该添加什么以便用户无需缩放 in/out 即可看到新的 LayerLine?

此外,我知道 PropertyFactoryVisibility,它 should/might 对我的问题更有效,但它不起作用,尤其是 Property.None。并且不确定它是否仍然是这个问题的主题,所以我不会进一步讨论它。

终于找到了,貌似我缺这行

_mapboxMap.RemoveSource(geoJsonSource);

我戴上了

_mapboxMap.RemoveLayer(_lineLayerX);
_mapboxMap.RemoveSource(geoJsonSource);
_mapboxMap.AddLayer(_lineLayerY);

现在无需放大或缩小即可显示新行。