Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов на одну карту

Просмотров: 18667

Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоблоке некоторое количество элементов, в принципе любое. Пусть, это будут офисы продаж. Задача: вывести все офисы продаж на карту с метками и основными данными о точке- в бубл (или как, там называется эта штука- при клике на метку).

Другой вариант вывода меток Определить местоположение пользователя и показать магазины поблизости.

Собираем все координаты и нужные данные для карты

Для начала нам нужно собрать все координаты, всех элементов в один массив. Для этого, пробежимся методом CIBlockElement::GetList - по всем элементам этого инфоблока. Получив данные из свойства "Привязка к яндекс картам" (в моем случае, его код ATT_YA_MAP) и название элемента.

$iblock_id = 10; // ID инфоблока с кторым работаем
$mapData = CIBlockElement::GetList(
    Array("ID" => "ASC"),
    Array("IBLOCK_ID" => $iblock_id),
    false,
    false,
    Array(
        'ID',
        'NAME',
        'PROPERTY_ATT_YA_MAP',
        'PROPERTY_ATT_PHONE',
    )
);
while ($ar_fields = $mapData->GetNext()) {
    $onMap = explode(",",$ar_fields['PROPERTY_ATT_YA_MAP_VALUE']);
    $mapLAT = $onMap[0];
    $mapLON = $onMap[1];
    $arPlacemarks[] = array(
        "LAT" => $mapLAT,
        "LON" => $mapLON,
        "TEXT" => $ar_fields["NAME"] . $ar_fields["PROPERTY_ATT_PHONE_VALUE"],
    );
}

Пояснения к тому что происходит:

  • В свойстве "Привязка к яндекс картам", данные хранятся в виде строки с широтой и долготой, указанные через запятую.
  • Мы, с помощью функции explode, разбиваем эту строку на массив $onMap. Запятую используем как разделитель.
  • В переменные $mapLAT и $mapLON загоняем широту и долготу (елементы массива $onMap) соответственно
  • Создаем массив $arPlacemarks в который передаем широту и долготу. В элемент "TEXT" передали название элемента и номер телефона (из свойства элемента инфоблока - ATT_PHONE)

Из элемента массива $arPlacemarks "TEXT" - как раз и собираются данные для бабла (и как, там называется эта штука- при клике на метку).

Выводим все точки на одну Яндекс карту

Дальше, просто выводим стандартный компонент "bitrix:map.yandex.view" и передаем массив $arPlacemarks в параметр компонента "MAP_DATA" (превращая массив в serialize строку)

 $APPLICATION->IncludeComponent(
    "bitrix:map.yandex.view",
    "",
     Array(
        "INIT_MAP_TYPE" => "MAP",
        "MAP_DATA" => serialize(array('yandex_scale' => 3, 'PLACEMARKS' => $arPlacemarks)),
        "MAP_WIDTH" => "100%",
        "MAP_HEIGHT" => "350",
        "CONTROLS" => array("ZOOM", "MINIMAP", "TYPECONTROL", "SCALELINE"),
        "OPTIONS" => array("DESABLE_SCROLL_ZOOM", "ENABLE_DBLCLICK_ZOOM", "ENABLE_DRAGGING"),
         "MAP_ID" => ""
    ),
false

В общем-то и все. Должна вывестись единая Яндекс карта, со всеми метками из элементов нужного инфоблока.

Метки на карте из инфоблока

Сфокусировать карту в области точек.

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

Можно передать в "MAP_DATA" позицию последней (из GetList) точки, просто добавив:


"MAP_DATA" => serialize(
    array(
        'yandex_lat' => $onMap[0], 
        'yandex_lon' => $onMap[1], 
        'yandex_scale' => 9, 
        'PLACEMARKS' => $arPlacemarks
    )
),

Мы их передали в yandex_lat и yandex_lon. А параметр yandex_scale - это приближение карты (по моему: 0 - максимально близко и 30- максимально высоко)

Αнтон Μаксимов 26.10.2019
это с применением стандартной функции настраиваемой яндекс-карты?
а как заменить эти типовые точки на собственные, если требуется разделять объекты по значимости ??
Михаил Базаров 26.10.2019
Цитата
Αнтон Μаксимов написал:
это с применением стандартной функции настраиваемой яндекс-карты?
а как заменить эти типовые точки на собственные, если требуется разделять объекты по значимости ??
Тут, пока не подскажу. Чуть позже, буду решать эту задачку. Если не забуду, допишу в эту заметку
Αнтон Μаксимов 26.10.2019
по идее - работающее решение у меня под руками есть
но оно готовое и не мое.. придется копаться в коде значит..
Михаил Базаров 12.05.2022
Цитата
Αнтон Μаксимов написал:
по идее - работающее решение у меня под руками есть
но оно готовое и не мое.. придется копаться в коде значит..

Вот здесь, рассказал как менять точки на карте. Выбирать из уже заложенных в API яндекс карт и как поменять метку на свою собственнную.
https://camouf.ru/blog-note/12768/

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Умный фильтр во всплывающей панели на мобильных. Просмотров: 2358 Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень кра... Композитный сайт на 1С-Битрикс Просмотров: 3600 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 6372 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8715 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 3204 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Простые калькуляторы в карточке товара каталога на Битрикс Просмотров: 16176 На одном из создаваемых сайтов было необходимо сделать небольшой калькулятор и предварител... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 35932 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1116 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Запретить указание количества товаров, добавляемого в корзину, в опре... Просмотров: 83 Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, ... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13606 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Список новостей с автопрокруткой через overflow:scroll Просмотров: 6137 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Хостинг панель BrainyCp: оптимизация под 1С-битрикс Просмотров: 8131 В этой видео-заметке расскажу как установить и оптимизировать панель управления сервером B... Глобальные фильтры на всякие случаи жизни Просмотров: 47105 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 18107 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 1186 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 108813 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Как вывести картинки к разделам на базе _ext меню Просмотров: 7642 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 17017 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18758 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 6171 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во...