Вывод элементов инфоблока на карту Google

Одно из самых удобных и быстрых решений

Вывод объектов из каталога на карту Google
[spoiler]
Для реализации задачи использовал стандартные компоненты БУСа.
1. catalog.section
2. map.google.view

В БУСе есть компонент, для отображения карт гугла.
На картах возможно разместить маркеры и добавить к ним описание.

Для этого нужно передать карте массив, следующего вида
маркер 1   широта    долгота   текст маркера маркер 1   широта    долгота   текст маркера
...

Подразумевается, что объект это инфоблок, который имеет свойство MAP "привязка к карте google"

Для начала необходимо создать несколько объектов и привязать их к карте.
К сожалению поиск по карте у меня работает только в админ панели. Может кто знает как это лечится

Далее необходимо создать страницу, на которой будет размещен компонент.
Размещаем на ней компонент catalog.section и настраиваем его на отображение объектов.

После этого копируем шаблон компонента, для редактирования и заменяем код в шаблоне на новый


<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();// как всегда?>
<? if(count($arResult["ITEMS"]) > 0){ // если есть объекты для отображения, то    $PLACEMARKS = array(); //Создаем массив маркеров    $i=0;    foreach($arResult["ITEMS"] as $arElement) { //получаем объект    foreach ($arElement["DISPLAY_PROPERTIES"] as $pid=>$arProperty) {       if($pid=="MAP") { //Получаем координаты объекта       $MAP = explode (",", $arProperty["VALUE"]);} // и переводим их в формат карты)          $TEXT = "<table><tr><td><a href=\"".$arElement["DETAIL_PAGE_URL"]."\"><img src=\"".$arElement['PREVIEW_PICTURE']['SRC']."\" \/></a></td><td>".$arElement["NAME"]."<br />".$arElement["PREVIEW_TEXT"]."</td></tr></table>";//составляем текстовое поле маркера. Возможно использовать html и php.            $PLACEMARKS[$i]["LON"] = $MAP[1]; //Заполняем массив маркера данными       $PLACEMARKS[$i]["LAT"] = $MAP[0]; //       $PLACEMARKS[$i]["TEXT"] = $TEXT;  //       };    $i++; //    };//переход к следующему маркеру, если он есть    };?>
<? // Массив маркеров $PLACEMARKS готов ?>     
<? // Вызываем компонент отображающий карту ?>     
<? $APPLICATION->IncludeComponent("bitrix:map.google.view",       "",       array("INIT_MAP_TYPE" => "HYBRID",          "MAP_DATA" => serialize(             array(             'google_lat' => $MAP[0], // координаты центра карты             'google_lon' => $MAP[1], // используем координаты последнего маркера             'google_scale' => 10, // масштаб карты 0-20             'PLACEMARKS' => $PLACEMARKS // подготовленный ранее массив маркеров             )          ),          "MAP_WIDTH" => "900", // Ширина карты          "MAP_HEIGHT" => "500", // Высота           "CONTROLS" => array( // отображаемые элементы карты          0 => "SMALL_ZOOM_CONTROL",          1 => "TYPECONTROL",          2 => "SCALELINE",                ),          "OPTIONS" => array(// настройки интерфейса карты          0 => "ENABLE_SCROLL_ZOOM",          1 => "ENABLE_DBLCLICK_ZOOM",          2 => "ENABLE_DRAGGING",          3 => "ENABLE_KEYBOARD",                ),          "MAP_ID" => "" // не понял зачем он нужен             ),          false,          array("ACTIVE_COMPONENT" => "Y")          );?> 
После этого вы должны увидеть карту с маркерами объектов и информацию о них.

Возможно использовать совместно с фильтром. Это позволит выбрать нужные объекты.
Также можно использовать и с компонентом catalog.link.element
Пример не претендует на оптимальность и приведен для понимания принципа работы битрикса с картами гугла.

Например можно написать свой компонент.

PS вск вышесказанное актуально и для карт яндекса