Геокодирование
- Введение
- Основы
- Объект геокодера
- Класс DG.GeocoderObject
- Методы
- Получить тип геообъекта
- Получить название геообъекта
- Получить короткое название геообъекта
- Получить дополнительные атрибуты геообъекта
- Получить географические координаты центра геообъекта
- Получить геометрическую фигуру, которая описывает периметр геообъекта
- Получить маркер с координатами центра геообъекта
- Методы
- Пример поиска геообъектов по названию
- Пример поиска геообъектов по координатам
- Пример поиска геообъектов и отображения их периметров на карте
Введение
В данной статье мы изучим, что такое геокодер и какие возможности он предоставляет.
Основы
В картографическое API встроена возможность геокодирования, с помощью которой можно выполнять поиск городов, населённых пунктов, районов, улиц, жилмассивов, домов и других геообъектов по названию или координатам.
Объект геокодера создаётся автоматически при инициализации карты и не должен создаваться вручную. Доступ к объекту можно получить через свойство объекта карты geocoder
, например: myMap.geocoder
.
Обращение к геокодеру через статический объект DG.Geocoder
является устаревшим,рекомендуется использовать обращение через свойство карты, например myMap.geocoder
.
Объект геокодера
Ниже мы подробно рассмотрим все методы объекта геокодера.
Для наглядности предположим, что myMap — объект карты.
Методы
Отправить поисковый запрос
myMap.geocoder.get(query, options);Параметры:
Имя | Тип | Обязательный | Описание |
---|---|---|---|
query | String | DG.GeoPoint | Да | Запрос, по которому производится выборка геообъектов. Для поиска по названию: строка, содержащая любые символы. Для поиска по координатам: объект типа |
options | Object | Нет | Параметры поискового запроса:
|
Класс DG.GeocoderObject
Ниже мы подробно рассмотрим все методы класса DG.GeocoderObject
.Каждый объект класса представляет собой некий географический объект, возвращаемый в результате поиска.
Методы
Получить тип геообъекта
geocoderObject.getType()Возвращает:
Тип | Описание |
---|---|
String | Тип геообъекта |
Получить название геообъекта
geocoderObject.getName()Возвращает:
Тип | Описание |
---|---|
String | Название геообъекта |
Получить короткое название геообъекта
geocoderObject.getShortName()Возвращает:
Тип | Описание |
---|---|
String | Короткое название геообъекта |
Получить дополнительные атрибуты геообъекта
geocoderObject.getAttributes()Возвращает:
Тип | Описание |
---|---|
Object | Объект, который содержит внутри себя дополнительную информацию о геообъекте. Набор атрибутов зависит от конкретного геообъекта |
Получить географические координаты центра геообъекта
geocoderObject.getCenterGeoPoint()Возвращает:
Тип | Описание |
---|---|
DG.GeoPoint | Географическое положение центра геообъекта |
Получить геометрическую фигуру, которая описывает периметр геообъекта
geocoderObject.getSelection()Возвращает:
Тип | Описание |
---|---|
DG.Geometries.Multipolygon | DG.Geometries.Multipolyline | DG.Geometries.Polygon | DG.Geometries.Polyline | DG.Geometries.Point | DG.Geometries.Multipoint | Геометрическая фигура, описывающая периметр области, которую занимает геообъект. |
Получить маркер с координатами центра геообъекта
geocoderObject.getMarker(icon, clickCallback)Параметры:
Имя | Тип | Обязательный | Описание |
---|---|---|---|
icon | DG.Icon | Нет | Картинка маркера. Если параметр не указан, используется картинка по умолчанию. |
clickCallback | Function | Нет | Обработчик, который вызываться в момент клика мышки по маркеру. Контекст вызова функции — объект window . |
Возвращает:
Тип | Описание |
---|---|
DG.Markers.Common | Маркер |
Пример поиска геообъектов по названию
В данном примере выполняется поиск по ключевому слову «Новосибирск». Типы объектов поиска: города, населённые пункты, районы. Максимальное количество результатов поиска — 10 геообъектов. В результате успешного поиска, на карте будут отображены маркера с координатами центров найденных геообъектов. При клике на маркер в диалоговом окне будет отображена полная информация об объекте.
myMap.geocoder.get('Новосибирск', {
types: ['city', 'settlement', 'district'],
limit: 10,
// Обработка успешного поиска
success: function(geocoderObjects) {
// Обходим циклом все полученные геообъекты
for(var i = 0, len = geocoderObjects.length; i < len; i++) {
var geocoderObject = geocoderObjects[i];
// Получаем маркер из геообъекта с помощью метода getMarker.
// Первый параметр - иконка маркера, второй параметр - функция, которая сработает при клике на маркер
var markerIcon = new DG.Icon('http://api.2gis.ru/upload/images/2314.png', new DG.Size(53, 25));
var marker = geocoderObject.getMarker(markerIcon, (function(geocoderObject) {
return function () {
var info = '';
// Основная информация о геообъекте
info += 'Type: ' + geocoderObject.getType() + '\n';
info += 'Name: ' + geocoderObject.getName() + '\n';
info += 'Short name: ' + geocoderObject.getShortName() + '\n';
// Дополнительная информация о геообъекте
var attributes = geocoderObject.getAttributes();
for (var attribute in attributes) {
if (attributes.hasOwnProperty(attribute)) {
info += attribute + ': ' + attributes[attribute] + '\n';
}
}
// Географические координаты центра геообъекта
var centerGeoPoint = geocoderObject.getCenterGeoPoint();
info += 'Longitude: ' + centerGeoPoint.getLon() + '\n';
info += 'Latitude: ' + centerGeoPoint.getLat();
alert (info);
}
})(geocoderObject));
myMap.markers.add(marker);
}
},
// Обработка ошибок
failure: function(code, message) {
alert(code + ' ' + message);
}
});
Открыть пример в новом окне
Пример поиска геообъектов по координатам
Данный пример аналогичен предыдущему, разница лишь в том, что здесь мы ищем 10 домов, которые находятся в радиусе 200 метров точки со следующими географическими координатами: долгота — 82.927810142519
, широта — 55.0289362348260
.
myMap.geocoder.get(new DG.GeoPoint(82.927810142519, 55.0289362348260), {
types: ['house'],
radius: 200,
limit: 10,
// Обработка успешного поиска
success: function(geocoderObjects) {
// Обходим циклом все полученные геообъекты
for(var i = 0, len = geocoderObjects.length; i < len; i++) {
var geocoderObject = geocoderObjects[i];
// Получаем маркер из геообъекта с помощью метода getMarker.
// Первый параметр - иконка маркера, второй параметр - функция, которая сработает при клике на маркер
var markerIcon = new DG.Icon('http://api.2gis.ru/upload/images/2314.png', new DG.Size(53, 25));
var marker = geocoderObject.getMarker(markerIcon, (function(geocoderObject) {
return function () {
var info = '';
// Основная информация о геообъекте
info += 'Type: ' + geocoderObject.getType() + '\n';
info += 'Name: ' + geocoderObject.getName() + '\n';
info += 'Short name: ' + geocoderObject.getShortName() + '\n';
// Дополнительная информация о геообъекте
var attributes = geocoderObject.getAttributes();
for (var attribute in attributes) {
if (attributes.hasOwnProperty(attribute)) {
info += attribute + ': ' + attributes[attribute] + '\n';
}
}
// Географические координаты центра геообъекта
var centerGeoPoint = geocoderObject.getCenterGeoPoint();
info += 'Longitude: ' + centerGeoPoint.getLon() + '\n';
info += 'Latitude: ' + centerGeoPoint.getLat();
alert (info);
}
})(geocoderObject));
myMap.markers.add(marker);
}
},
// Обработка ошибок
failure: function(code, message) {
alert(code + ' ' + message);
}
});
Открыть пример в новом окне
Пример поиска геообъектов и отображения их периметров на карте
var myMap = new DG.Map('map');
myMap.setCenter(new DG.GeoPoint(83.03, 55.0389362348260), 15);
myMap.geocoder.get('рынок Новосибирск', {
limit: 100,
// Обработка успешного поиска
success: function(response) {
// Удаляем все геометрии из карты
myMap.geometries.removeAll();
// Обходим циклом все полученные геообъекты
for (var i = 0; i < response.length; i++) {
// Передаем каждый геообъект в анонимную функцию для обработки
(function(geocoderObject) {
// Получаем геометрию периметра геообъекта
var geometry = geocoderObject.getSelection();
// Добавляем геометрию на карту
myMap.geometries.add(geometry);
// Устанавливаем стиль геометрии
var style = new DG.Style.Geometry();
style.fillColor = "#ff00ff";
style.fillOpacity = 0.4;
style.strokeColor= "blue";
style.strokeOpacity= 1;
style.strokeWidth= 1;
style.pointRadius = 5;
geometry.setStyle(style);
})(response[i]);
}
},
// Обработка ошибок
failure: function (code, message) {
alert(code + ' ' + message);
}
});
Открыть пример в новом окне