【问题标题】:Updating GMap.NET Markers in C#在 C# 中更新 GMap.NET 标记
【发布时间】:2017-02-14 20:48:00
【问题描述】:

我需要在 C# 中更新我的 GMap.NET 标记。 我添加了如下标记:

GMap.NET.WindowsForms.GMapMarker marker2 =
                new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
                    new GMap.NET.PointLatLng(39.81750, 30.52686),
                    new Bitmap("hello.png"));
            marker2.ToolTipText = "Hello";
            marker2.ToolTip.Fill = Brushes.Black;
            marker2.ToolTip.Foreground = Brushes.White;
            marker2.ToolTip.Stroke = Pens.Black;
            markers.Markers.Add(marker2);
            gMapControl1.Overlays.Add(markers); 

我想在计时器中更新此标记的位置。 如何在计时器线程中更改此变量? 我需要将这些标记设为全局变量吗? 感谢您的回答。

【问题讨论】:

    标签: c# google-maps google-maps-api-3 gmap.net


    【解决方案1】:

    您需要将叠加层传递给计时器:

    System.Timers.Timer t = new System.Timers.Timer();
    GMapOverlay overlay_ = new GMapOverlay();
    //do stuff to your overlay
    t.Elapsed += (sender, e) => MyElapsedMethod(sender, e, overlay_);
    

    您的叠加层都是引用,因此您可以简单地更新标记,并且它应该在地图上更新(假设您已将其添加到 gmapcontrol):

    static void MyElapsedMethod(object sender, System.Timers.ElapsedEventArgs e, GMapOverlay overlay) 
    {
         overlay.Markers[..].Position = new PointLatLng(0,0); //for your new position
    }
    

    我还没有测试过这段代码,但我使用后台工作人员做了类似的事情,取得了很好的成功。

    【讨论】:

    • 好的。以及如何在上述代码的相同上下文中更改标记变量?
    • 我希望能够将标记作为变量调用并更改它们。我如上所述声明它们,但无法将它们作为变量。我对c#知之甚少。对不起我的问题。
    • 您需要填充标记的List,您可以使用Tag 属性来区分它们,只需传递一个唯一的任意ID。然后过滤该 id 的标记列表并更新位置。 IMO 您无需将列表或叠加层传递给计时器,只需将它们放在一个字段中即可。
    • 您的标记可作为列表使用,因此您只需要使用 overlay.Markers[0].Position = new PointLatLng(0,0);假设您想要更改索引 0 处的标记。如果您只添加了一个标记,就像您在示例代码中所做的那样,那么您将使用索引 0。
    • @JAlecksen 你的方法完美。现在我只需要将这个覆盖和标记声明为全局(公共)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多