Данная инструкция является продолжением обзора компонента по работе с картами - «GMap.NET». По завершению работы с данной инструкцией в вашем проекте будет реализован функционал загрузки карты по определенным координатам, а так же замена стандартного маркера, который предоставляет компонент, на любое другое из списка. Данный список маркеров будет формироваться путем сканирования директории «Markers», расположенной возле исполняемого файла проекта. В данной директории расположены папки содержащие маркеры различных типов. Имена данных директорий, будут загружены в элемент управления «ComboBox» и использоваться в качестве категорий (а также адресом директории) для загрузки изображений маркеров, в элемент управления «ListView» в формате «*.png».
Для данной инструкции будет использован пример из четвертой части (Работа с картами в Windows Form с использованием GMap.NET. Часть 4) обзора данного компонента. Вы можете воспользоваться как тестовым примером или полностью выполнить инструкцию самостоятельно и плавно перейти к выполнению этой. Если вы воспользовались исходником из четвертой части обзора компонента «GMap.NET», то метод загрузки главной формы «Form1_Load» будет содержать код установки маркера с определенным изображением, по координатам Красной площади в Москве, удалите данный код. У вас останется только часть инициализации карты по заданным координатам и класс для замены стандартного маркера на изображение из определенной директории. Добавьте на форму два элемента управления:
Добавьте в начало метода загрузки главной формы «Form1_Load», приведенный ниже код, реализующий сканирование папки «Markers» с получением имен папок расположенных в ней и занесением их в элемент управления «ComboBox», а так же выбором первого элемента из списка.
В открывшемся окне свойств данного элемента управления, перейдите во вкладку «События» (значок молнии в верхней части) и найдите событие «SelectedIndexChanged». Данное событие срабатывает каждый раз при выборе нового элемента из списка.
Сделайте по нему двойной клик левой клавишей мыши. Вы перейдете в автоматически созданный метод «comboBox1_SelectedIndexChanged». Добавьте приведенный ниже код в тело данного метода.
Запустите ваш проект, нажав на клавиатуре клавишу «F5», если вы все выполнили по инструкции, то у вас после запуска главной формы, в элементе управления «comboBox1» появится список имен директорий, расположенных в папке «Markers». По умолчанию, автоматически будет выбран первый элемент из списка и если в директории есть изображения маркеров, они будут загружены в элемент управления «ListView». Выберете любое изображение маркера и сделайте в любом месте на карте, клик правой клавишей мыши. У вас должен появиться маркер с выбранным изображением и координатами где установлен маркер, в качестве подсказки. Ниже представлен пример работы программы с различными изображениями для маркера, из разных директорий.
Для данной инструкции будет использован пример из четвертой части (Работа с картами в Windows Form с использованием GMap.NET. Часть 4) обзора данного компонента. Вы можете воспользоваться как тестовым примером или полностью выполнить инструкцию самостоятельно и плавно перейти к выполнению этой. Если вы воспользовались исходником из четвертой части обзора компонента «GMap.NET», то метод загрузки главной формы «Form1_Load» будет содержать код установки маркера с определенным изображением, по координатам Красной площади в Москве, удалите данный код. У вас останется только часть инициализации карты по заданным координатам и класс для замены стандартного маркера на изображение из определенной директории. Добавьте на форму два элемента управления:
- ComboBox – Элемент управления для вывода имен директорий содержащих изображения маркеров;
- ListView – Элемент управления для вывода изображений маркеров, по выбранной категории.
Добавьте в начало метода загрузки главной формы «Form1_Load», приведенный ниже код, реализующий сканирование папки «Markers» с получением имен папок расположенных в ней и занесением их в элемент управления «ComboBox», а так же выбором первого элемента из списка.
//Включаем визуальные стили для приложения.
Application.EnableVisualStyles();
//Получаем список директорий в папке Markers
//расположенной возле исполняемого файла проекта
//и заносим их заголовки в элемент управления
//comboBox1.
System.IO.DirectoryInfo dirM =
new System.IO.DirectoryInfo(Application.StartupPath + @"\Markers");
foreach (var item in dirM.GetDirectories())
{
//Добавление имени Директории с маркерами
comboBox1.Items.Add(item.Name);
}
//Выбираем первый каталог.
comboBox1.SelectedIndex = 0;
//Указываем, что каждый элемент отображается в виде
//полноразмерного значка с расположенной
//под ним меткой.
this.listView1.View = View.LargeIcon; Так же добавьте в конец данного метода, приведенный ниже код, устанавливающий в элементе управления «gMapControl1», на событие «MouseClick», срабатывающее при клике любой клавишей мыши, событие «map_MouseClick».//Устанавливаем свой метод на //событие клика мышки. gMapControl1.MouseClick += new MouseEventHandler(map_MouseClick);Добавьте после данного метода приведенный ниже код события «map_MouseClick». Данный метод инициализирует новый список маркеров, выполняет проверку, была ли нажата правая клавиша мыши и в случае если данная проверка выполнена успешно, в переменные «lat» и «lng», заносятся координаты, где был выполнен клик правой клавишей мыши. Далее выполняется замена стандартного маркера элемента управления «gMapControl1», на изображение, выбранное в элементе управления «ListView» и установки координат в качестве подсказки.
//Список маркеров.
GMap.NET.WindowsForms.GMapOverlay overlayOne;
private void map_MouseClick(object sender, MouseEventArgs e)
{
//Инициализируем новый список маркеров.
overlayOne =
new GMap.NET.WindowsForms.GMapOverlay(gMapControl1, "OverlayOne");
//Очищаем список маркеров.
overlayOne.Markers.Clear();
//Переменные для хранения
//координат устанавливаемого маркера.
double lat = 0.0;
double lng = 0.0;
//Проверяем, что нажата правая клавиша мыши.
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
//Получаем координаты, где устанавливается новый маркер.
lat = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lat;
lng = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lng;
try
{
//Получаем изображение выбранного маркера из списка.
Image bitmap =
Image.FromFile(
PathImage[listView1.SelectedIndices[0]].ToString());
//Создаем новый маркер с изображением.
GMapMarkerImage marker =
new GMapMarkerImage(new GMap.NET.PointLatLng(lat, lng), bitmap);
//Создаем подсказку.
marker.ToolTip =
new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(marker);
//Указываем в качестве текста подсказки,
//координаты где установлен маркер.
marker.ToolTipText = lat.ToString() + ";"+
//Делаем перевод строки.
Environment.NewLine +
lng.ToString() + ";";
//Добавляем новый маркер, в список маркеров.
overlayOne.Markers.Add(marker);
//Указываем элементу управления
//gMapControl1, список маркеров.
gMapControl1.Overlays.Add(overlayOne);
}
catch
{
//Если изображение маркера не выбрано, то выводим сообщение
//об ошибке.
MessageBox.Show(
"Пожалуйста выберете маркер из предложенного списка!",
"www.CSharpCoderR.com & Gmap.NET",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
}
} Перейдите в Конструктор главной формы вашего проекта и сделайте клик правой клавишей мыши по элементу управления «comboBox1». В открывшемся контекстном меню, выберите пункт «Свойства».В открывшемся окне свойств данного элемента управления, перейдите во вкладку «События» (значок молнии в верхней части) и найдите событие «SelectedIndexChanged». Данное событие срабатывает каждый раз при выборе нового элемента из списка.
Сделайте по нему двойной клик левой клавишей мыши. Вы перейдете в автоматически созданный метод «comboBox1_SelectedIndexChanged». Добавьте приведенный ниже код в тело данного метода.
//Очищаем список изображений маркеров. listView1.Items.Clear(); //Передаем в метод Images, индекс выбранной директории //с изображениями маркеров. Images(comboBox1.SelectedIndex); // this.listView1.LargeImageList = this.ImageList1; //Задаем фокус ввода элементу управления. this.listView1.Focus(); //Задаем значение, указывающее, //что выбран первый элемент. this.listView1.Items[0].Selected = true;А так же добавьте приведенный ниже код в класс «public partial class Form1 : Form», главной формы. Данный код реализует загрузку изображений маркеров в элемент управления «ListView», по индексу выбранной категории в элементе управления «comboBox1».
//переменная для изображений маркеров. public ImageList ImageList1; //Список для хранения пути к изображению. public ListПерейдите в директорию, в которой расположен ваш исполняемый файл, в Microsoft Visual Studio это папка «Debug». Создайте в данной директории, папку «Markers». А в ней несколько папок с изображениями маркеров в формате «*.png», которые будут загружаться в элемент управления «ListView».PathImage; //Класс для загрузки изображений //из выбранного каталога. public void Images(int IndexCategory) { //Инициализируем новый список //изображений маркеров. ImageList1 = new ImageList(); //Задаем белый цвет, обрабатываемый как прозрачный. ImageList1.TransparentColor = Color.White; //Задаем глубину цвета для изображений в списке. ImageList1.ColorDepth = ColorDepth.Depth32Bit; //Задаем размер изображений в списке изображений. ImageList1.ImageSize = new Size(32, 32); //Инициализируем новый список //путей к изображениям маркеров. PathImage = new List (); //Инициализируем новую переменную //для работы с выбранным каталогом изображений //маркеров. System.IO.DirectoryInfo dirK = new System.IO.DirectoryInfo( Application.StartupPath + @"\Markers\" + comboBox1.Items[IndexCategory].ToString()); //Счетчик добавленных //изображений. int indexImage = 0; //Цикл добавления изображений маркеров в список, из //выбранной директории. foreach (var item in dirK.GetFiles()) { //Заносим в переменную путь к файлу. object path = Application.StartupPath + @"\Markers\" + comboBox1.Items[IndexCategory].ToString() + "\\" + item.Name; //Добавляем новое изображение маркера. ImageList1.Images.Add(Image.FromFile(path.ToString())); //Не работает, по неизвестным причинам. //ImageList1.Images[indexImage].Tag = @path; //Добавляем новый путь к изображению маркера, //в список. PathImage.Add(path.ToString()); //Увеличиваем счетчик изображений. indexImage++; } //Цикл создания элементов в элементе управления //listView1. for (int j = 0; j < ImageList1.Images.Count; j++) { ListViewItem item = new ListViewItem(); item.ImageIndex = j; listView1.Items.Add(item); } //Задаем список ImageList1, используемый //при отображении элементов в элементе //управления в виде крупных значков. listView1.LargeImageList = ImageList1; //Задаем список ImageList1, используемый //при отображении элементов в элементе //управления в виде маленьких значков. listView1.SmallImageList = ImageList1; }
Запустите ваш проект, нажав на клавиатуре клавишу «F5», если вы все выполнили по инструкции, то у вас после запуска главной формы, в элементе управления «comboBox1» появится список имен директорий, расположенных в папке «Markers». По умолчанию, автоматически будет выбран первый элемент из списка и если в директории есть изображения маркеров, они будут загружены в элемент управления «ListView». Выберете любое изображение маркера и сделайте в любом месте на карте, клик правой клавишей мыши. У вас должен появиться маркер с выбранным изображением и координатами где установлен маркер, в качестве подсказки. Ниже представлен пример работы программы с различными изображениями для маркера, из разных директорий.
Ссылка для скачивания примера: Яндекс.Диск








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