Вы здесь

Шедевр от Google - Google Map

Всем привет!

Для начала, хочу извиниться за столь долгое мое отсутствие на сайте. Пригласили в крупный проект, какой - расскажу позже, когда работа будет завершена :) Пока лишь могу сказать, что пишу там сайт, сайт будет работать с картой от Google. О ней и хочу рассказать.

Думаю, многие слышали об этом сервисе от Гугла, многие даже частенько пользуются им. В их числе был и я: прикольно посмотреть на знакомые (да и незнакомые тоже) места с высоты. Но карта Гугла - это не просто снимки из космоса. Их команда проделала колоссальную работу! На карту нанесены названия всех улиц городов всех стран мира, для крупных городов в реальном режиме времени показываются пробки, можно просмотреть маршрут от одной точки до другой, предусмотрена возможность привязывать к местам мультимедиа-контент и многое-многое другое. Но кроме всего прочего, карту можно использовать в своих целях (правда согласно условиям пользования): строить сайты, на которых карта будет работать по вашим командам. Если вы давно мечтали сделать что-то этакое, то вперед! А я расскажу, с чего начать.

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

Первый вариант работы с картой - это вывод статического изображения местности. Например, вам нужно показать, где находится ваше предприятие. Все, что для этого нужно - вставить его координаты в ссылку вида:

http:⁄⁄maps.google.com/staticmap?center=55.03934,82.92768&zoom=14&size=512x512&5C&markers=55.03934,82.92768,blue%7C55.04934,82.92768,greeng&key=MAPS_API_KEY

где:
center=55.03934,82.92768 - координаты точки, на которую карта будет центрироваться;
zoom=14 - масштаб карты (возможен от 0 (вся планета) до 17)
size=512x512 - размер изображения в пикселях;
maptype=mobile - тип карты, в данном случае для мобильных устройств. По умолчанию идет как roadmap - обычный вид, можно упустить его;
markers=55.03934,82.92768,blues%7C55.04934,82.92768,greeng - координаты точек на карте и соответствующих им маркеров
&key=MAPS_API_KEY - ключ, который вы получите при регистрации.

По такой ссылке Гугл выдаст нам картинку такую вот:



Неплохо, неправда ли? Подробнее по статическим картам можно почитать здесь.

Но если вам этого недостаточно, тогда добро пожаловать в динамический мир карт Google. В мире этом правит JavaScript, и, если найдете с ним общий язык, сможете делать что угодно

Работа с API карт через JavaScript начинается с трех простых шагов:

1. Подключения скрипта,
2. Инициализации карты
3. Определения места, куда нужно выводить карту и собственно ее вывода. Вот как это будет выглядеть в коде:

  1. <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html</a> xmlns="<a href="http://www.w3.org/1999/xhtml">
  4. ">http://www.w3.org/1999/xhtml">
  5. </a> <head>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  7. <title>Пример API Карт Google на языке JavaScript </title>
  8. <script src="<a href="http://maps.google.com/maps?file=api&v=2&key=abcdefg"">http://maps.google.com/maps?file=api&v=2&key=abcdefg"</a>
  9. type="text/javascript"></script>
  10. <script type="text/javascript">
  11. function initialize() {
  12. if (GBrowserIsCompatible()) {
  13. var map = new GMap2(document.getElementById("map_canvas"));
  14. map.setCenter(new GLatLng(37.4419, -122.1419), 13);
  15. }
  16. }
  17. </script>
  18. </head>
  19. <body onload="initialize()" onunload="GUnload()">
  20. <div id="map_canvas" style="width: 500px; height: 300px"></div>
  21. </body>
  22. </html>

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

Я не буду рассказывать обо всех возможностях карты, т.к. есть неплохая документация по API, а также целая галерея примеров (из которых вы можете преспокойно брать код и вставлять себе на сайт), рекомендую посетить ее и посмотреть, насколько широки возможности карт и полезные ссылки.

А я лучше раскажу, как связать MySQL базу и карту. Придумал это не я, на авторство не претендую, но найти эту информацию довольно сложно, а сходу разобраться - непросто.

Создайте в MySQL табличку запросом:

  1. CREATE TABLE `markers` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `name` VARCHAR( 60 ) NOT NULL ,
  4. `address` VARCHAR( 80 ) NOT NULL ,
  5. `lat` FLOAT( 10, 6 ) NOT NULL ,
  6. `lng` FLOAT( 10, 6 ) NOT NULL ,
  7. `type` VARCHAR( 30 ) NOT NULL
  8. ) ENGINE = MYISAM ;

В ней будет информация по названию, адресу, координатам и типу объектов. Заполните ее.

Для работы с базой создаем пару php-файликов и собственно сам скрипт:

phpsqlajax_dbinfo.php для задания в нем настроек подключения к базе, и прописываем в нем логин, пароль и имя базы (также можно и MySQL-сервер прописать здесь):

  1. <?php
  2. $username="user";
  3. $password="12345";
  4. $database="map";
  5. ?>

