Показаны сообщения с ярлыком поиск. Показать все сообщения
Показаны сообщения с ярлыком поиск. Показать все сообщения

четверг, 23 апреля 2009 г.

Добавляем поиск по адресу на Яндекс.Карту

В заметках ранее мы используя API Яндекс.Карт создали карту с элементами управления и добавили на нее метку.

В этой заметке мы добавим к нашей карте возможность поиска по адресу.

Для начала мы возьмем уже готовый пример кода для заметки «Яндекс. Карты – добавляем элементы управления» .

Вот этот код:

<!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>

<meta http-equiv=”Content-Type” content=”text/html” />

<script src=”http://api-maps.yandex.ru/1.0/?key=

AKgqHEkBAAAA-WzMYwIAeAeamm8ETZZZpdfp2R07eIuGyX4AAAAAAAAAAACjUCDoHIHZJ2pcl5mSL1zWVp2Myw==”

type=”text/javascript”></script><script type=”text/javascript” charset=”utf-8?>

var map;

function init () {

map = new YMaps.Map( document.getElementById(”YMapsID”) );

map.setCenter(new YMaps.GeoPoint(44.0,56.32811), 13,

YMaps.MapType.MAP);map.addControl(new YMaps.TypeControl());

map.addControl(new YMaps.ToolBar());

map.addControl(new YMaps.Zoom());

map.addControl(new YMaps.MiniMap());

map.addControl(new YMaps.ScaleLine());}

</script>

</head>



<body onload=”init();”><div id=”YMapsID” style=”height:400px; width:600px;”></div></body>

</html>



Для реализации поиска по адресу на карте необходимо к нашему примеру сделать следующие добавления.

  1. Форму для ввода адреса.

  2. Функцию которая будет принимать введенный адрес и отправлять запрос геокодеру и вслучае, когда адрес нашелся, отображать его на карте с помощью балуна.


Здесь я употребил слово геокодер. Что это такое?

Геокодер – это специальный сервис, который позволяет определять координаты и получать сведения о географическом объекте по его названию или адресу.

Процесс работы с геокодером называется геокодированием.

Для работы с геокодером в API Яндекс.Карт используются специальные объекты  YMaps.Geocoder и YMaps.GeocoderResult. Они позволяют отправлять запросы геокодеру, получать информацию о статусе и результате процесса геокодирования и получать результаты геокодирования в виде меток карты.

Подробнее о геокодировании можно узнать из руководства разработчика по адресу http://api.yandex.ru/maps/jsapi/doc/dg/concepts/geocoder.xml

И так мы добавляем в наш пример форму поиска.

В раздел BODY перед картой добавляем следующий код:

<form action="#" onsubmit="showAddress(this.address.value);return false;"><p><input type="text" id="address" style="width:525px;" value="Нижний Новгород" />

<input type="submit" value="Искать" />

</p>

</form>



В раздел HEAD после функции init следующую функцию:

function showAddress (value) {map.removeOverlay(geoResult);var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {

if (this.length()) {

geoResult = this.get(0);

map.addOverlay(geoResult);

map.setBounds(geoResult.getBounds());

}else {

alert("Ничего не найдено")

}

});

YMaps.Events.observe(geocoder, geocoder.Events.Fault,

function (error) {alert("Произошла ошибка: " + error.message)});

}



Форма уже содержит значение Нижний Новгород для поиска.

В нее необходимо ввести искомый адрес.

Введенный адрес (значение переменной value) передается функции showAddress.

В ней сначала мы удаляем все оверлеи (объект, привязанный по географическим координатам, который отображается поверх карты, в частности открытый балун) строка map.removeOverlay(geoResult);

Затем в строке var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

запускаем процесс геокодирования.

Полсле этого, если поиск прошел без ошибок и найден хотя бы один результат отображаем его с помощью открытого балуна.

Иначе выводим сообщение: «Ничего не найдено».

Последние две строки функции служат для вывода сообщения об ошибке геокодирования.

Загрузим наш пример в браузере и проверим его работу.

Пример Яндекс.Карты с формой поиска

Найдем для примера следующий адрес: Нижний Новгород, ул. Белинского, 59

Введем его в строку поиска и нажмем Найти.

