0

我使用 winforms 和 GMap.NET 来学习如何使用它。

我在 Gmap 控制器上有一个鼠标点击动作,当用户点击地图上的某个地方时,我得到 xy 坐标,将它们转换为纬度和经度,然后在地图上绘制标记。但是标记并没有放置在真正的鼠标光标位置,看起来标记有一个默认位置,就是这样。我试图将鼠标移动到另一个地方,当我单击时,标记也被创建在错误的位置(它与第一个标记相同)

在获取坐标并放置标记之前,我尝试使用 gmap.Overlays.clear() 但这没有帮助。

 private void gmap_MouseClick(object sender, MouseEventArgs e)
 {

      if (e.Button == System.Windows.Forms.MouseButtons.Left)
      {
          double lat = gmap.FromLocalToLatLng(e.X, e.Y).Lat;
          double lng = gmap.FromLocalToLatLng(e.X, e.Y).Lng;

          GMapOverlay markerOverlay = new GMapOverlay("markers");

          GMarkerGoogle marker = new GMarkerGoogle(new  
                               GMap.NET.PointLatLng(lat, lng), 
                               GMarkerGoogleType.green_pushpin);

          markerOverlay.Markers.Add(marker);
          gmap.Overlays.Add(markerOverlay);
      }
}
4

4 回答 4

3

首先添加叠加层,然后添加标记。无需进行额外操作。

gmap.Overlays.Add(markerOverlay);
markerOverlay.Markers.Add(marker);

通过切换语句,您将获得正确的定位。我猜,关于默认位置的猜测有些正确。叠加层尚未“挂钩”到地图并事先在其中放置了一个标记。这就是为什么这个职位最初通常是关闭的。

于 2015-08-20T09:35:04.063 回答
1

只需使用以下代码:

myMap.UpdateMarkerLocalPosition(marker)
于 2015-07-15T06:56:23.630 回答
0

我就是这样做的,而且效果很好。Obj.defaultOrigin 只是 LatLong 位置。

gm = new GoogleMap(Obj.defaultOrigin);
overlay = new GMapOverlay(gm, "mapIcon");
marker = new GoogleMap.GMapMarkerImage(Obj.defaultOrigin, Image.FromFile(Obj.path + @"\resources\images\mapIcon.png"));
overlay.Markers.Add(marker);
gm.Overlays.Add(overlay);
gm.MouseClick += (s, e) =>
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        GMap.NET.PointLatLng point = gm.FromLocalToLatLng(e.X, e.Y);
        marker.Position = point;
    }
};
于 2015-06-04T07:18:16.600 回答
0

mouseclick您应该在事件之外声明覆盖:

GMapOverlay markersOverlay = new GMapOverlay("markers"); 

private void gmap_MouseClick(object sender, MouseEventArgs e)
 {

      if (e.Button == System.Windows.Forms.MouseButtons.Left)
      {
          double lat = gmap.FromLocalToLatLng(e.X, e.Y).Lat;
          double lng = gmap.FromLocalToLatLng(e.X, e.Y).Lng;

          // GMapOverlay markerOverlay = new GMapOverlay("markers"); Your code here

          GMarkerGoogle marker = new GMarkerGoogle(new  
                               GMap.NET.PointLatLng(lat, lng), 
                               GMarkerGoogleType.green_pushpin);
          gmap.Overlays.Add(markerOverlay); //Change position of this line first 
          markerOverlay.Markers.Add(marker); 

      }
}
于 2016-09-16T04:25:04.253 回答