Мысли о программировании, жизни и христианстве.

Битрикс: Выводим адреса элементов инфоблока на одной Яндекс карте

Столкнулся в Битрикс с задачей вывода на одной карте расположения всех офисов компаний. Данные о расположении офиса хранились в переменной «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. Настройки компонента карт Яндекса можно посмотреть вот здесь.

Поделиться