Создание проекта с библиотекой 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;
}
}