除非地图放大/缩小,否则新LineLayer不会出现

时间:2018-01-31 05:12:05

标签: xamarin mapbox mapbox-android

我的代码中有一些路线,用户可以选择他们想要在地图上看到的路线。例如,路线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

此外,我知道PropertyFactoryVisibility,它应该/可能更适合我的问题,但它不起作用,尤其是Property.None。并且不确定这个问题中是否还有主题,所以我不会进一步深入研究。

1 个答案:

答案 0 :(得分:0)

终于找到了它,显然我缺少这一行

_mapboxMap.RemoveSource(geoJsonSource);

我把它放在

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

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