- PVSM.RU - https://www.pvsm.ru -
С недавних пор, не по собственной воле, пришлось использовать 1С Битрикс. Не скажу, что получил эстетическое удовольствие от работы с системой, однако ожидал худшего. Итак, проблемы:
После очередного редактирования этой страницы (изменение информации и добавление новых местоположений) мне показалось, что такой подход не совсем логичен и следовало бы оптимизировать этот процесс.
Поставленная цель была такова: автоматизировать процесс вывода виджета карт. Для реализации были поставлены следующие задачи:
Таблица с информацией для виджета получилась следующая:
Поле | Тип данных |
ID | int |
Наименование | varchar(30) |
Адрес | text |
yandex_lat | varchar(20) |
yandex_lon | varchar(20) |
LAT | varchar(20) |
LON | varchar(20) |
Определение местоположения было отдано геокодеру яндекса [1]. Не сразу бало понятно, каким образом формируются координаты для виджета. Оказалось, что координаты получаются из верхней границы области, внутри которой объект рекомендуется показать на карте и позицией объекта. Разобравшись, был собран следующий скрипт:
<?php
//функция получения XML массива с наиденной информацией по заданному метоположению
function get_XML($adress){
$xml = simplexml_load_file('https://geocode-maps.yandex.ru/1.x/?geocode='.$adress);
return $xml;
}
//задаем метоположение
$adr = 'с. Барда, ул. Ленина, д. 52г ';
$name_adr = 'Филиал';
$urlXML = 'https://geocode-maps.yandex.ru/1.x/?geocode='.$adr;
//получаем XML массив
$array = get_XML($adr);
//Координаты центра объекта
$pos = $array->GeoObjectCollection->featureMember['0']->GeoObject->Point->pos;
echo "<b>pos</b>: $pos n";
//Верхняя граница области, внутри которой объект рекомендуется показать на карте
$upperCorner = $array->GeoObjectCollection->featureMember['0']->GeoObject->boundedBy->Envelope->upperCorner;
echo "<b>upperCorner</b>: $upperCorner n";
//Нижняя граница области, внутри которой объект рекомендуется показать на карте
$lowerCorner = $array->GeoObjectCollection->featureMember['0']->GeoObject->boundedBy->Envelope->lowerCorner;
echo "<b>lowerCorner</b>: $lowerCorner n";
// Разделение строки на массив функцией explode
$posArr = explode(" ",$pos);
$posLeft = explode(".",$posArr[0]);
$posRight = explode(".",$posArr[1]);
$upperCornerArr = explode(" ",$upperCorner);
$upperCornerLeft = explode(".",$upperCornerArr[0]);
$upperCornerRight = explode(".",$upperCornerArr[1]);
$lowerCornerArr = explode(" ",$lowerCorner);
$lowerCornerLeft = explode(".",$lowerCornerArr[0]);
$lowerCornerRight = explode(".",$lowerCornerArr[1]);
$urlMap = "https://maps.yandex.ru/?text=".$posRight[0].'.'.$posRight[1].$upperCornerRight[0].$upperCornerRight[1].' '.$posLeft[0].'.'.$posLeft[1].$upperCornerLeft[0].$upperCornerLeft[1];
/*
LAT - RIGHT
LON - LEFT
*/
$yandex_lat = $posRight[0].'.'.$posRight[1].$upperCornerRight[0].$upperCornerRight[1];
$yandex_lon = $posLeft[0].'.'.$posLeft[1].$upperCornerLeft[0].$upperCornerLeft[1];
$LON = $posLeft[0].'.'.$posLeft[1].$lowerCornerLeft[0].$lowerCornerLeft[1];
$LAT = $posRight[0].'.'.$posRight[1].$lowerCornerRight[0].$lowerCornerRight[1];
$TEXT = $name_adr;
?>
После получения координат данные записываются в базу. Таким образом, 2 задачи решены.
И в завершении, для экономии потребляемых ресурсов пользователя, использовался slideToggle:
<script type="text/javascript">
function slideTopic(comments,titleTopic) {
$(comments).slideToggle(250);
if ($(titleTopic).attr('title')=='Скрыть полную информацию')
$(titleTopic).attr('title','Показать полную информацию');
else
$(titleTopic).attr('title','Скрыть полную информацию');
};
</script>
Автор: mrjunk
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/yandeks-kartyi/108811
Ссылки в тексте:
[1] геокодеру яндекса: https://tech.yandex.ru/maps/doc/geocoder/desc/concepts/response_structure-docpage/
[2] Этот же скрипт на JS : https://github.com/topolskij/bitrix-yandex-map/blob/master/maps-js.html
[3] Источник: http://habrahabr.ru/post/275021/
Нажмите здесь для печати.