Термин геокодирование обычно обозначает преобразование обычного адреса в местоположение на карте. Процесс, заключающийся в преобразовании точки на карте в удобочитаемый адрес, известен как обратное геокодирование. API геокодирования Google, напрямую поддерживает функцию обратного геокодирования при помощи параметра latlng. Например, следующий запрос содержит значение широты/долготы для географической точки на территории Москвы:
http://maps.google.com/maps/api/geocode/xml?latlng=55.7570051,37.6164606&sensor=true_or_false
Данный запрос возвращает следующий результат:
Ниже приведен полный список значений «formatted_address», возвращаемых приведенным выше запросом.
В соответствии с инструкцией «Работа с картами в Windows Form с использованием GMap.NET» , добавьте визуальный компонент «GMap.NET». У вас получится приведенный ниже пример.
Сделайте двойной клик по пустому пространству главной формы, вы перейдете в автоматически созданный метод загрузки главной формы «Form1_Load». Добавьте в него приведенный ниже код установки настроек для элемента управления «gMapControl1».
http://maps.google.com/maps/api/geocode/xml?latlng=55.7570051,37.6164606&sensor=true_or_false
Данный запрос возвращает следующий результат:
Обратите внимание, что обратный геокодер вернул несколько результатов. Элементы «formatted_address» в результатах представляют не просто почтовые адреса, но и любые наименования географических точек и областей. Например, геокодируемая точка в пределах Москвы может быть обозначена как номер дома, улица, город (Москва), область или страна (Россия). Для геокодера все эти элементы являются "адресами". Любой из этих типов возвращается обратным геокодером в качестве допустимых результатов. Обратный геокодер сопоставляет точки, указанные на карте, с политическими и административными единицами (странами, провинциями, городами и районами), адресами и почтовыми индексами.OK ... street_address улица Охотный Ряд, 2, Москва, Россия, 109012 2 2 street_number улица Охотный Ряд ул. Охотный Ряд route Центральный административный округ Центральный административный округ sublocality_level_1 sublocality political Москва Москва locality political город Москва г. Москва administrative_area_level_2 political город Москва г. Москва administrative_area_level_1 political Россия RU country political 109012 109012 postal_code 55.7570598 37.6165116 ROOFTOP 55.7557108 37.6151626 55.7584088 37.6178606
Ниже приведен полный список значений «formatted_address», возвращаемых приведенным выше запросом.
- formatted_address : "улица Охотный Ряд, 2, Москва, Россия, 109012",
- formatted_address : "Москва, Россия, 109012",
- formatted_address : "Тверской район, Москва, Россия",
- formatted_address : "Центральный административный округ, Москва, Россия",
- formatted_address : "Москва, Rossiya",
- formatted_address : "город Москва, город Москва, Россия",
- formatted_address : "город Москва, Россия",
- formatted_address : "Россия",
Результаты, получаемые при обратном геокодировании, являются приблизительными. Геокодер пытается найти ближайшее местоположение, которому можно сопоставить адрес с некоторой погрешностью. Если это невозможно, геокодер возвращает нулевой результат.
Запустите Microsoft Visual Studio и создайте новый проект Windows Form.В соответствии с инструкцией «Работа с картами в Windows Form с использованием GMap.NET» , добавьте визуальный компонент «GMap.NET». У вас получится приведенный ниже пример.
Сделайте двойной клик по пустому пространству главной формы, вы перейдете в автоматически созданный метод загрузки главной формы «Form1_Load». Добавьте в него приведенный ниже код установки настроек для элемента управления «gMapControl1».
//Настройки для компонента 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;
//Указываем, что при загрузке карты будет использоваться
//2х кратное приближение.
gMapControl1.Zoom = 2;
//Указываем что будем использовать карты Yandex.
gMapControl1.MapProvider =
GMap.NET.MapProviders.GMapProviders.YandexMap;
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», на событие «MouseClick», срабатывающее при клике любой клавишей мыши, событие «map_MouseClick».//Устанавливаем свой метод на //событие клика мышки. gMapControl1.MouseClick += new MouseEventHandler(map_MouseClick);Добавьте после данного метода приведенный ниже код события «map_MouseClick». Данный метод выполняет проверку, была ли нажата правая клавиша мыши и в случае если данная проверка выполнена успешно, в переменные «lat» и «lng», заносятся координаты, где был выполнен клик правой клавишей мыши код. А так же реализует отправку запроса и чтения ответа службы API геокодирования Google и установки первого полученного значения из списка значений «formatted_address» в качестве подсказки маркера (т.к служба API геокодирования Google возвращает различные типы адресов, от наиболее конкретного адреса до менее конкретных).
//Список маркеров.
GMap.NET.WindowsForms.GMapOverlay overlayOne;
private void map_MouseClick(object sender, MouseEventArgs e)
{
//Переменные для хранения
//координат устанавливаемого маркера.
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;
//Запрос к API геокодирования Google.
string url = string.Format(
"http://maps.google.com/maps/api/geocode/xml?latlng={0},{1}&sensor=true_or_false&language=ru",
lat.ToString().Replace(",", "."), lng.ToString().Replace(",", "."));
//Выполняем запрос к универсальному коду ресурса (URI).
System.Net.HttpWebRequest request =
(System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
//Получаем ответ от интернет-ресурса.
System.Net.WebResponse response =
request.GetResponse();
//Экземпляр класса System.IO.Stream
//для чтения данных из интернет-ресурса.
System.IO.Stream dataStream =
response.GetResponseStream();
//Инициализируем новый экземпляр класса
//System.IO.StreamReader для указанного потока.
System.IO.StreamReader sreader =
new System.IO.StreamReader(dataStream);
//Считывает поток от текущего положения до конца.
string responsereader = sreader.ReadToEnd();
//Закрываем поток ответа.
response.Close();
//Инициализируем новый документ Xml.
System.Xml.XmlDocument xmldoc =
new System.Xml.XmlDocument();
xmldoc.LoadXml(responsereader);
if (xmldoc.GetElementsByTagName("status")[0].ChildNodes[0].InnerText == "OK")
{
//Получение информации о найденном объекте.
//Берем первый возвращаемый адрес.
string formatted_address =
xmldoc.SelectNodes("//formatted_address").Item(0).InnerText.ToString();
//Получаем массив, элементы которого содержат подстроки
//данного экземпляра, разделенные
//одним или более знаками из separator.
string[] words = formatted_address.Split(',');
string dataMarker = string.Empty;
//Получаем строку с переходами.
foreach (string word in words)
{
dataMarker += word + ";" + Environment.NewLine;
}
//Создаем новый список маркеров, с указанием компонента
//в котором они будут использоваться и названием списка.
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(lat, lng));
markerG.ToolTip =
new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(markerG);
//Указываем, что подсказку маркера, необходимо отображать всегда.
markerG.ToolTipMode = GMap.NET.WindowsForms.MarkerTooltipMode.Always;
//Текст подсказки маркера.
markerG.ToolTipText = dataMarker;
//Добавляем маркеры в список маркеров.
markersOverlay.Markers.Add(markerG);
//Очищаем список маркеров компонента.
gMapControl1.Overlays.Clear();
//Добавляем в компонент, список маркеров.
gMapControl1.Overlays.Add(markersOverlay);
//Устанавливаем позицию карты.
gMapControl1.Position = new GMap.NET.PointLatLng(lat, lng);
//Указываем, что при загрузке карты будет использоваться
//17ти кратное приближение.
gMapControl1.Zoom = 17;
//Обновляем карту.
gMapControl1.Refresh();
}
}
} Запустите ваш проект, нажав на клавиатуре клавишу «F5» и сделайте клик правой клавишей мыши в любом месте загруженной карты. У вас установится маркер с информацией о данном месте. Ниже представлены примеры установки маркеров в разных местах карты.Ссылка для скачивания примера: Яндекс.Диск







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