除非地图缩放,否则不会出现新的 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
?
此外,我知道 PropertyFactory
有 Visibility
,它 should/might 对我的问题更有效,但它不起作用,尤其是 Property.None
。并且不确定它是否仍然是这个问题的主题,所以我不会进一步讨论它。
终于找到了,貌似我缺这行
_mapboxMap.RemoveSource(geoJsonSource);
我戴上了
_mapboxMap.RemoveLayer(_lineLayerX);
_mapboxMap.RemoveSource(geoJsonSource);
_mapboxMap.AddLayer(_lineLayerY);
现在无需放大或缩小即可显示新行。
我的代码中有一些路线,用户可以选择他们想在地图上看到的路线。例如,有路线 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
?
此外,我知道 PropertyFactory
有 Visibility
,它 should/might 对我的问题更有效,但它不起作用,尤其是 Property.None
。并且不确定它是否仍然是这个问题的主题,所以我不会进一步讨论它。
终于找到了,貌似我缺这行
_mapboxMap.RemoveSource(geoJsonSource);
我戴上了
_mapboxMap.RemoveLayer(_lineLayerX);
_mapboxMap.RemoveSource(geoJsonSource);
_mapboxMap.AddLayer(_lineLayerY);
现在无需放大或缩小即可显示新行。