<<< Back

Получение адреса по координатам.


Logrus (2019-10-03 21:32:36):
//$params['NEW_VALUE']
//$params['SOURCE']

$lat = substr($params['NEW_VALUE'], 0, strpos($params['NEW_VALUE'], ',')); // широта
$lon = substr($params['NEW_VALUE'], strpos($params['NEW_VALUE'], ',') + 1); // долгота

if($this->getProperty('HomeDistance') > 75) { // дистанция от дома
 if($res = $this->getProperty('seenAt')) { // наличие имени установленной локации
  $this->setProperty('Location', $res);
 } else {
  $data_file = 'http://geocode-maps.yandex.ru/1.x/?geocode=E' . $lon . ',N' . $lat;
  $xml = simplexml_load_file($data_file);
  $res = $xml->{'GeoObjectCollection'}->{'featureMember'}[0]->{'GeoObject'}->{'metaDataProperty'}->{'GeocoderMetaData'}->{'AddressDetails'}->{'Country'}->{'AddressLine'};
  $res = str_replace('Свердловская область, ', '', $res);
  $this->setProperty('Location', $res);
 }
} else {
 $this->setProperty('Location', 'Дом');
 //Установим флаг "дома"
 if ($this->getProperty('gps') == 0) {
  $this->setProperty('gps', 1, 0, array('SOURCE'=>$params['SOURCE'])); 
 }
 /*
 //Сброс собрался домой
 if ($this->getProperty('isGoingHome')) {
  $this->setProperty('isGoingHome', 0);
 }
 */
 //Сброс присутствия
 $ot = $params['ORIGINAL_OBJECT_TITLE'];
 setTimeOut($ot . '_gps', "setGlobal('" . $ot . ".gps', 0);", 600);
}
(1)
 
Logrus (2019-10-03 21:54:47):

да, в самом начале вполне уместно поставить паузу
что б модуль успел все свойства записать

sleep(1);
(0)
 
Xor (2019-10-03 22:02:25):

надо, наверное, подписать, что ещё геокодирование можно получать из модуля google_location. при его использовании адрес из модуля передается в свойство юзера seenAt

(1)
 
Xor (2019-10-03 22:37:17):

ПРЕДУПРЕЖДЕНИЕ!
при настройке вызова метода при смене координат может быть превышен порог частоты запросов к серверу геолокации, яндекс меня, оказывается, банил на 4 часа((

(0)
 
newz20 (2019-10-04 23:43:25):

Посмотрел первый пост и понял что нужно еще дополнить отклонением от базовой точки (точки последних координат), а то в зданиях часто отражение сигнала идет и прыгает. Если меньше 100 метров, то не обновлять адрес. Будет время займусь

(0)
 
newz20 (2019-10-04 23:45:47):

И к первому посту еще бы вызов из метода как реализован? ко всем постам Спасибо за ваше активное участие

(0)
 
Logrus (2019-10-04 23:50:58):

вместо параметра, сделай свою переменную и значение читай из свойства, а метод привяжи к дистанции
тогда саму дистанцию можно из параметра
тут масса вариантов, можно и все геокодеры сразу сюда и т.д.

(0)
 
Logrus (2019-10-04 23:52:20):

это ж писал к обсуждению в курилке и еще не описал проверку на пустое

(0)
 
Logrus (2019-10-04 23:54:14):

соурсе в свойство без массива и это если жпс.пхп правлен, так просто выкинуть

(0)
 
2007-i (2019-10-24 12:55:41):

$res = str_replace('Свердловская область, ', '', $res);
$this->setProperty('Location', $res);

Здесь у Logrus область указана для сокращения? У меня в таком виде даже полностью пишет и Россия и область и т.д. имею ввиду не понятно где должно быть ('Свердловская область, '?
Хочу сократить надпись, вся не влезает. думаю убрать {'Country'} а там посмотрим.

(0)
 
Logrus (2019-10-24 13:24:15):

страну уберете не будет работать
а сократить надпись вырезанием, пример в первой строке, вместо моего скопируйте что вам нужно сократить
таких строк можно несколько

(1)
 
Logrus (2019-10-24 13:28:45):

$res = str_replace('Россия, ', '', $res);
$res = str_replace('ВАША область, ', '', $res);
в скобках три параметра первый вырезаемое, второй на что меняем первый, третий переменная с этой строкой

(1)
 
2007-i (2019-10-24 13:32:02):

Да, уже понял когда убрал страну ))
А за подсказку с примером спасибо!!!

(1)
 

Please login to leave comments. Join us!