Недавно, 2 декабря 2010 года, появилась возможность использования Народной карты на других сайтах, ее можно использовать не только в режиме просмотра, но и для поиска.
В этой заметке я покажу, как можно разместить Народную карту на Вашем сайте с использованием API Яндекс.Карт.
Для использования Народной карты в API Яндекс.Карт существует специальный модуль и в начале необходимо подключить его.
В строке загрузки API сразу после ключа для Вашего сайта нужно добавить параметр modules=pmap через символ &.
Например:
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==&modules=pmap" type="text/javascript"></script> |
Если Вы используете на своем сайте другие модули, то для подключения дополнительного модуля нужно через символ через тильду (~) добавит модуль pmap.
Например:
<script src="http://api-maps.yandex.ru/1.1/?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==modules=hotspot~pmap" type="text/javascript"></script> |
Для выбора определенного участка Народной карты нужно определить координаты ее центра, сделать это можно используя инструмент для определения координат.
Для отображения Народной карты существует два типа НК-схема (YMaps.MapType.PMAP) и НК-гибрид (Ymaps.MapType.PHYBRID).
Пример размещения Народной карты с возможностью переключения типа карты:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Отображение Народной карты</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==&modules=pmap" type="text/javascript"></script> <script type="text/javascript"> function init () { var map = new YMaps.Map( document.getElementById("YMap") ); map.addControl(new YMaps.TypeControl([YMaps.MapType.PMAP, YMaps.MapType.PHYBRID])); map.setCenter(new YMaps.GeoPoint(44.00189,56.324461), 14, YMaps.MapType.PMAP); }; </script> </head> <body onload="init();"> <div id="YMap" style="height:600px; width:800px;"></div> </body> </html> |
Можно добавить и тип обычной карты
Теперь покажу как организовать поиск по Народной карте
Для поиска можно использовать элемент управления Поиск по карте YMaps.SearchControl.
У него прописывается специальное свойство geocodeProvider: "yandex#pmap"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Поиск по Народной карте - элемент управления</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==&modules=pmap" type="text/javascript"></script> <script type="text/javascript"> function init () { var map = new YMaps.Map( document.getElementById("YMap") ); map.addControl(new YMaps.TypeControl([YMaps.MapType.PMAP, YMaps.MapType.PHYBRID])); map.setCenter(new YMaps.GeoPoint(44.00189,56.324461), 12, YMaps.MapType.PMAP); map.addControl(new YMaps.SearchControl({geocodeOptions: {geocodeProvider: "yandex#pmap"}})); }; </script> </head> <body onload="init();"> <div id="YMap" style="height:400px; width:600px;"></div> </body> </html> |
Например, наберем в строке поиска Лобачевский Plaza, увидим результат поиска.
Для поиска по Народной карте используется класс Ymaps.Geocoder.
Процедура полностью аналогична сервесу геокодирования, но отличие заключается в том, что происходит обращение к другому поисковому сервису — yandex#pmap (а не yandex#map, который используется по умолчанию). Результаты поиска возвращаются в виде набора меток класса YMaps.PMap.SearchResult.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Геокодирование на Народной карте</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==&modules=pmap" type="text/javascript"></script> <script type="text/javascript"> function init () { var map = new YMaps.Map( document.getElementById("YMap") ); map.addControl(new YMaps.TypeControl([YMaps.MapType.PMAP, YMaps.MapType.PHYBRID])); map.setCenter(new YMaps.GeoPoint(44.00189,56.324461), 16, YMaps.MapType.PMAP); map.addControl(new YMaps.SmallZoom()); var geocoder = new YMaps.Geocoder("КЗ Юпитер", {geocodeProvider:"yandex#pmap"}); map.addOverlay(geocoder); YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { if (this.length()) { map.addOverlay(this.get(0)); map.panTo(this.get(0).getGeoPoint()) } else { alert("Ничего не найдено"); } }); YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (error) { alert("Произошла ошибка: " + error.message) }); }; </script> </head> <body onload="init();"> <div id="YMap" style="height:400px; width:600px;"></div> </body> </html> |
И еще пример, множественное геокодирование на Народной карте.
За основу взят пример из документации по адресу http://api.yandex.ru/maps/jsapi/examples/multiplygeocoding.html
В исходном примере произведены следующие изменения:
- добавлено подключение модуля Народной карты в строку загрузки API;
- определение центра карты:
- изменена строка с адресами геогравических объектов;
Было:
// Координаты или адреса географических объектов
var data = ["Москва", "Санкт-Петербург", "Екатеринбург", "Киев", "Одесса", "Сиферополь"];
Стало:
// Координаты или адреса географических объектов
var data = ["Нижний Новгород, Лобачевский Plaza", "Нижний Новгород, Клуб Матрица", "Нижний Новгород, школа №18", "Нижний Новгород, Нагорный дворец спорта"];
- изменена строка в функции geocode, вызова геокодера для одного объекта
Было:
var geocoder = new YMaps.Geocoder(request);
Стало:
var geocoder = new YMaps.Geocoder(request, {geocodeProvider:"yandex#pmap"});
Подробнее о поиске по Народной карте можно прочитать по адресу http://api.yandex.ru/maps/geocoder/doc/psearch/concepts/About.xml
а как ограничить поиск ?
что бы искал не по всей России )) а по определенному месту? на народных картах???
Вам может помочь вот эта статья Как ограничить область поиска?
Пример можно переделать для использования поиска по Народной карте, т.к. в обоих случаях используется один класс YMaps.Geocoder
помогла! спасибо!
а что должно меняться при реализации подобного примера для Народной карты?
http://api.yandex.ru/maps/ymapsml/examples/menufromymapsml.html
поясните плиз!
Написал заметку Как ограничить область поиска на Народной карте