и phpsqlajax_genxml.php для выдергивания информации из базы и передачи ее JavaScript:

  1. <?php
  2. require("phpsqlajax_dbinfo.php"); //подключили файл с настройками базы
  3.  
  4. function parseToXML($htmlStr)
  5. {
  6. $xmlStr=str_replace('<','<',$htmlStr);
  7. $xmlStr=str_replace('>','>',$xmlStr);
  8. $xmlStr=str_replace('"','"',$xmlStr);
  9. $xmlStr=str_replace("'","'",$xmlStr);
  10. $xmlStr=str_replace("&",'&',$xmlStr);
  11. return $xmlStr;
  12. }
  13.  
  14. // Открываем соединение с MySQL-сервером
  15. $connection=mysql_connect ('localhost', $username, $password);
  16. if (!$connection)
  17. {
  18. die('Нет соединения : ' . mysql_error());
  19. }
  20.  
  21. // Устанавливаем соединение с БД
  22. $db_selected = mysql_select_db($database, $connection);
  23. if (!$db_selected)
  24. {
  25. die ('Невозможно использовать БД : ' . mysql_error());
  26. }
  27.  
  28. // Выборка всех записей из таблицы markers
  29. $query = "SELECT * FROM markers ORDER BY id";
  30. $result = mysql_query($query);
  31. if (!$result)
  32. {
  33. die('Неверный запрос: ' . mysql_error());
  34. }
  35.  
  36. header("Content-type: text/xml");
  37.  
  38. // Создание XML-кода, вывод родительского элемента
  39. echo '<markers>';
  40.  
  41. // Цикл прохода по всем выбранным записи; создание узла для каждой
  42. while ($row = @mysql_fetch_assoc($result))
  43.  
  44. {
  45. // Вывод нового узла XML
  46. echo '<marker ';
  47. echo 'dev_id="' . $row['dev_id'] . '" ';
  48. echo 'date="' . parseToXML($row['date']) . '" ';
  49. echo 'time="' . parseToXML($row['time']) . '" ';
  50. echo 'lat="' . $row['lat'] . '" ';
  51. echo 'lng="' . $row['lng'] . '" ';
  52. echo '/>';
  53. }
  54.  
  55. // Конец XML-файла
  56. echo '</markers>';
  57. ?>

Сохраняем файлы в одну папку и к ним же сохраняем файл index.html со скриптом:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html</a> xmlns="<a href="http://www.w3.org/1999/xhtml"">http://www.w3.org/1999/xhtml"</a> xmlns:v="urn:schemas-microsoft-com:vml">
  4. <head>
  5. <meta http-equiv="content-type" content="text/html; charset=koi-8"/>
  6. <title>Начало работы с Google Map</title>
  7. <script src="<a href="http://maps.google.com/maps?file=api&v=2&sensor=true&key=abcdef"">http://maps.google.com/maps?file=api&v=2&sensor=true&key=abcdef"</a>
  8. type="text/javascript"></script>
  9. <script type="text/javascript">
  10. //Инициализация карты
  11. function initialize()
  12. {
  13. if (GBrowserIsCompatible())
  14. { //проверяем браузер на совместимость
  15. var map = new GMap2(document.getElementById("map_canvas")); // создаем новую карту
  16. GDownloadUrl("phpsqlajax_genxml.php", function(data)
  17. { // делаем запрос в базу через php файл и полученные данные присваиваем переменной
  18. var xml = GXml.parse(data);
  19. var markers = xml.documentElement.getElementsByTagName("marker");
  20. for (var i = 0; i < markers.length; i++)
  21. { // запускаем цикл по расстановке маркеров для точек из базы
  22. var time = markers[i].getAttribute("time");
  23. var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
  24. parseFloat(markers[i].getAttribute("lng")));
  25. var marker = new GMarker(point);
  26. map.addOverlay(marker); // рисуем маркер на карте
  27. }
  28. map.setCenter(point, 13); // центрируем карту (обязательный метод) по последнему маркеру
  29. // добавляем инструменты по работе с картой
  30. map.addControl(new GLargeMapControl());
  31. map.addControl(new GScaleControl());
  32. map.addControl(new GMapTypeControl());
  33. map.addControl(new GOverviewMapControl());
  34. });
  35. }
  36. }
  37. </script>
  38. </head>
  39. <body onload="initialize()" onunload="GUnload()">
  40. <div id="map_canvas" style="width: 100%; height: 100%; position: absolute;
  41. background-color: rgb(229, 227, 223);"></div>
  42. </body>
  43. </html>

Если теперь открыть в браузере файл index.html, то увидите карту с расставленными на ней маркерами в точках, которые прописаны в базе.

Вообще, маркеры, если их планируется много, а также если планируется работа с ними, лучше создавать не методом addOverlay, а через специальный иснтрумент - Диспетчер Маркеров (подробное описание (на английском) здесь).

Вот в принципе и все для начала. А дальше уже вникайте в описание команд (кстати там попадаются ошибки) и смотрите примеры :) Если будут вопросы - пишите в комменты, будем вместе разбираться :) Удачи!