Осуществить поиск по карте, созданной с использованием API Google Maps, можно четырьмя различными способами
- С помощью формы локального поиска, которую мы размещаем на самой карте
- Используя форму поиска, размещенную вне окна карты
- Используя геокадирование
- Реализация процедуры поиска по пользовательским данным.
В этой заметке я подробно рассмотрю первые три способа.
А в следующей заметке я расскажу, как реализовать поиск по данным пользователя.
И так с начала мы возьмем пример кода для создания карты с элементами управления.
Полный код примера:
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN””http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”><html xmlns=”http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8?"/> <title>Пример API Карт Google на языке JavaScript</title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAACHCJdlgAEGcD_flKUFEmVhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTeukKcKHF3ezmjTB0q6gzSBmoIUQ" type="text/javascript"></script> <script type="text/javascript"> function initialize() {if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(56.32811,44.0), 13); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); } } </script> </head> <body onload="initialize()" onunload="GUnload()"> <div id="map_canvas" style="width: 800px; height: 600px"></div> </body> </html> |
Рассмотрим, как добавить форму поиска на карту
Для этого нам необходимо ввести в наш код примера несколько строк.
В раздел HEAD после ввода ключа к API включаем следующие строки:
<!-- @import url("http://www.google.com/uds/css/gsearch.css"); @import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css"); } --> <script src="http://www.google.com/uds/api?file=uds.js&v=1.0" type="text/javascript"><!--mce:2--></script> <script src="http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js" type="text/javascript"><!--mce:3--></script> |
Здесь мы добавляем стили для отображения формы поиска и адрес скрипта производящего поиск.
И после строки map.addControl(new GMapTypeControl()); добавляем код:
map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20))); |
Здесь мы добавляем форму поиска на карту, задаем позицию расположения – в правом нижнем углу и определяем отступы в лево 10 пикселей и снизу 20 пикселей.
А затем еще одну строку кода
GSearch.setOnLoadCallback(LoadMapSearch); |
Перед закрывающимся тегом </script>
Она определяет вызов метода после того, как поиск будет завершен.
Загрузив пример в браузере мы увидим следующее
Рассмотрим следующий вариант реализации поиска – используем форму поиска, размещенную вне окна карты.
В этом варианте для реализации применяется AJAX API поиска Google – это библиотека JavaScript, позволяющая встраивать поиск Google на веб-страницы и в другие веб-приложения.
Описание данyого API располагается по адресу: http://code.google.com/intl/ru-RU/apis/ajaxsearch/
Для использования AJAX API поиска Google необходимо получить специальный ключ для Вашего сайта на странице по адресу http://code.google.com/intl/ru/apis/ajaxsearch/signup.html
Приведу код примера:
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN””http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”><html xmlns=”http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8?"/> <title>Пример API Карт Google на языке JavaScript </title> <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAACHCJdlgAEGcD_flKUFEmVhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTeukKcKHF3ezmjTB0q6gzSBmoIUQ" type="text/javascript"></script> <script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAACHCJdlgAEGcD_flKUFEmVhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTeukKcKHF3ezmjTB0q6gzSBmoIUQ" type="text/javascript"></script> <script src="http://www.google.com/uds/solutions/mapsearch/gsmapsearch.js" type="text/javascript"></script> <link rel="nofollow" href="http://www.google.com/uds/css/gsearch.css" rel="stylesheet" type="text/css"/> <link rel="nofollow" href="http://www.google.com/uds/solutions/mapsearch/gsmapsearch.css" rel="stylesheet" type="text/css"/> <style type="text/css"> body, table, p{ background-color: white; font-family: Arial, sans-serif; font-size: 13px; } #mapsearch { width : 800px; height: 550px; margin-left: 20px; padding: 4px; border : 1px solid #f9f9f9; } .gsmsc-mapDiv { height:530px; } .gsmsc-idleMapDiv { height:550px; } </style> <script type="text/javascript"> function LoadMapSearch() { var options = { title : "Нижний Новгород" } new GSmapSearchControl( document.getElementById("mapsearch"), "Нижний Новгород", options ); } GSearch.setOnLoadCallback(LoadMapSearch); </script> </head> <body> <div id="mapsearch">Загрузка...</div> </body> </html> |
Здесь в разделе HEAD после ввода ключа к API Google Maps добавлен следующий код:
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAACHCJdlgAEGcD_flKUFEmVhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTeukKcKHF3ezmjTB0q6gzSBmoIUQ" type="text/javascript"></script> <script src="http://www.google.com/uds/solutions/mapsearch/gsmapsearch.js" type="text/javascript"></script> <link rel="nofollow" href="http://www.google.com/uds/css/gsearch.css" rel="stylesheet" type="text/css"/> <link rel="nofollow" href="http://www.google.com/uds/solutions/mapsearch/gsmapsearch.css" rel="stylesheet" type="text/css"/> |
Здесь первая строка ключ к AJAX API поиска Google, затем подключается сам скрипт поиска и стили для него
Самое интересное заключено в функции LoadMapSearch
Переменной options мы задаем параметры для содежимого балуна метки.
А параметр GSmapSearchControl служит для задания элемента страницы для вывода результатов поиска и там же задаем первоначальное значание для поиска – Нижний Новгород.
Загрузив данный пример в браузере мы увидим следующее
Посмотреть код примера в действии
И последний способ – использование геокодирования.
Геокодирование — процесс превращения строкового почтового адреса в координаты. А также, обратная операция.
Описание сервиса геокодирования расположено по адресу: http://code.google.com/intl/ru/apis/maps/documentation/services.html
Возьмем для изменения наш первоначальный пример кода для вывода карты с элементами управления.
В функцию initialize перед строкой добавления элемента масштабирования карты допишем строку
var geocoder = new GClientGeocoder();
И еще добавим функцию обработки результатов геокодирования showAddress.
function showAddress(address) { if (geocoder) { geocoder.getLatLng( address, function(point) { if (!point) { alert(address + " not found"); } else { map.setCenter(point, 17); var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } ); } } |
В раздел BODY добавляем код для ввода адреса для поиска.
После добавления код должен иметь следующий вид:
<body onload="initialize()" onunload="GUnload()"> <form action="#" onsubmit="showAddress(this.address.value); return false"> <p> <input type="text" size="60" name="address" value="Нижний Новгород, ул. Белинского, 59" /> <input type="submit" value="Найти" /> </p> <div id="map_canvas" style="width: 800px; height: 600px"></div> </form> </body> </html> |
Загружаем код примера в браузере и наблюдаем
Посмотреть код примера в действии
В следующей заметке я рассмотрю вопрос о том, как реализовать поиск по данным пользователя.
Здраствуйте, а можете подсказать, например есть страница, в одном месте я прописываю например слово Москва и у меня в iframe- загружается карта google с меткой в москве — как это можно реализовать?