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