Геокодер

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Контактная информация:

Геокодер

Сообщение 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
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Контактная информация:

Re: Геокодер

Сообщение sergejey »

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
VladPTZ
Сообщения: 397
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск

Re: Геокодер

Сообщение VladPTZ »

Сделал все как по инструкции.
Не заработало, картинку полагаю.
Как вылечить?
Вложения
2016-09-22_10-23-23.png
2016-09-22_10-23-23.png (123.64 КБ) 15113 просмотров
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск

Re: Геокодер

Сообщение Dark_Veter »

Скорее всего в начале файла myuserfunction.php вы забыли написать <?php
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm

Re: Геокодер

Сообщение Vit »

а в виндовс версии как прикрутить? куда функцию вставить?
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск

Re: Геокодер

Сообщение Dark_Veter »

Vit писал(а):а в виндовс версии как прикрутить? куда функцию вставить?
Так все так же вроде, функцию вставить похоже надо в папка_с_мжд\lib\myuserfunction.php
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Аватара пользователя
slgeo
Сообщения: 551
Зарегистрирован: Чт фев 05, 2015 2:35 pm
Откуда: РнД

Re: Геокодер

Сообщение slgeo »

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

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

PS И не забываем в Настройки-Пользователи присваивать соответствующий объект из Админка/Объекты/Users
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
Аватара пользователя
Samir77
Сообщения: 95
Зарегистрирован: Чт фев 02, 2017 7:30 pm

Re: Геокодер

Сообщение 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 нужно дергать руками по требованию получить координаты.


Здравствуйте.. А не подскажите как пользовательскую функцию но под гугл?? Заранее благодарен за ответ!))
ASUS ASPIRE 5739G Windows 7 + Raspberry Pi3 + Broadlink + Sonoff
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

Re: Геокодер

Сообщение nick7zmail »

Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Контактная информация:

Re: Геокодер

Сообщение directman66 »

у меня в конекте есть готовый скрипт через карты гугл

https://connect.smartliving.ru/profile/ ... ripts.html название скрипта getaddrfromcoord
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить