Маркер GMap.Net изначально в неправильном положении

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

GMapOverlay markersOverlay, mo2;
GMarkerGoogle marker, marker5;
GMapOverlay polyOverlay;
List<PointLatLng> points;
GMapRoute gr;
Graphics g;
bool start = true;
double move = .0001;
double lt = 73, lg = -180;

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");
    GMapPolygon polygon = new GMapPolygon(points, "mypolygon");
    polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Magenta));
    polygon.Stroke = new Pen(Color.Magenta, 2);
}

protected void OnMouseMove(object sender, MouseEventArgs e)
{
    PointLatLng p = gmap.FromLocalToLatLng(e.X, e.Y);
    MouseLatLong.Text = Convert.ToString(p);
}

private void SubmitButton_Click(object sender, EventArgs e)
{
    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"));
    mo2.Markers.Add(marker);
    gmap.Overlays.Add(mo2);
    marker.ToolTip = new GMapToolTip(marker);
    marker.ToolTipText = NametextBox.Text;
    marker.ToolTipMode = MarkerTooltipMode.Always;

    if (start)
    {
        gmap.Position = new PointLatLng(marker.Position.Lat, marker.Position.Lng);
        start = false;
    }

    points.Add(new PointLatLng(marker.Position.Lat, marker.Position.Lng));
    gr = new GMapRoute(points, "route");
    gr.Stroke = new Pen(Color.Magenta, 2);
    polyOverlay.Routes.Add(gr);
    gmap.Overlays.Add(polyOverlay);
    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);
    }

    markersOverlay.Clear();
    markersOverlay.Markers.Add(ga);
    gmap.Overlays.Add(markersOverlay);
}   

person Vaibhav Pandya    schedule 11.05.2015    source источник
comment
Есть ли в gmap метод обновления()?   -  person Nattrass    schedule 11.05.2015
comment
Я спрашиваю только потому, что звучит так, будто ваш дисплей становится недействительным, а затем перерисовывается при увеличении. Так что, может быть, вы можете заставить это произойти   -  person Nattrass    schedule 11.05.2015
comment
В отличие от форумов, мы не используем слова «Спасибо» или «Любая помощь приветствуется» или подписи на Stack Overflow. См. раздел Должен ли быть "Привет", "спасибо" слоганов и приветствий удалить из постов?.   -  person John Saunders    schedule 12.05.2015
comment
Здесь та же ошибка... Мне просто любопытно: вы используете версию Gmaps.NET для WinForm или WPF?   -  person WΩLLE - ˈvɔlə    schedule 19.05.2015
comment
Я использую винформс. Я узнал, что это происходит только при добавлении первого маркера. Итак, что я сделал, так это добавил маркер перед запуском приложения в сумасшедшей позиции (например, в Антарктиде, поэтому это было незаметно). затем добавьте свои маркеры, это сработает.   -  person Vaibhav Pandya    schedule 19.05.2015
comment
Ладно, это звучит очень странно О_о   -  person WΩLLE - ˈvɔlə    schedule 19.05.2015
comment
Посмотрите на ваш другой вопрос. Проблема в том, что вам (по-прежнему) нужно сначала добавить наложение на карту, а после этого начать добавлять маркер к этому конкретному наложению. Это так же просто, как переключить два утверждения.   -  person rdoubleui    schedule 20.08.2015


Ответы (3)


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

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

person Joe    schedule 01.09.2015

Решение

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

gmap.Overlays.Clear()

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

private void SubmitButton_Click(object sender, EventArgs e)

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

person WΩLLE - ˈvɔlə    schedule 19.05.2015
comment
Я пытался, но не работал. Это то, что у меня есть. GMapOverlay markersOverlay = новый GMapOverlay(маркеры); GMapOverlay mo2 = новый GMapOverlay(markers5); - person Vaibhav Pandya; 19.05.2015
comment
Вы вызываете эти строки кодов несколько раз? Возможно, вы выполняете их внутри события (например, щелчка), которое случайно вызывается слишком часто. Я почти уверен, что смогу вам помочь, так как у меня было точно такое же неправильное поведение, как и у вас. - person WΩLLE - ˈvɔlə; 19.05.2015
comment
Также возможно, что вы слишком часто звоните gmap.Overlays.Add(markerOverlay);... Это тоже было частью моей ошибки :/ - person WΩLLE - ˈvɔlə; 19.05.2015
comment
Спасибо за помощь Волле. Я добавил больше кода в исходный пост, если вы можете понять проблему. - person Vaibhav Pandya; 19.05.2015
comment
@VaibhavPandya Я работаю с ним с прошлой недели. Я полностью влюблен в него, хотя я не могу найти для него никакой полезной документации :/ Я уже протестировал множество функций, и у меня все работает. Я не лучший программист, но я могу очень быстро привыкнуть к новым фреймворкам/проектам/архитектурам/библиотекам. - person WΩLLE - ˈvɔlə; 19.05.2015
comment
@VaibhavPandya. Попробуйте добавить gmap.Overlays.Clear() в самое начало метода private void SubmitButton_Click(object sender, EventArgs e). Надеюсь, поможет :/ - person WΩLLE - ˈvɔlə; 19.05.2015
comment
@Wolle Хорошо, это работает, большое спасибо. Вы думаете, что можете помочь мне с другими проблемами с GMap. Я пытаюсь добавить изображения на карту, но возникают проблемы. - person Vaibhav Pandya; 19.05.2015
comment
@VaibhavPandya Было ли мое решение ответом на вопрос? Я не знаю, смогу ли я помочь вам с этой проблемой. Просто опубликуйте новый вопрос :) - person WΩLLE - ˈvɔlə; 20.05.2015
comment
@VaibhavPandya Так что, возможно, вам стоит отметить мой пост как ответ :) - person WΩLLE - ˈvɔlə; 20.05.2015

Я работаю в MSVC2010 (С++) над приложением 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();
person Joao    schedule 25.06.2015
comment
Я пытался выяснить, как обновить отображение карты. Это было полезно, особенно ReloadMap (я думал, что это должно быть Refresh). - person blearyeye; 22.07.2016