我正在构建一个需要用于渲染地理地图的工具的应用程序,此外,该应用程序需要该工具来提供添加自定义叠加层的方法。
我发现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版本中使用叠加层?
答案 0 :(得分:5)
解决方案是自己实现叠加集合。保留与一个叠加层共享相同ZIndex
的标记集合以及包含所有叠加层的集合。
我希望它像WinFrom
版本一样。
答案 1 :(得分:2)
为了更好地理解(GMapMarker) marker
,让我们看看他们是如何理解的
加入。
设置标记的(UIElement) Shape
,传递
MainWindow
实例到(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
我只用裸骨链接了一个设置,请注意这些库中有更多功能。