Работа с картами в Windows Form с использованием GMap.NET. Часть 4.

      Данная инструкция является продолжением обзора компонента по работе с картами - «GMap.NET». По завершению работы с данной инструкцией в вашем проекте будет реализован функционал загрузки карты по определенным координатам, а так же замена стандартного маркера, который предоставляет компонент, на любое другое изображение в формате «*.png».
      Для данной инструкции будет использован пример из первой части (Работа с картами в Windows Form с использованием GMap.NET) обзора данного компонента. Вы можете воспользоваться как тестовым примером или полностью выполнить первую инструкцию самостоятельно и плавно перейти к выполнению этой. Если вы воспользовались исходником из первой части обзора компонента «GMap.NET», метод загрузки главной формы «Form1_Load» будет содержать код установки двух маркеров (красный и зеленый) по координатам Красной площади в Москве, удалите данный код. У вас останется только часть инициализации карты по заданным координатам.
//Настройки для компонента 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;

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

//Указываем что все края элемента управления
//закрепляются у краев содержащего его элемента
//управления(главной формы), а их размеры изменяются 
//соответствующим образом.
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);
      Далее необходимо добавить в проект класс, реализующий замену стандартного маркера на изображение расположенное возле исполняемого файла вашего проекта. Добавьте приведенный ниже код класса, после класса главной формы «public partial class Form1 : Form».
class GMapMarkerImage : GMapMarker
{
    private Image image;       
    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)
        : 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;
    }

    public override void OnRender(Graphics g)
    {
        if (image != null)
        {

            Rectangle rect =
                new Rectangle(LocalPosition.X,
                              LocalPosition.Y,
                              Size.Width,
                              Size.Height);
            g.DrawImage(image, rect);
        }
    }
}
      Чтобы воспользоваться данным классом необходимо в конце кода метода «Form1_Load», выполнить инициализацию нового маркера:
//Создаем новый список маркеров, с указанием компонента 
//в котором они будут использоваться и названием списка.
GMap.NET.WindowsForms.GMapOverlay markersOverlay =
    new GMap.NET.WindowsForms.GMapOverlay(gMapControl1, "marker");

//Маркер для простой отметки на карте
Bitmap bitmap =
  Bitmap.FromFile(
    Application.StartupPath + @"\marker.png")
    as Bitmap;

//Инициализация нового маркера, с указанием его координат.
GMapMarkerImage marker = new
    GMapMarkerImage(new GMap.NET.PointLatLng(55.75393, 37.620795), bitmap);

//Добавляем маркер с изображением в список маркеров.            
markersOverlay.Markers.Add(marker);     

//Добавляем в компонент, список маркеров.
gMapControl1.Overlays.Add(markersOverlay);
      Перейдите в директорию, в которой расположен ваш исполняемый файл, в Microsoft Visual Studio это папка «Debug». Вставьте в данную папку, изображение в формате «*.png», которое будет у вас маркером на карте и переименуйте его в «marker.png». Запустите ваш проект и проверьте работу вашего класса. Ниже представлены примеры работы программы с различными изображениями для маркера.



      Так же вы можете в качестве изображения вставить «ToolTip» картинку, сделав ее в любом графическом редакторе.


Ссылка для скачивания примера: Яндекс.Диск


Комментариев нет:

Отправить комментарий

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