API Яндекс.Карт создаем ссылку на страницу с картой

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

Так чтобы показать конкретное место с масштабированием карты.

Как это сделать я расскажу в данной заметке на конкретном примере.

И так у нас имеется карта Нижнего Новгорода на которой обозначены платежные терминалы «Элекснет», с использованием файла в формате YmapsML.

Исходный код примера:

 

<!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=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script> 
    <script type="text/javascript"> 
        window.onload = function () {
            var map = new YMaps.Map(document.getElementById("YMapsID"));
 
	    map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.TypeControl());
 
            map.enableScrollZoom();
 
            //Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(43.99150,56.31534), 13);
 
	// Создание YMapsML-документа и добавление его на карту
            var ml = new YMaps.YMapsML("http://webmap-blog.ru/xml/termelexnet.xml");
            map.addOverlay(ml);
 
           // Обработчик неудачного создание документа YMapsML
            YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
                alert("Ошибка: " + error);
            });
        };
    </script> 
</head> 
 
<body> 
    <div id="YMapsID" style="width:800px;height:600px"></div> 
</body> 
 
</html>

Загружая данный пример в браузере наблюдаем следующее:

 

 

Посмотреть пример в действии.

Теперь давайте изменим пример так, чтобы можно было через ссылку передавать параметры для окна открываемой карты.

Пример ссылки: http://ваш_сайт/ymap-elexnet.html#ll=43.978076,56.314382&z=17&mt=map&p=43.978076,56.314382

Здесь в ссылке после наименования страницы с картой ymap-elexnet.html идет знак #, а после него передаются параметры для окна карты:

ll – центр окна карты, значения географической долготы и широты; z – уровень масштаба; mt – тип карты (map-обычная,sat-спутниковый снимок, hib-гибридная); p – координаты точки установки маркера.

Привожу вам полный исходный код с комментариями:

 

<!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=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script> 
    <script type="text/javascript"> 
window.onload = function () {
            var map = new YMaps.Map(document.getElementById("YMapsID")),
                flagLoad = 0;
 
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.TypeControl());
 
            map.enableScrollZoom();
 
            // Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(43.99150,56.31534), 13);
 
	  // Создание YMapsML-документа и добавление его на карту
            var ml = new YMaps.YMapsML("http://webmap-blog.ru/xml/termelexnet.xml");
            map.addOverlay(ml);
 
           // Обработчик неудачного создание документа YMapsML
            YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
                alert("Ошибка: " + error);
            });
 
            // Добавляем метку в центр карты
            var placemark = new YMaps.Placemark(map.getCenter(), {draggable: 1, hasBalloon: 0});
 
            // Динамически формируем урл
            YMaps.Events.observe(map, [map.Events.Update, map.Events.MoveEnd, map.Events.ChangeType], setUrlParams);
            YMaps.Events.observe(placemark, placemark.Events.PositionChange, setUrlParams);
 
            // Функция для формирования параметров в URL'е
            function setUrlParams(obj) {
                // Включаем установку параметров после загрузки всего скрипта
                if (!flagLoad) {
                    return;
                }
                document.location.hash = '#ll=' + map.getCenter().toString() + 
                                         '&z=' + map.getZoom() + 
                                         '&mt=' + map.getType().getLayers().toString() ;
            }
 
            var hash = document.location.hash;
            if (hash) { // Если строка параметров определена
                var hash = hash.substr(1, hash.length - 1).split('&'), // Отрезаем первый символ "#" и 
                                                                       // разбиваем строку на подстроки параметр=значение
                    params = {}; // Объект будущих параметров
 
                for (var i = 0, l = hash.length, param; i < l; i++) {
                    param = hash[i].split('='); // Разбиваем параметр на имя и значение
                    if (param[0] && param[1]) {
                        params[param[0]] = param[1];
                    }
                }
 
                // Если в урле заданы необходимые параметры
                if (params.ll && params.z && params.mt && params.p) {
                    // Определяем тип карты
                    var mapType = YMaps.MapType.MAP;
                    switch (params.mt) {
 
			case 'map':
                            mapType = YMaps.MapType.MAP;
                            break;
 
                        case 'sat':
                            mapType = YMaps.MapType.SATELLITE;
                            break;
 
                        case 'hyb':
                            mapType = YMaps.MapType.HYBRID;
                            break;
                    }
                  // Центрируем карту в нужном месте
                    map.setCenter(YMaps.GeoPoint.fromString(params.ll), params.z, mapType);
 
 
                }
            }
 
            // Скрипт загружен, все параметры из URL'a применены
            flagLoad = 1;
        }
    </script> 
</head> 
 
<body> 
    <div id="YMapsID" style="width:800px;height:600px"></div> 
</body> 
 
</html>

Здесь используется функция для динамического формирования URL – setUrlParams.

Затем мы производим разбор и определение параметров из строки URL.

После этого центрируем карту в нужном месте.

Еще у нас в скрипте используется специальный флаг flagLoad, который служит признаком выполнения скрипта разбора параметров.

Остается самое простое, сформировать html-страницу со ссылками на конкретные метки на карте.

 

 

Посмотреть пример в действии.

Щелкнув по ссылке одного из адресов, откроется окно с картой центрированной в нужной точке.

 

 

Для заметки был использован код из примера по адресу http://rodlex.narod.ru/examples/center-map-from-get-params.html

 

источник http://webmap-blog.ru



API Яндекс.Карт создаем ссылку на страницу с картой - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

  Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

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

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

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