2015-05-11 2 views
3

Я добавил маркер, используя GMap с указанным значением lat/long. Когда приложение запускается, маркер помещается в неправильное положение (в центре управления GMap), а затем, когда я увеличиваю масштаб, он переходит к указанным координатам. Это ошибка в GMap или я что-то не так? Вот код.Первоначально маркер GMap.Net в неправильном положении

GMapOverlay markersOverlay, mo2; 
    GMarkerGoogle marker, marker5; 


    GMapOverlay polyOverlay; 
    List<PointLatLng> 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<PointLatLng>(); 
     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(e.X, e.Y); 
     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); 






    } 
+0

Есть ли способ refresh() на gmap? – Nattrass

+0

Я только спрашиваю, потому что это звучит так, будто ваш дисплей недействителен, а затем перерисовывается при масштабировании. Так что, возможно, вы можете заставить это случиться. – Nattrass

+0

В отличие от форумов, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be –

ответ

7

Хитрость заключается в том, чтобы сначала добавить накладку и затем маркер:

gMapControl.Overlays.Add (markersOverlay); markersOverlay.Markers.Add (маркер);

2

EDIT

Как вы можете прочитать в комментариях: Добавление

gmap.Overlays.Clear() 

в самом начале метода

private void SubmitButton_Click(object sender, EventArgs e) 

был ответ его проблема.

+0

Я пробовал, но не работал. есть то, что у меня есть. Маркеры GMapOverlayOverlay = новый GMapOverlay («маркеры»); GMapOverlay mo2 = новый GMapOverlay ("markers5"); –

+0

Вы называете эти строки кодов несколько раз? Возможно, вы выполняете их внутри события (например, нажмите), который случайно вызван слишком часто. Я вполне уверен, что смогу вам помочь, так как у меня возникло такое же неправильное поведение, как и вы. – WoIIe

+0

Возможно также, что вы вызываете 'gmap.Overlays.Add (markerOverlay);' слишком часто ... Также был частью моей ошибки:/ – WoIIe

1

Я работаю в MSVC2010 (C++) в приложении WinForms и имел ту же проблему - большую часть дня решил решить.

Эта нить была полезной, но я считаю, все, что вам нужно сделать, это (жаль, что это не C#) это комментарий в первый раз, когда вы добавляете маркер - см

// DO NOT ADD... line 
// Make marker 
WindowsForms::Markers::GMarkerGoogle ^MyMarker; 
WindowsForms::Markers::GMarkerGoogleType MyType = safe_cast<WindowsForms::Markers::GMarkerGoogleType>(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(); 
+0

Я пытался выяснить, как обновить отображение карты. Это было полезно, особенно ReloadMap (я думал, что это должно быть Refresh). – blearyeye

Смежные вопросы