Битрикс: Выводим адреса элементов инфоблока на одной Яндекс карте
Столкнулся в Битрикс с задачей вывода на одной карте расположения всех офисов компаний. Данные о расположении офиса хранились в переменной «MAP» типа «Привязка к Яндекс. Карте» свойств элемента инфоблока «Офисы». В процессе решения родился следующий код:
// Берём все значения инфоблока с ID равным 10. Вам нужно подставить свой ID.
$mas = CIBlockElement::GetList(array(), array( "IBLOCK_ID" => 10 ));
while ( $oElement = $mas->GetNextElement() ) {
$aElement['PROPERTIES'] = $oElement->GetProperties(); // Берём значения элемента инфоблока
// Координаты хранятся в переменной MAP (подставьте вашу переменную) через запятую, разделим их
$arTmp = explode(',', $aElement['PROPERTIES']['MAP']['VALUE']);
//Подготовка карты
$arResult['POSITION']['yandex_scale'] = "5"; // Подбираем размер карты, чтобы поместились все маркеры
// В yandex_lat и yandex_lon заносим координаты центральной точки карты
$arResult['POSITION']['yandex_lat'] = $arTmp[0]; // В нашем случае координаты первого элемента инфоблока
$arResult['POSITION']['yandex_lon'] = $arTmp[1];
//Собираем маркеры
$arResult['POSITION']['PLACEMARKS'][] = array(
'LON' => $arTmp[1], // LON и LAT - координаты маркера
'LAT' => $arTmp[0],
);
}
// Выводим карту с метками через компонент Битрикса для карт Яндекса (Яндекс.Карты: настраиваемая карта)
$APPLICATION->IncludeComponent(
"bitrix:map.yandex.view",
"",
Array(
"INIT_MAP_TYPE" => "MAP",
"MAP_DATA" => serialize($arResult['POSITION']),
"MAP_WIDTH" => "978", // Ширина карты
"MAP_HEIGHT" => "400", // Высота карты
"CONTROLS" => array("ZOOM", "TYPECONTROL", "SCALELINE"),
"OPTIONS" => array("ENABLE_SCROLL_ZOOM", "ENABLE_DBLCLICK_ZOOM", "ENABLE_DRAGGING"),
)
);
P.S. Настройки компонента карт Яндекса можно посмотреть вот здесь.