Задача определить местоположение текущего пользователя и показать его на карте, с меткой. Сделать можно с помощью класса GeoIp - Пространство имён для классов для работы с геолокацией.
Определение местоположения пользователя
Для этого достаточно воспользоваться методами Manager::getGeoPositionLatitude и Manager::getGeoPositionLongitude. Просто передаем эти данные в переменные и выводим на страницу
$userLat = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLatitude();
$userLon = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLongitude();
$userCity = \Bitrix\Main\Service\GeoIp\Manager::getCityName();
echo 'Широта ' . $userLat . ', Долгота: ' . $userLon . ', В городе: ' . $userCity;
В целом, есть метод Manager::getGeoPosition - в котором содержатся сразу и долгота и широта.
Также добавил город пользователя в переменной
Выводим местоположение на карте
Дальше все просто: выводим компонент bitrix:map.yandex.view - отображение карты с сервиса Яндекс.Карты. И передаем широту и долготу в в параметр MAP_DATA
В массив $arPlacemarks дублируем широту и долготу, а также название города. Этот массив используем в параметре PLACEMARKS который отвечает за метку на карте
$userLat = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLatitude();
$userLon = \Bitrix\Main\Service\GeoIp\Manager::getGeoPositionLongitude();
$userCity = 'Вы в городе: ' . \Bitrix\Main\Service\GeoIp\Manager::getCityName();
$arPlacemarks[] = array(
"LAT" => $userLat,
"LON" => $userLon,
"TEXT" => $userCity,
);
$APPLICATION->IncludeComponent(
"bitrix:map.yandex.view",
".default",
Array(
"INIT_MAP_TYPE" => "MAP",
"MAP_DATA" => serialize(
array(
'yandex_scale' => 5,
'yandex_lat' => $userLat,
'yandex_lon' => $userLon,
'PLACEMARKS' => $arPlacemarks
)),
"MAP_WIDTH" => "100%",
"MAP_HEIGHT" => "300",
"CONTROLS" => "",
"OPTIONS" => array(0=>"ENABLE_SCROLL_ZOOM",1=>"ENABLE_DRAGGING",),
"MAP_ID" => "",
)
);
Готово, получится что-то вроде этого:
