Данная инструкция является дополнительным материалом к статье по изменению изображения маркера (Работа с картами в 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» - для устанавливаемого (перемещаемого) маркера.Пример перемещаемого или устанавливаемого маркера.
Ссылка для скачивания примера: Яндекс.Диск





Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!