Получим найденный результат.

Пример Яндекс.Карты - Результат поиска

Посмотреть пример в действии и полный код можно здесь.

На странице к созданной функции можно обращаться используя ссылку, например,

<a href="javascript:showAddress(‘Нижний Новгород, ул. Белинского, 59’)"> Нижний Новгород, ул. Белинского, 59</a>

Посмотреть пример с ссылками в действии и полный код можно здесь.

суббота, 18 апреля 2009 г.

Добавляем форму поиска на карту Google

И так в предыдущих заметках об использовании API Google Maps  мы научились размещать карту на собственном сайте, добавлять на нее информационные окна (балуны) и метки.


Теперь для создания полноценного сервиса мы узнаем, как добавить к карте форму поиска.


Для этого необходимо пройти несколько этапов.




  1. Для осуществления поиска существует специальная служба  API поиска Google AJAX.

  2. Мы возьмем уже готовый пример использования карт Google из заметки «Добавляем элементы управления на карту Google Maps» и изменим его.

  3. В раздел HEAD после строки вызова  URL-адреса расположения  файла JavaScript, содержащего все символы и определения, необходимые для работы с API Карт Google с ключом


<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAACHCJdlgAEGcD_flKUFEmVhQlAYd20Yeej0MiKNuYPUGBnCwDThQlwUCPtCqtX3RC7LUKE-JYan3T4g"    type="text/javascript"></script>

Добовляем код

<script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0" type="text/javascript"></script>

<script src="http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js" type="text/javascript"></script>

<style type="text/css">

@import url("http://www.google.com/uds/css/gsearch.css");

@import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css");

</style>

В нем мы указываем URL-адрес API поиска Google AJAX.

Далее мы  загружаем таблицы стилей для данного элемента управления.

4. После строки кода map.addControl(new GMapTypeControl()); мы добавляем следующее

map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));

Здесь  мы загружаем сам элемент управления и задаем его расположение на карте.

И после закрывающейся скобки функции initialize() строку

GSearch.setOnLoadCallback(initialize);

Определяет вызов метода после того, как поиск будет завершен.

5. После этого загружаем страницу с примером в браузере и наблюдаем следующее

Пример API Карт Google c формой поиска

Проверим работу.

Наберем в строке поиска Москва, ул. Волхонка, 15 (это адрес Храма Христа Спасителя)

Мы увидим результат поиска

Пример API Карт Google - результаты поиска

Можно изменить размер карты, чтобы лучше видеть результаты поиска.

В строке <div id="map_canvas" style="width: 500px; height: 300px"></div> заменяем значения width на 800px и height на 600px.

Посмотреть пример в действии и полный код можно здесь.

Давайте изменим положения элементов управления для  карты на свои.

Метод addControl() принимает необязательный второй параметр GControlPosition, который позволяет указать позицию элемента управления на карте.

Углы карты указываются с помощью специальных значений:

G_ANCHOR_TOP_RIGHT – правый верхний угол,

G_ANCHOR_TOP_LEFT – левый верхний угол,

G_ANCHOR_BOTTOM_RIGHT – правый нижний угол,

G_ANCHOR_BOTTOM_LEFT – левый нижний угол.

С помощью параметра GControlPosition можно при желании указать смещение элемента управления относительно края карты (в пикселах).

мещение задается при помощи объекта GSize.

В нашем случае, мы задавали расположения элемента поиска в правом нижнем углу со смещением 10 пикселей в лево и 20 в верх.

Давайте поменяем местами элементы управления для поиска и типа карты.

В строку map.addControl(new GMapTypeControl()); перед закрывающейся скобкой с точкой запятой  нужно добавить следующий код:

, new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20))

Мы задаем смещение для элемента управления типом карты от правого нижнего угла 10 пикселей в лево и 20 в верх.

А для формы поиска изменить значения G_ANCHOR_BOTTOM_RIGHT на G_ANCHOR_TOP_RIGHT, а также величину смещения new GSize(10,20) на new GSize(10,10).

Загружаем страницу в браузере и наблюдаем

Пример API Карт Google c формой поиска - изменение положения элементов управления

Посмотреть пример в действии и полный код можно здесь.