覆盖GMap.Net Wpf

时间:2015-06-18 17:44:28

标签: c# wpf gmap.net

我正在构建一个需要用于渲染地理地图的工具的应用程序,此外,该应用程序需要该工具来提供添加自定义叠加层的方法。

我发现GMap.Net是一个很好的工具。

我在网上发现了很多WinForm个例子来创建自定义叠加层,例如:

GMapOverlay markersOverlay = new GMapOverlay("markers");
GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(-25.966688, 32.580528), GMarkerGoogleType.green);
markersOverlay.Markers.Add(marker);
gmap.Overlays.Add(markersOverlay);

但当我接近GMap.Net的WPF版本时,我注意到叠加层已经消失,我不得不将标记直接添加到标记集合(mymap.Markers.Add(new Marker()))而无法合成标记在单独的叠加层中。

如何在GMap.Net的Wpf版本中使用叠加层?

2 个答案:

答案 0 :(得分:5)

解决方案是自己实现叠加集合。保留与一个叠加层共享相同ZIndex的标记集合以及包含所有叠加层的集合。

我希望它像WinFrom版本一样。

答案 1 :(得分:2)

为了更好地理解(GMapMarker) marker,让我们看看他们是如何理解的 加入。

设置标记的(UIElement) Shape,传递

  • MainWindow实例
  • 坐标(a.o。)
  • 的ToolTipText

(UserControl) CustomMarkerDemo的构造函数

// add marker
private void addMarker_Click(object sender, RoutedEventArgs e)
{
    GMapMarker marker = new GMapMarker(currentMarker.Position);
    {
        ... // ToolTipText fetching logic

        marker.Shape = new CustomMarkerDemo(this, marker, ToolTipText);
        marker.ZIndex = combobox.SelectedIndex;
    }
    MainMap.Markers.Add(marker);
}

the demo中,我使用了ComboBox SelectedIndex来设置ZIndex个新标记。如您所见,标记已添加到(ObservableCollection) MainMap.Markers。当我们不需要时,删除/过滤集合中的标记很有吸引力。这种方法的问题在于,当从视图中移除(UIElement) Shape时,它们被处理并需要重建。这会导致意外行为,特别是如果您希望能够一次显示所有叠加层。

相反,我选择仅向集合中添加标记(通过用户互动),并根据当前Visibility设置Shape的{​​{1}}。

combobox.SelectedIndex

我只用裸骨链接了一个设置,请注意这些库中有更多功能。