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