Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GMap标记放置在错误的位置_C#_Winforms_Gmap.net - Fatal编程技术网

C# GMap标记放置在错误的位置

C# GMap标记放置在错误的位置,c#,winforms,gmap.net,C#,Winforms,Gmap.net,我使用winforms和GMap.NET来学习如何使用它 我在Gmap控制器上有一个鼠标点击动作,当用户 点击地图上的某个地方我得到了x-y坐标, 将它们转换为纬度和经度,然后绘制标记 在地图上。 但是标记没有放置在鼠标光标的真实位置, 看起来标记有一个默认位置,就是这样。 我试图将鼠标移动到另一个地方,当我单击标记时 也在错误的位置创建(与第一个标记相同) 在获取坐标之前,我尝试使用gmap.Overlays.clear() 并放置标记,但这没有帮助 private void gmap_Mo

我使用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);
      }
}

我就是这样做的,效果很好。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;
    }
};
只需使用以下代码:

myMap.UpdateMarkerLocalPosition(marker)

首先添加覆盖,然后添加标记。不需要做额外的操作

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

通过切换语句,您将获得正确的定位。我想,关于默认位置的猜测在某种程度上是正确的。覆盖图没有“挂钩”到地图上,而是事先在地图上放置了一个标记。这就是为什么最初位置通常是关闭的。

您应该在
鼠标外声明覆盖单击事件:

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); 

      }
}

谢谢你的回答,但这对我不起作用。。我给了lng和lat一个默认值,当我点击地图上的某个地方时,标记消失了