GMap.Net标记最初位置不正确

我使用GMap添加了一个标记,并指定了lat / long。 当应用程序启动时,标记放置在错误的位置(在GMap控件的中心),然后当我缩放时,它会转到指定的坐标。 这是GMap中的错误还是我做错了什么? 这是代码。

GMapOverlay markersOverlay, mo2; GMarkerGoogle marker, marker5; GMapOverlay polyOverlay; List points; GMapRoute gr; Graphics g; bool start = true; double move = .0001; //double move = 1; double lt = 73, lg = -180; // double lt = 29, lg = -93; public Form1() { AllocConsole(); InitializeComponent(); try { System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("www.google.com"); } catch { gmap.Manager.Mode = AccessMode.CacheOnly; MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET - Demo.WindowsForms", MessageBoxButtons.OK, MessageBoxIcon.Warning); } gmap.MapProvider = GMapProviders.BingHybridMap; gmap.Position = new PointLatLng(32, -100); gmap.MinZoom = 3; gmap.MaxZoom = 15; gmap.Zoom = 9; markersOverlay = new GMapOverlay("markers"); mo2 = new GMapOverlay("markers5"); marker5 = new GMarkerGoogle(new PointLatLng(lt, lg), GMarkerGoogleType.orange_small); g = this.CreateGraphics(); } private void Form1_Load(object sender, EventArgs e) { gmap.DragButton = MouseButtons.Left; gmap.ShowCenter = false; points = new List(); polyOverlay = new GMapOverlay("polygons"); // gmap.Position = new PointLatLng(32.6961334816182, -100.2985095977783); // gmap.MinZoom = 0; GMapPolygon polygon = new GMapPolygon(points, "mypolygon"); polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Magenta)); // polygon.f polygon.Stroke = new Pen(Color.Magenta, 2); } protected void OnMouseMove(object sender, MouseEventArgs e) { // base.OnMouseMove(e); PointLatLng p = gmap.FromLocalToLatLng(eX, eY); MouseLatLong.Text = Convert.ToString(p); // Console.WriteLine(marker.Position.Lat); } private void SubmitButton_Click(object sender, EventArgs e) { // gmap.Position = new PointLatLng(40.6961334816182, -100.2985095977783); marker = new GMarkerGoogle(new PointLatLng(double.Parse(LattextBox.Text), double.Parse(LongtextBox.Text)), new Bitmap(@"C:\Users\Vaib\Documents\Visual Studio 2013\Projects\testGmap\testGmap\Resources\wpt.png")); // GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(-25.966688, 32.580528),flag); mo2.Markers.Add(marker); gmap.Overlays.Add(mo2); marker.ToolTip = new GMapToolTip(marker); marker.ToolTipText = NametextBox.Text; marker.ToolTipMode = MarkerTooltipMode.Always; // x++; if (start) { gmap.Position = new PointLatLng(marker.Position.Lat, marker.Position.Lng); start = false; } points.Add(new PointLatLng(marker.Position.Lat, marker.Position.Lng)); // points.Add(new PointLatLng(double.Parse(LattextBox.Text), double.Parse(LongtextBox.Text))); // GMapPolygon polygon = new GMapPolygon(points, "mypolygon"); gr = new GMapRoute(points, "route"); gr.Stroke = new Pen(Color.Magenta, 2); //Console.WriteLine(gr.From + "-->"+gr.To); // polygon.Stroke = new Pen(Color.Magenta, 2); polyOverlay.Routes.Add(gr); gmap.Overlays.Add(polyOverlay); // m1 = new GMarkerGoogle(new PointLatLng(gr.From.Value.Lat, gr.From.Value.Lng), //GMarkerGoogleType.yellow_small); ga = new GMarkerArrow(new PointLatLng(gr.From.Value.Lat, gr.From.Value.Lng)); if (points.Count >= 2) ga.Bearing = (float)final(gr.From.Value.Lat, gr.From.Value.Lng, points[1].Lat, points[1].Lng); // marker2 = new GMapMarkerImage(new PointLatLng(marker.Position.Lat, marker.Position.Lng), markersOverlay.Clear(); //m1.rot(180); // m1.OnRender(g); // markersOverlay.Markers.Add(marker2); markersOverlay.Markers.Add(ga); gmap.Overlays.Add(markersOverlay); } 

诀窍是首先添加叠加,然后添加标记:

gMapControl.Overlays.Add(markersOverlay); markersOverlay.Markers.Add(标记);

编辑

就像你可以在评论中看到的那样:添加

 gmap.Overlays.Clear() 

在方法的最开始

 private void SubmitButton_Click(object sender, EventArgs e) 

是他的问题的答案。

我在WinForms应用程序上使用MSVC2010(C ++)并遇到了同样的问题 – 下午大部分时间都要解决。

这个post很有用,但是我发现你需要做的就是(抱歉它不是C#)在你第一次添加标记时注释掉了 – 请参阅

 // DO NOT ADD... line // Make marker WindowsForms::Markers::GMarkerGoogle ^MyMarker; WindowsForms::Markers::GMarkerGoogleType MyType = safe_cast(3); // Blue marker 3 MyMarker = gcnew WindowsForms::Markers::GMarkerGoogle( PointLatLng(40.7, -74.0), MyType); // MyOverlay->Markers->Add(MyMarker); // DO NOT ADD THE MARKER!!! gMapControl1->Overlays->Add(MyOverlay); MyMarker = gcnew WindowsForms::Markers::GMarkerGoogle( PointLatLng(40.7, -74.0), MyType); MyOverlay->Markers->Add(MyMarker); gMapControl1->Overlays->Add(MyOverlay); gMapControl1->ReloadMap();