GMap标记放置在错误的位置

时间:2015-06-04 06:43:29

标签: c# winforms gmap.net

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

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

我在获取坐标之前尝试使用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 个答案:

答案 0 :(得分:2)

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

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

通过切换语句,您将获得正确的定位。我想,对默认位置的猜测有点真实。叠加层尚未“挂钩”到地图并预先在其中放置标记。这就是为什么这个职位最初通常会被取消。

答案 1 :(得分: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;
    }
};

答案 2 :(得分:0)

只需使用此代码:

myMap.UpdateMarkerLocalPosition(marker)

答案 3 :(得分: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); 

      }
}