Геокодирование

Введение

В данной статье мы изучим, что такое геокодер и какие возможности он предоставляет.

Основы

В картографическое API встроена возможность геокодирования, с помощью которой можно выполнять поиск городов, населённых пунктов, районов, улиц, жилмассивов, домов и других геообъектов по названию или координатам.

Объект геокодера создаётся автоматически при инициализации карты и не должен создаваться вручную. Доступ к объекту можно получить через свойство объекта карты geocoder, например: myMap.geocoder.

Обращение к геокодеру через статический объект DG.Geocoder является устаревшим,рекомендуется использовать обращение через свойство карты, например myMap.geocoder.

Объект геокодера

Ниже мы подробно рассмотрим все методы объекта геокодера.

Для наглядности предположим, что myMap — объект карты.

Методы

Отправить поисковый запрос
myMap.geocoder.get(query, options);

Параметры:

Имя Тип Обязательный Описание
query String | DG.GeoPoint Да

Запрос, по которому производится выборка геообъектов.

Для поиска по названию: строка, содержащая любые символы.

Для поиска по координатам: объект типа DG.GeoPoint, который представляет собой географические координаты точки поиска.

options Object Нет

Параметры поискового запроса:

  • types — массив, который содержит в себе перечень типов геообъектов, которые необходимо выводить в результатах. Допустимые значения: city — крупный город; settlement — населенный пункт; district — район; street — улица; living_area — жилмассив; place — место; house — дом; station_platform — остановочная платформа; station — перечень остановочных платформ, соответствующих остановке;
  • radius — радиус поиска в метрах. Ограничение: от 1 до 250. Используется только при поиске по координатам;
  • limit — ограничение количества возвращаемых результатов. Ограничение: от 1 до 2000. По умолчанию: 1;
  • bound — прямоугольная граница на карте, ограничивающая область поиска. Экземпляр класса DG.Bounds. Если необходимо ограничить область поиска видимыми границами карты - можно задать следующее значение параметра bound: myMap.getBounds(), где myMap - объект карты. При указании bound допустим поиск только по названию (запрос query в виде строки, содержащей любые символы);
  • success — функция-обработчик, вызываемая при успешном поиске. Функция принимает массив геообъектов типа DG.GeocoderObject;
  • failure — функция-обработчик, вызываемая при ошибке поиска. Функция принимает 2 параметра: первый параметр — код ошибки, второй параметр — описание ошибки.

Класс 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);
}
});
Открыть пример в новом окне