如何用单独的 Pin 图替换地图视图?



我正在尝试在我的Xamarin Forms应用程序中更改MapView(使用Mapsui和Prism),因为我需要单独的视图来存储Pins。第一个地图视图(我们称之为default)用于显示列表中的所有引脚。第二个地图视图(history)用于显示新的图钉,这些图钉在离开页面时被删除。

我有Dictionary来存储我的地图视图,以便轻松访问我想要的任何视图。每个创建的MapView都有相同的Map实例。我想从default更改为history,这应该隐藏在视图中添加default引脚。

我用这个改变观点:

public void ChangeView(string name)
{
var prev = MapView;
loggerService.Info($"Pins: {prev.Pins.Count}");
MapView = GetView(name); // Current MapView in XAML, returns instance of MapView
loggerService.Info($"New view pins: {MapView.Pins.Count}");
Task.Factory.StartNew(() => 
{
Task.Delay(2000).Wait();
loggerService.Info($"View pins: {MapView.Pins.Count}");
});
MapView.Refresh();
}

带有日志的额外代码用于调试目的 - 它显示正确的值(上一个引脚 = 7,新引脚 = 0,视图引脚 = 0)。

我添加了history没有缩放按钮的视图,以确保它正在更改 - 并且确实如此(因此我认为无需发布 XAML)。

我应该如何更改 MapView 以在导航到历史记录时隐藏图钉,并在切换回默认视图时显示它们? 或者有没有更好的方法来"分组"Pin 图并根据名称隐藏/显示它们?

更新我认为这可能很重要:

public Pin AddMarker(Position point)
{
var pin = new Pin(MapView)
{
Label = "PinType.Pin",
Position = point,
Type = PinType.Pin,
Transparency = 0.5f,
Color = Xamarin.Forms.Color.FromRgb(2, 144, 210),
Scale = 0.5f,
};
MapView.Pins.Add(pin);
return pin;
}

这是我添加图钉查看的方式。这与上面的地图视图相同(所有代码都来自MapService)。

一些选项

  • 也许您可以将图钉的 IsVisible 属性绑定到视图上的"历史记录模式"字段。我自己从来没有用过这个。
  • 使用一些较低级别的功能。喜欢
    • 对默认图层和历史记录使用单独的图层,并在需要时启用/禁用它们。您可能需要将 WGS84(GPS 坐标)转换为球面墨卡托。https://mapsui.com/api/Mapsui.Projection.SphericalMercator.html?q=sphericalmercator
    • 使用主题样式。它有一个方法,可用于指定您需要的任何样式(可见/颜色/符号)和要素属性。https://mapsui.com/api/Mapsui.Styles.Thematics.ThemeStyle.html?q=themestyle

对于较低级别的功能,您可能需要示例才能帮助您:https://mapsui.com/documentation/samples.html

相关内容

  • 没有找到相关文章

最新更新