В качестве провайдера будем пользовать Яндекс.
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;
}
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));
5. В скрипте "Где Вася?" пишем
Код: Выделить всё
say(gg('vasia.Location'));
Еще можно анализировать свойство seenAt (это заданные локации: Дом, Работа, Школа,...) и использовать Location только если там пусто.
Ну или этот код перенести в gps.php, но это если Сергей посчитает это целесообразным. При частой смене координат, и если пользователей будет много - можно заспамить яндекс.
Так что в этом случае SetLocation нужно дергать руками по требованию получить координаты.
Добавил в готовых решениях клона темы с рабочим гуглом и парой модификаций viewtopic.php?f=27&t=6443