Современные web сервисы позволяют с минимальными усилиями существенно расширить функциональность сайта.
Сегодня речь пойдет об использовании карт от Google на собственном сайте.
Для начала определимся с задачей.
Допустим, нам нужно сделать поиск по картам. Т.е. посетитель вводит название города в поле формы, нажимает кнопку «Найти».
После этого наше приложение показывает соответствующую карту.
В общем, должно получиться что-то похожее на эту страницу.
Переходим к реализации.
Для использования карт Google на собственном сайте нужно получить специальный ключ (AJAX Search API Key).
Процедура предельно простая. Заходим на страницу регистрации, соглашаемся с лицензией, вводим адрес сайта в форму и жмем кнопку «Generate API Key».
В результате вы получите длинную строку с ключом.
Размещаем карту на странице.
Эта операция выполняется в два шага.
1) Подготавливаем на странице блок для карты
<div id="map_canvas" style="width: 600px; height: 400px"></div>
Здесь нужно только задать его размеры (в данном случае — 600х400 px).
2) В заголовке страницы подключаем Google API и небольшой скрипт, который и создает карту
<script src="http://maps.google.com/maps?file=api&v=2&key=ваш_ключ" type="text/javascript"></script> <script type="text/javascript"> var map; function initialize() { //создаем объект для работы с картой map = new GMap2(document.getElementById("map_canvas")); if (GBrowserIsCompatible()) { //устанавливаем координаты и начальное приближение map.setCenter(new GLatLng(50.453629, 30.502838), 13); //добавляем шкалу зума map.addControl(new GLargeMapControl()); //добавляем переключатель типа карт (Карта, Спутник, Гибрид) map.addControl(new GMapTypeControl()); //указываем тип карты по-умолчанию (Спутник) map.setMapType(G_SATELLITE_MAP); } } </script>
Этот скрипт создает объект типа GMap2
и связывает его с блоком, в котором должна быть размещена карта (map_canvas
).
После этого с помощью функции GBrowserIsCompatible()
мы проверяем, совместим ли браузер с Google Maps и если да, то выполняем несколько начальных настроек.
Метод setCenter
указывает какая точка на должна находится в центре карты и величину приближения (зума). В этом примере я указал координаты Киева. Подробнее на них мы остановимся чуть позже.
Метод addControl
добавляет на карту различные элементы управления. В данном случае мы добавили блок навигации и зума (GLargeMapControl
) и переключатель типа карт (GMapTypeControl
).
И, наконец, устанавливаем тип карты, которая используется по-умолчанию (G_SATELLITE_MAP
– спутниковая карта).
Добавляем форму поиска
<label for="sityname">Название города: </label> <input type="text" name="sityname" id="sityname" /> <input type="button" onclick="getAdress()" value="Найти" />
Тут все предельно просто. Поле для ввода адреса и кнопка «Найти».
Теперь немного теории.
Преобразования адреса в географические координаты называется геокодингом (Geocoding). В Google Maps для эту операцию выполняет специальный объект GClientGeocoder
.
Т.е. нам нужно выполнить такие операции.
1) Создать объект GclientGeocoder
.
2) С помощью его метода getLatLng
определить координаты.
3) Установить на карте маркер в полученной точке.
4) Добавить на карту надпись.
Все описанные операции выполняются двумя небольшими функциями.
var geocoder = new GClientGeocoder(); function getAdress() { var address = document.getElementById("sityname").value; geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " не найден"); } else { geocoder.getLocations(address, addAdr); } } ); } function addAdr(response) { //удаляем слои, если они есть map.clearOverlays(); if (!response || response.Status.code != 200) { alert("\"" + address + "\" не найден"); } else { //создаем объект типа GLatLng и надпись place = response.Placemark[0]; point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]); marker = new GMarker(point); //размещаем надпись на карте map.addOverlay(marker); //добавляем текст на надпись marker.openInfoWindowHtml(place.address + '<br />' + 'Широта: ' + place.Point.coordinates[1] + '<br />' + 'Долгота: ' + place.Point.coordinates[0]); } }
При нажатии на кнопку «Найти» вызывается функция getAdress
, которая вызывает метод getLatLng
. В его первом параметре передается введенный пользователем адрес, а во втором объявлена анонимная функция, которая будет вызвана полсе получения результатов обработки адреса.
Эта функция в качестве параметра получает точку с координатами. В принципе, этого достаточно, чтобы показать нужную карту, но мы можем получить более подробную информацию с помощью метода getLocations
.
Этот метод также как и getLatLng
в первом параметре получает адрес, а во втором – имя функции, которая будет вызвана после получения данных. В данном примере это addAdr
.
Функция addAdr
получает результат выполнения метода getLocations
, т.е. структуру с данными. После мы просто устанавливаем на карте маркер (метод addOverlay
объекта GMap2
) и надпись с текстом (метод openInfoWindowHtml
).
Заключение
В этом примере показаны далеко не все возможности Google Maps. API довольно большой и постоянно развивается.
Главная проблема в том, что далеко не для всех городов СНГ существуют обычные карты (с названиями улиц). Спутниковые фотографии, конечно, есть, но по ним не всегда удобно ориентироваться. Кстати, именно по этой причине я по-умолчанию установил тип карты G_SATELLITE_MAP
.
В этом плане очень привлекательно выглядят карты Яндекса. Например, карта Киева у них есть 🙂 . Но API они открыли совсем недавно и, насколько я знаю, у них были проблемы с кириллицей (будем надеяться, что это быстро исправят).
В общем, разместить на своем сайте интерактивную карту на сегодняшний день не проблема.
Скачать пример
Вы можете скачать архив с примером, приведенным в этой статье. Для использования вам нужно будет заменить в файле index.html строку your_google_api_key
на ваш ключ (API Key).
Или можно просто поиграться с картой 🙂
До встречи!