首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GMap.Net Wpf中的覆盖

GMap.Net Wpf中的覆盖
EN

Stack Overflow用户
提问于 2015-06-18 17:44:27
回答 2查看 9K关注 0票数 6

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

我发现GMap.Net是这份工作的好工具。

我在web上找到了许多创建自定义覆盖的WinForm示例,例如:

代码语言:javascript
复制
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);

但是当我接近WPF版本的GMap.Net时,我注意到覆盖已经消失,我被迫直接将标记添加到标记集合(mymap.Markers.Add(new Marker()))中,而没有将标记组合到单独的覆盖中的能力。

如何在GMap.Net的Wpf版本中使用覆盖?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-24 13:56:49

解决方案是自己实现一个覆盖集合。保存一个标记集合,这些标记与一个覆盖共享相同的ZIndex,并保存一个包含所有覆盖的集合。

我希望它能像WinFrom版本那样。

票数 5
EN

Stack Overflow用户

发布于 2017-03-11 09:50:25

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

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

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

(UserControl) CustomMarkerDemo的构造函数。

代码语言:javascript
复制
// 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);
}

演示中,我使用ComboBox's SelectedIndex来设置新标记的ZIndex。正如您可以看到的那样,标记被添加到(ObservableCollection) MainMap.Markers中。当我们不需要标记时,很容易删除/过滤集合中的标记。这种方法的问题是,当(UIElement) Shape从视图中移除时,它们就会被处理并需要重建。这会导致不想要的行为,特别是如果您希望能够同时显示所有的覆盖。

相反,我选择只向集合添加标记(通过用户交互),并根据当前的Visibility设置Shapecombobox.SelectedIndex

代码语言:javascript
复制
// change overlays
private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox combobox = sender as ComboBox;
    if (combobox != null && MainMap != null)
    {
        // show all overlays
        if (combobox.SelectedIndex == combobox.Items.Count - 1)
        {
            foreach (GMapMarker marker in MainMap.Markers)
                marker.Shape.Visibility = Visibility.Visible;
        }
        // show only selected overlay
        else
        {
            foreach (GMapMarker marker in MainMap.Markers)
            {
                if (marker.ZIndex == combobox.SelectedIndex)
                    marker.Shape.Visibility = Visibility.Visible;
                else
                    marker.Shape.Visibility = Visibility.Collapsed;
            }
        }
        currentMarker.Shape.Visibility = Visibility.Visible;
    }
}

我把一个设置和基本的骨架连接起来,注意到这些库中有更多的功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30922211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档