Данная инструкция является дополнительным материалом к статье по изменению изображения маркера (Работа с картами в Windows Form с использованием GMap.NET. Часть 2.), при использовании компонента по работе с картами от различных производителей - «GMap.Net». Основными отличиями между этим дополнением и основной инструкцией, является установка двух изображений, одно на перемещение, а другое на установленный маркер.
Для работы вам понадобится тестовый пример из второй части (Работа с картами в Windows Form с использованием GMap.NET. Часть 2.) обзора данного компонента. Запустите Microsoft Visual Studio и откройте скачанный проект. Перейдите в Обозреватель решений и откройте класс «GMapMarkerImage». Выполните в нем изменения в соответствии с приведенным ниже листингом.
Пример перемещаемого или устанавливаемого маркера.
Для работы вам понадобится тестовый пример из второй части (Работа с картами в Windows Form с использованием GMap.NET. Часть 2.) обзора данного компонента. Запустите Microsoft Visual Studio и откройте скачанный проект. Перейдите в Обозреватель решений и откройте класс «GMapMarkerImage». Выполните в нем изменения в соответствии с приведенным ниже листингом.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using GMap.NET; using GMap.NET.WindowsForms; using System.Drawing; namespace Gmap_Markers { class GMapMarkerImage : GMapMarker { private Image image; private Image imageM; public Image Image { get { return image; } set { image = value; if (image != null) { this.Size = new Size(image.Width, image.Height); } } } public GMapMarkerImage( GMap.NET.PointLatLng p, Image image, Image imageM) : base(p) { Size = new System.Drawing.Size( image.Width, image.Height); Offset = new System.Drawing.Point( -Size.Width / 2, -Size.Height / 2); this.image = image; this.imageM = imageM; } public override void OnRender(Graphics g) { if (image == null) { Rectangle rect = new Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height); g.DrawImage(imageM, rect); } else { Rectangle rect = new Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height); g.DrawImage(image, rect); } } } }Откройте листинг основной формы и замените методы «mapControl_OnMarkerLeave», «mapControl_OnMarkerEnter», «mapControl_MouseClick», «blinkTimer_Tick» и «buttonStopBlink_Click» соответственно приведенным ниже.
//Заменяем изображение при выделении маркера //если нет действий с маркером. void mapControl_OnMarkerLeave(GMapMarker item) { if (item is GMapMarkerImage) { currentMarker = null; GMapMarkerImage m = item as GMapMarkerImage; m.Image.Dispose(); m.Image = null; } } //Устанавливаем для маркера изображение №2 //если маркер выделен клавишей Enter. void mapControl_OnMarkerEnter(GMapMarker item) { if (item is GMapMarkerImage) { currentMarker = item as GMapMarkerImage; currentMarker.Image = Bitmap.FromFile( Application.StartupPath + @"\marker_2.png") as Bitmap; } } void mapControl_MouseClick(object sender, MouseEventArgs e) { //Выполняем проверку, какая клавиша мыши была нажата, //если правая, то выполняем установку маркера. if (e.Button == System.Windows.Forms.MouseButtons.Right) { //Если надо установить только один маркер, //то выполняем очистку списка маркеров markersOverlay.Markers.Clear(); PointLatLng point = gMapControl1.FromLocalToLatLng(e.X, e.Y); //Инициализируем новую переменную изображения и //загружаем в нее изображение маркера, //лежащее возле исполняемого файла. //Маркер для перемещения или наведения мыши Bitmap bitmap = Bitmap.FromFile( Application.StartupPath + @"\marker_2.png") as Bitmap; //Маркер для простой отметки на карте Bitmap bitmapM = Bitmap.FromFile( Application.StartupPath + @"\marker_1.png") as Bitmap; //Инициализируем новый маркер с использованием //созданного нами маркера. GMapMarker marker = new GMapMarkerImage(point, bitmap, bitmapM); marker.ToolTipMode = MarkerTooltipMode.OnMouseOver; //В качестве подсказки к маркеру устанавливаем //координаты где он устанавливается. //Данные о местоположении маркера, //вы можете вывести в любой компонент //который вам нужен. //например: //textBo1.Text = point.Lat; //textBo2.Text = point.Lng; marker.ToolTipText = string.Format("{0},{1}", point.Lat, point.Lng); //Добавляем маркер в список маркеров. markersOverlay.Markers.Add(marker); } } //Отрисовка изображения №2 при наведении //курсора мыши на маркер. void blinkTimer_Tick(object sender, EventArgs e) { foreach (GMapMarker m in markersOverlay.Markers) { if (m is GMapMarkerImage) { GMapMarkerImage marker = m as GMapMarkerImage; if (marker.Image == null) //Задаем цвет и ширину линии квадрата, //отображаемого вокруг маркера //на который наведен курсор. marker.Image = Bitmap.FromFile( Application.StartupPath + @"\marker_2.png") as Bitmap; else { //Убираем красный квадрат. marker.Image.Dispose(); marker.Image = null; } } } //Перерисовываем карту. gMapControl1.Refresh(); } private void buttonStopBlink_Click(object sender, EventArgs e) { //Останавливаем таймер отображения квадрата. blinkTimer.Stop(); foreach (GMapMarker m in markersOverlay.Markers) { if (m is GMapMarkerImage) { GMapMarkerImage marker = m as GMapMarkerImage; marker.Image.Dispose(); marker.Image = null; } } //Перерисовываем карту. gMapControl1.Refresh(); }Данные изменения в коде позволяют вам установить свои изображения маркеров при перемещении, установке нового и постоянного маркера. Ниже представлен пример установленного маркера. Для изменения изображения маркера вам необходимо заменить изображения рядом с исполняемым файлом проекта на любые другие, соблюдая всего два критерия, изображение должно быть в формате «*.png», названо «marker_1» - для постоянного и «marker_2» - для устанавливаемого (перемещаемого) маркера.
Пример перемещаемого или устанавливаемого маркера.
Ссылка для скачивания примера: Яндекс.Диск
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!