В этой статье я расскажу, как можно реализовать карту с адресами магазинов в разных городах, используя API Яндекс.Карт.
В самом начале нам необходимо подготовить исходные данные и занести их в таблицу базы данных MySQL.
Для примера, это будут адреса магазинов М.Видео в нескольких городах России (Екатеринбург, Казань, Нижний Новгород, Пермь,
Самара и Санкт-Петербург).
Создадим в базе данных таблицу mvideo_shops и добавим в нее данные о магазинах.
Сделать это удобнее, используя файл mvideo_shops.sql и инструмент для администрирования базы данных MySQL – phpMyAdmin.
После этого создадим файл searcheshop.php, который будет извлекать данные о магазинах М.Видео для конкретного города.
Код файла searcheshop.php:
<?php include("bd.php"); header('Content-Type: text/html; charset=utf-8'); if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { $town = $_GET['town']; $query1= "SELECT * FROM mvideo_shops where town='$town' ORDER BY address"; $result1 = mysql_query($query1); if(mysql_num_rows($result1)>0) { while ($par1 = mysql_fetch_array($result1)){ $addressshop[] = array("id"=>$par1['id'], "town" => $par1['town'], "address" => $par1['address'], "lat" => $par1['lat'], "lon" => $par1['lon'], "rrab" => $par1['grafrab']); } $json = json_encode($addressshop); echo $json; } } ?> |
В нем мы извлекаем информацию о магазинах из базы данных и формирует ответ в формате JSON.
Файл для соединения с базой данных bd.php.
Он имеет следующий код:
<?php $sdb_name = "localhost"; //адрес сервера базы данных, обычно localhost $user_name = "root"; //логин пользователя $user_password = ""; //пароль пользователя $db_name = "ymap_bd"; //имя базы данных MySQL // соединение с сервером базы данных if(!$link = mysql_connect($sdb_name, $user_name, $user_password)) { echo "<br>Не могу соединиться с сервером базы данных<br>"; exit(); } // выбираем базу данных if(!mysql_select_db($db_name, $link)) { echo "<br>Не могу выбрать базу данных<br>"; exit(); } mysql_query('SET NAMES utf8'); ?> |
Файл map.html выводит карту с магазинами.
В начале на карту загружается информация о магазинах Екатеринбурга, но если из выпадающего списка выбрать другой город,
то на карте отобразятся магазины для этого города.
С лева от карты — список магазинов.
Щелкнув по какой-либо записи из списка, на карте отобразится местоположение этого магазина с информацией в большем масштабе.
Код файла map.html
<!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> <title>Магазины М.Видео на карте</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://api-maps.yandex.ru/1.1/index.xml? key=AAJ4GE8BAAAAOkNOJwIArpFR_w2NjeymNZKd_pJ2y53XQEMAAAAAAAAAAABqMMktH6XqA6dQaHmVCbkMNlhYfw==" type="text/javascript"></script> <style> #shopconteyner{ width: 100%; } #shops{ float:left; width: 30%; } #YMapsID{ margin-left: 40%; width: 60%; height: 600px; } </style> <script type="text/javascript"> var map; // Создание обработчика для события window.onLoad YMaps.jQuery(function () { // Создание экземпляра карты и его привязка к созданному контейнеру map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]); // Установка для карты ее центра и масштаба map.setCenter(new YMaps.GeoPoint(44.0075,56.326944), 15); //Добавляем элементы управления. map.addControl(new YMaps.TypeControl());//Тип карты, кнопочки Схема, Гибрид, Спутник map.addControl(new YMaps.ToolBar());//Тулбар, кнопки Рука, Лупа, Линейка map.addControl(new YMaps.Zoom());//Увеличение YMaps.jQuery("select").change(function () { var town = YMaps.jQuery("#selecttown :selected").val(); do_search(town); }) .change(); }); function do_search(town){ map.removeAllOverlays(); YMaps.jQuery('#shops').html(''); YMaps.jQuery.getJSON("searcheshop-2.php", {town: town}, function(json){ var src_res="<p><strong>результаты поиска: </strong></p>"; gCollection = new YMaps.GeoObjectCollection("default#nightPoint"); bounds = new YMaps.GeoCollectionBounds(); src_res=src_res+'<p><strong>Найдено объектов: '+json.length+'</strong></p>'; for (i = 0; i < json.length; i++) { var sch = i+1; var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json[i].lat,json[i].lon)); bounds.add(new YMaps.GeoPoint(json[i].lat,json[i].lon)); placemark.setIconContent(sch); placemark.description= '<div style="color:#ff0303;font-weight:bold">'+json[i].address+'</div>'; placemark.description = placemark.description+'<strong>Адрес:</strong> '+json[i].address; gCollection.add(placemark); src_res=src_res+'<p>'+sch+'. '+'<a href="#" onClick="return go_to('+json[i].lat+', '+ json[i].lon+",'"+json[i].address+"','"+json[i].rrab+"','"+json[i].id+"');"+'">'+json[i].address+'</a></p>'; } map.setBounds(bounds); map.addOverlay(gCollection); YMaps.jQuery('#shops').html(src_res); }); } function go_to(lat,lon,address,rejim,id){ map.setCenter(new YMaps.GeoPoint(lat,lon),16); map.removeAllOverlays(); var placemark=new YMaps.Placemark(new YMaps.GeoPoint(lat,lon)); placemark.name='<div style="color:#ff0303;font-weight:bold">'+address+'</div>'; placemark.description = '<div style="font-size:13px;">'; placemark.description = placemark.description+'<div>'; placemark.description = placemark.description+'<strong>Адрес:</strong> '+address+'<br>'; placemark.description = placemark.description+'<strong>Режим работы:</strong> '+rejim+'<br>'; placemark.description = placemark.description+'</div></div>'; map.addOverlay(placemark); placemark.openBalloon(); return false; } </script> </head> <body> <div id="searchform"> <select id="selecttown"> <option value="Екатеринбург">Екатеринбург</option> <option value="Казань">Казань</option> <option value="Нижний Новгород">Нижний Новгород</option> <option value="Пермь">Пермь</option> <option value="Самара">Самара</option> <option value="Санкт-Петербург">Санкт-Петербург</option> </select> </div> <div id="shopconteyner"> <div id="shops"></div> <div id="YMapsID"></div> </div> </body> </html> |
В начале мы определяем параметры нашей карты.
Функция do_search служит для отправки параметра о выбранном городе скрипту searcheshop.php, а ответные данные добавляются на карту и в список слева от нее.
Функция go_to служит показа информации об отдельном магазине на более крупном масштабе.
доброго времени суток
Уделитепару минут
У меня есть предложение я могу обговорить цену ?
Пока я не занимаюсь выполнением заказов. Вы можете написать о своем предложении на ugolsergey@gmail.com.
Это опечатка или умышленная ошибка?
YMaps.jQuery.getJSON(«searcheshop-2.php», {town: town}, function(json){
Ни какой ошибки нет, просто у меня используется другой вариант файла для формирования данных в формате JSON с помощью функции json_encode.
Доброго времени суток!
Подскажыте пожалуйста: как изменит код чтоб вместо selected были ccылки a href»» ?
Спасибо!
Все просто. Заменяем код формы выбора select на следующий:
И еще в главной функции заменяем код:
на строку кода
Посмотрите новый пример
Подскажите, пожалуйста, можно ли задавать координаты центра карты не вручную, а из MySQL?
Подскажите как сделать на сайте возможность увеличения карты на весь экран?
Вот пример
Скажите пожалуйста, немного запутался:
в файле searcheshop.php если поле town в базе данных задано под другим именем(например gorod) — то как надо поправить этот файл, чтобы все заработало? уже пробовал и так и сяк 🙁 не выводит данные 🙁
Поправить строку с запросом к таблице в бд $query1= «SELECT * FROM mvideo_shops where gorod =’$town’ ORDER BY address»;
И еще строку «town» => $par1[‘gorod’],
Огромное спасибо! Все заработало!!!
подскажите не пашет и в базе каракули
скопировал sql запрос вставил
коды вставил от страницы с базы не берутся данные
можно исходники так легче плиз если не затруднит
Подскажите пожалуйста что делать, пишет неправильный ключ!
Попробуйте версию под API 2.0 — Создание карты на сайте с адресами магазинов, с использованием API Яндекс.Карт версии 2.х – продолжение