Собственный сервис поиска с помощью Google Maps

Владимир | | HTML, JavaScript, Web разработка.

Современные 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&amp;v=2&amp;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).

Или можно просто поиграться с картой 🙂

До встречи!