Геокодер

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

Модератор: immortal

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

Геокодер

Сообщение ErmolenkoM » Вт окт 14, 2014 2:18 pm

Геокодирование - получение словесного описания местоположения по ГПС координатам.
В качестве провайдера будем пользовать Яндекс.
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
За это сообщение автора ErmolenkoM поблагодарили (всего 7):
Amarok (Пт мар 06, 2015 11:40 am) • VladPTZ (Чт сен 22, 2016 11:12 am) • slgeo (Вс янв 15, 2017 2:05 am) • Berkseo (Ср фев 15, 2017 11:42 pm) • C_3AXAPOB (Сб мар 11, 2017 1:07 pm) • Samir77 (Ср янв 10, 2018 1:57 pm) • Ron (Чт янв 11, 2018 12:11 pm)
Рейтинг: 8.14%
aka msh555
Cubian на Cubietruck, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Геокодер

Сообщение sergejey » Вт окт 14, 2014 5:56 pm

Спасибо, хороший пример.
Я думал о подобном но именно из-за того, чтобы не заспамить запросами сервер яндекса (или гугла -- у него похожее API есть) решил не вставлять. Поэтому рекомендую использовать эту функцию как раз по запросу.
За это сообщение автора sergejey поблагодарил:
Samir77 (Ср дек 20, 2017 12:07 am)
Рейтинг: 1.16%

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

Re: Геокодер

Сообщение VladPTZ » Чт сен 22, 2016 10:26 am

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

Re: Геокодер

Сообщение Dark_Veter » Чт сен 22, 2016 11:11 am

Скорее всего в начале файла myuserfunction.php вы забыли написать <?php
За это сообщение автора Dark_Veter поблагодарил:
VladPTZ (Чт сен 22, 2016 11:12 am)
Рейтинг: 1.16%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Геокодер

Сообщение Vit » Чт сен 22, 2016 5:20 pm

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

Re: Геокодер

Сообщение Dark_Veter » Чт сен 22, 2016 5:25 pm

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

Re: Геокодер

Сообщение slgeo » Вс янв 15, 2017 2:05 am

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

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

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

Re: Геокодер

Сообщение Samir77 » Ср янв 10, 2018 2:02 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 нужно дергать руками по требованию получить координаты.


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

Re: Геокодер

Сообщение nick7zmail » Ср янв 10, 2018 2:36 pm

За это сообщение автора nick7zmail поблагодарил:
Samir77 (Вт фев 04, 2020 11:10 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Геокодер

Сообщение directman66 » Ср янв 10, 2018 2:52 pm

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

https://connect.smartliving.ru/profile/ ... ripts.html название скрипта getaddrfromcoord
За это сообщение автора directman66 поблагодарили (всего 2):
igoryan (Сб фев 03, 2018 11:06 am) • Samir77 (Вт фев 04, 2020 11:10 pm)
Рейтинг: 2.33%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить