Создание проекта с библиотекой GMap.NET, перенос маркеров на карте

Создал Win Forms приложение, подключил библиотеку GMap.NET для работы с картами, при загрузке главной формы такой код:

private void Form1_Load(object sender, EventArgs e)
        {          
            //Настройки для компонента GMap.
            gMapControl1.Bearing = 0;

            //CanDragMap - Если параметр установлен в True,
            //пользователь может перетаскивать карту 
            ///с помощью правой кнопки мыши. 
            gMapControl1.CanDragMap = true;

            //Указываем что перетаскивание карты осуществляется 
            //с использованием левой клавишей мыши.
            //По умолчанию - правая.
            gMapControl1.DragButton = MouseButtons.Left;

            gMapControl1.GrayScaleMode = true;

            //MarkersEnabled - Если параметр установлен в True,
            //любые маркеры, заданные вручную будет показаны.
            //Если нет, они не появятся.
            gMapControl1.MarkersEnabled = true;

            //Указываем значение максимального приближения.
            gMapControl1.MaxZoom = 18;

            //Указываем значение минимального приближения.
            gMapControl1.MinZoom = 2;

            //Устанавливаем центр приближения/удаления
            //курсор мыши.
            gMapControl1.MouseWheelZoomType = 
                GMap.NET.MouseWheelZoomType.MousePositionAndCenter;

            //Отказываемся от негативного режима.
            gMapControl1.NegativeMode = false;

            //Разрешаем полигоны.
            gMapControl1.PolygonsEnabled = true;

            //Разрешаем маршруты.
            gMapControl1.RoutesEnabled = true;

            //Скрываем внешнюю сетку карты
            //с заголовками.
            gMapControl1.ShowTileGridLines = false;

            //Указываем, что при загрузке карты будет использоваться 
            //18ти кратной приближение.
            gMapControl1.Zoom = 18;

            //Указываем, что все края элемента управления
            //закрепляются у краев содержащего его элемента
            //управления(главной формы), а их размеры изменяются 
            //соответствующим образом.
            gMapControl1.Dock = DockStyle.Fill;

            //Указываем, что будем использовать карты Google.
            gMapControl1.MapProvider =
                GMap.NET.MapProviders.GMapProviders.GoogleMap;
            GMap.NET.GMaps.Instance.Mode = 
                GMap.NET.AccessMode.ServerOnly;   

            //Если вы используете интернет через прокси сервер,
            //указываем свои учетные данные.
            GMap.NET.MapProviders.GMapProvider.WebProxy = 
                System.Net.WebRequest.GetSystemWebProxy();
            GMap.NET.MapProviders.GMapProvider.WebProxy.Credentials = 
                System.Net.CredentialCache.DefaultCredentials;

            //Указываем элементу управления,
            //что необходимо при открытии карты прейти по
            //координатам красной площади в Москве.
            gMapControl1.Position = new GMap.NET.PointLatLng(55.75393, 37.620795);

            //Создаем новый список маркеров, с указанием компонента 
            //в котором они будут использоваться и названием списка.
            GMap.NET.WindowsForms.GMapOverlay markersOverlay =
                new GMap.NET.WindowsForms.GMapOverlay(gMapControl1, "marker");

            //Инициализация нового ЗЕЛЕНОГО маркера, с указанием его координат.
            GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen markerG =
                new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen(
                //Указываем координаты Красной площади
                new GMap.NET.PointLatLng(55.75393, 37.620795));
            markerG.ToolTip =
                new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(markerG);
            //Текст отображаемый при наведении на маркер.
            markerG.ToolTipText = "Красная площадь";

            //Инициализация нового КРАСНОГО маркера, с указанием его координат.
            GMap.NET.WindowsForms.Markers.GMapMarkerGoogleRed markerR =
                new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleRed(
                //Указываем координаты Красной площади
                new GMap.NET.PointLatLng(55.75393, 37.620695));
            markerR.ToolTip =
                new GMap.NET.WindowsForms.ToolTips.GMapBaloonToolTip(markerG);
            //Текст отображаемый при наведении на маркер.
            markerR.ToolTipText = "Красная площадь";

            //Добавляем маркеры в список маркеров.
            //Зеленый маркер
            markersOverlay.Markers.Add(markerG);
            //Красный маркет
            markersOverlay.Markers.Add(markerR);
            //Добавляем в компонент, список маркеров.
            gMapControl1.Overlays.Add(markersOverlay);  
        }

При запуске приложения на карте появляется 2 маркера: введите сюда описание изображения

Подскажите, как реализовать перетаскивание маркеров мышью?


Ответы (1 шт):

Автор решения: Bulson

Нажимаешь лев.клавишу, сдвигаешь курсор, отпускаешь клавишу => маркер перемещается. пример работы

public partial class FormMain : Form
{
    //выбранный маркер
    private GMapMarker _selectedMarker;

    public FormMain()
    {
        InitializeComponent();

        this.Load += FormMain_Load;

        //подписка на события мыши
        _gMapControl.MouseUp += _gMapControl_MouseUp;
        _gMapControl.MouseDown += _gMapControl_MouseDown;
    }
    private void FormMain_Load(object sender, EventArgs e)
    {
        GMaps.Instance.Mode = AccessMode.ServerOnly;
        _gMapControl.MapProvider = YandexMapProvider.Instance;
        _gMapControl.SetPositionByKeywords("Paris, France");
        _gMapControl.ShowCenter = false;

        //первый маркер
        GMapMarker marker1 = new GMarkerGoogle(
            new PointLatLng(48.8617774, 2.349272),
            GMarkerGoogleType.lightblue);
        marker1.Tag = 1;

        //второй маркер
        GMapMarker marker2 = new GMarkerGoogle(
            new PointLatLng(48.8877774, 2.349272),
            GMarkerGoogleType.green);
        marker2.Tag = 2;


        GMapOverlay markers = new GMapOverlay("markers");
        markers.Markers.Add(marker1);
        markers.Markers.Add(marker2);
        _gMapControl.Overlays.Add(markers);
    }

    private void _gMapControl_MouseDown(object sender, MouseEventArgs e)
    {
        //находим тот маркер над которым нажали клавишу мыши
        _selectedMarker = _gMapControl.Overlays
            .SelectMany(o => o.Markers)
            .FirstOrDefault(m => m.IsMouseOver == true);
    }

    private void _gMapControl_MouseUp(object sender, MouseEventArgs e)
    {
        if (_selectedMarker is null)
            return;

        //переводим координаты курсора мыши в долготу и широту на карте
        var latlng = _gMapControl.FromLocalToLatLng(e.X, e.Y);
        //присваиваем новую позицию для маркера
        _selectedMarker.Position = latlng;

        _selectedMarker = null;
    }
}
→ Ссылка