Страница 1 из 4

Геокодер

Добавлено: Вт окт 14, 2014 2:18 pm
ErmolenkoM
Геокодирование - получение словесного описания местоположения по ГПС координатам.
В качестве провайдера будем пользовать Яндекс.
http://api.yandex.ru/maps/doc/geocoder/ ... /About.xml
При большом желании - можно и Гугл, но Яндекс вроде круче :-)

1. Создадим пользовательскую функцию в var/www/lib/myuserfunction.php
Если у вас нет этого файла - самое время его создать.

Код: Выделить всё

function Getgeocode($lon, $lat)  {
  $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'};
  return $res;
}
 
тут все прозрачно: передаем координаты и парсим XML возвращая адрес.

2. Админка/Объекты/Users/Свойства - Создаем свойство Location, в методе запускаемом при изменении указываем SetLocation
3. Админка/Объекты/Users/Методы - Создаем метод SetLocation

Код: Выделить всё

$Coordinates=$this->getProperty("Coordinates");
$lat=substr($Coordinates,0,strpos($Coordinates,","));
$lon=substr($Coordinates,strpos($Coordinates,",")+1);
$this->setProperty("Location",Getgeocode($lon,$lat));
 
4. Админка/GPS-трекер/Устройства - привязываем устройство к пользователю.
5. В скрипте "Где Вася?" пишем

Код: Выделить всё

say(gg('vasia.Location'));
 
Т.о. Алиса может проговаривать голосом местонахождение любого члена семьи. По требованию или по времени - это уже зависит от фантазии.
Еще можно анализировать свойство seenAt (это заданные локации: Дом, Работа, Школа,...) и использовать Location только если там пусто.

Ну или этот код перенести в gps.php, но это если Сергей посчитает это целесообразным. При частой смене координат, и если пользователей будет много - можно заспамить яндекс.
Так что в этом случае SetLocation нужно дергать руками по требованию получить координаты.

Добавил в готовых решениях клона темы с рабочим гуглом и парой модификаций viewtopic.php?f=27&t=6443

Re: Геокодер

Добавлено: Вт окт 14, 2014 5:56 pm
sergejey
Спасибо, хороший пример.
Я думал о подобном но именно из-за того, чтобы не заспамить запросами сервер яндекса (или гугла -- у него похожее API есть) решил не вставлять. Поэтому рекомендую использовать эту функцию как раз по запросу.

Re: Геокодер

Добавлено: Чт сен 22, 2016 10:26 am
VladPTZ
Сделал все как по инструкции.
Не заработало, картинку полагаю.
Как вылечить?

Re: Геокодер

Добавлено: Чт сен 22, 2016 11:11 am
Dark_Veter
Скорее всего в начале файла myuserfunction.php вы забыли написать <?php

Re: Геокодер

Добавлено: Чт сен 22, 2016 5:20 pm
Vit
а в виндовс версии как прикрутить? куда функцию вставить?

Re: Геокодер

Добавлено: Чт сен 22, 2016 5:25 pm
Dark_Veter
Vit писал(а):а в виндовс версии как прикрутить? куда функцию вставить?
Так все так же вроде, функцию вставить похоже надо в папка_с_мжд\lib\myuserfunction.php

Re: Геокодер

Добавлено: Вс янв 15, 2017 2:05 am
slgeo
ErmolenkoM писал(а): .....
2. Админка/Объекты/Users/Свойства - Создаем свойство Location, в методе запускаемом при изменении указываем SetLocation
....
Поправкам потомкам )

2. Админка/Объекты/Users/Свойства - Создаем свойство Location, в свойстве Coordinates указываем метод при изменении - SetLocation

PS И не забываем в Настройки-Пользователи присваивать соответствующий объект из Админка/Объекты/Users

Re: Геокодер

Добавлено: Ср янв 10, 2018 2:02 pm
Samir77
ErmolenkoM писал(а):Геокодирование - получение словесного описания местоположения по ГПС координатам.
В качестве провайдера будем пользовать Яндекс.
http://api.yandex.ru/maps/doc/geocoder/ ... /About.xml
При большом желании - можно и Гугл, но Яндекс вроде круче :-)

1. Создадим пользовательскую функцию в var/www/lib/myuserfunction.php
Если у вас нет этого файла - самое время его создать.

Код: Выделить всё

function Getgeocode($lon, $lat)  {
  $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'};
  return $res;
}
тут все прозрачно: передаем координаты и парсим XML возвращая адрес.

2. Админка/Объекты/Users/Свойства - Создаем свойство Location, в методе запускаемом при изменении указываем SetLocation
3. Админка/Объекты/Users/Методы - Создаем метод SetLocation

Код: Выделить всё

$Coordinates=$this->getProperty("Coordinates");
$lat=substr($Coordinates,0,strpos($Coordinates,","));
$lon=substr($Coordinates,strpos($Coordinates,",")+1);
$this->setProperty("Location",Getgeocode($lon,$lat));
4. Админка/GPS-трекер/Устройства - привязываем устройство к пользователю.
5. В скрипте "Где Вася?" пишем

Код: Выделить всё

say(gg(vasia.Location));
Т.о. Алиса может проговаривать голосом местонахождение любого члена семьи. По требованию или по времени - это уже зависит от фантазии.
Еще можно анализировать свойство seenAt (это заданные локации: Дом, Работа, Школа,...) и использовать Location только если там пусто.

Ну или этот код перенести в gps.php, но это если Сергей посчитает это целесообразным. При частой смене координат, и если пользователей будет много - можно заспамить яндекс.
Так что в этом случае SetLocation нужно дергать руками по требованию получить координаты.


Здравствуйте.. А не подскажите как пользовательскую функцию но под гугл?? Заранее благодарен за ответ!))

Re: Геокодер

Добавлено: Ср янв 10, 2018 2:36 pm
nick7zmail

Re: Геокодер

Добавлено: Ср янв 10, 2018 2:52 pm
directman66
у меня в конекте есть готовый скрипт через карты гугл

https://connect.smartliving.ru/profile/ ... ripts.html название скрипта getaddrfromcoord