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

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Ответить
newz20
Сообщения: 115
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 82 раза
Поблагодарили: 47 раз

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

Сообщение newz20 » Пт май 17, 2019 10:08 am

ВНИМАНИЕ. Яндекс ввел ключ, внизу код поменял.
Действуя по инструкции с форума viewtopic.php?f=4&t=1858
Для тех у кого заблочен или "религиозных" противников Яндекса имеется вариант с Google.
После добавления Гуглом необходимости ввода АПИ ключа он перестал работать.
Код не мой, просто правлен или доработан
Вариантов на данный момент 2 json и xml поправим их и вернем к жизни
вариант json предусматривает правку только функции
(не проверял правильность постановки переменных в URL, возможно нужно будет поменять местами, в xml поменял так как не верно выводил место)

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

// Функция определения адреса по координатам 
function Getgeocode($lat, $lon)  {
$URL = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lon&sensor=false&language=ru&key=ТУТ_ДОЛЖЕН_БЫТЬ_ВАШ_КЛЮЧ_АПИ";
$data = getUrl( $URL );
$json = json_decode( $data );
$res = $json->results[0]->formatted_address;
return $res;
}

Теперь к варианту с xml
Тут еще два варианта: правка только функции и с правкой еще и метода
С правкой метода сокращаем код и время на доли секунд

С правкой метода

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

function Getgeocode($Coordinates)  {
  $data_file="https://maps.googleapis.com/maps/api/geocode/xml?latlng=".$Coordinates."&key=ТУТ_ДОЛЖЕН_БЫТЬ_ВАШ_КЛЮЧ_АПИ&language=ru"; 
  $xml = simplexml_load_file($data_file); 
  $res=$xml->result[0]->formatted_address;
  return $res;
  }
  
Метод в таком варианте выглядеть станет так

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

 $Coordinates=$this->getProperty("Coordinates");
  $this->setProperty("Location",Getgeocode($Coordinates));


Без правки метода

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

function Getgeocode(($lat, $lon))  {
  $data_file="https://maps.googleapis.com/maps/api/geocode/xml?latlng=$lon,$lat&key=ТУТ_ДОЛЖЕН_БЫТЬ_ВАШ_КЛЮЧ_АПИ&language=ru"; 
  $xml = simplexml_load_file($data_file); 
  $res=$xml->result[0]->formatted_address;
  return $res;
  }  
  
  


На случай потери ветки из начала
Создаем метод SetLocation

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

$Coordinates=$this->getProperty("Coordinates");
$lat=substr($Coordinates,0,strpos($Coordinates,","));
$lon=substr($Coordinates,strpos($Coordinates,",")+1);
$this->setProperty("Location",Getgeocode($lon,$lat));
Создаем свойство Location
Метод привязваем на изменение координатам
Идем в файл своих функций и вставляем

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

function Getgeocode($lon, $lat)  {
  $api='ВАШ_АПИ';
  $data_file="http://geocode-maps.yandex.ru/1.x/?apikey=".$api."&geocode=".$lon.",".$lat; 
  $xml = simplexml_load_file($data_file); 
  $res=$xml->{'GeoObjectCollection'}->{'featureMember'}[0]->{'GeoObject'}->{'metaDataProperty'}->{'GeocoderMetaData'}->{'AddressDetails'}->{'Country'}->{'AddressLine'};
  return $res;
}

 
В конце файла должна быть пустая строка
При изменении координат запускается метод и вызывает функцию и возвращает адрес
За это сообщение автора newz20 поблагодарили (всего 3):
xor (Пт май 17, 2019 1:54 pm) • VladPTZ (Пт окт 04, 2019 2:25 pm) • Samir77 (Пт апр 24, 2020 10:51 am)
Рейтинг: 3.53%
VladPTZ
Сообщения: 385
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 93 раза
Поблагодарили: 55 раз

Re: Получение адреса по координатам Гугл

Сообщение VladPTZ » Пт окт 04, 2019 1:58 pm

newz20 писал(а):
Пт май 17, 2019 10:08 am
ВНИМАНИЕ. Яндекс ввел ключ, внизу код поменял.
Не понял как этот ключ поучить и от какого сервиса? Ключ от yandex tts не заработал.
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
newz20
Сообщения: 115
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а): 82 раза
Поблагодарили: 47 раз

Re: Получение адреса по координатам Гугл

Сообщение newz20 » Пт окт 04, 2019 10:44 pm

VladPTZ писал(а):
Пт окт 04, 2019 1:58 pm
newz20 писал(а):
Пт май 17, 2019 10:08 am
ВНИМАНИЕ. Яндекс ввел ключ, внизу код поменял.
Не понял как этот ключ поучить и от какого сервиса? Ключ от yandex tts не заработал.
https://developer.tech.yandex.ru/services/ для яндекса
https://console.cloud.google.com гугл тут лежит апи нужен вот этот Geocoding API

как получить проще у них и спросить, у яндекса JavaScript API и HTTP Геокодер, у гугла вроде мэпс. Простите не помню как у гугла но вроде надо создавать проект и в нем уже активировать апи.

отказался сейчас от обоих в пользу опенстрит. описал тут https://connect.smartliving.ru/profile/ ... og366.html
За это сообщение автора newz20 поблагодарил:
Samir77 (Пт апр 24, 2020 10:50 am)
Рейтинг: 1.18%
Аватара пользователя
vitosmaxim80sad145
Сообщения: 128
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 88 раз
Поблагодарили: 0

Re: Получение адреса по координатам Гугл

Сообщение vitosmaxim80sad145 » Сб апр 10, 2021 3:10 pm

Помогите настроить ,что-то делаю не так .создал my_funcs.php туда вставил

function Getgeocode($lat, $lon) {
$URL = "https://nominatim.openstreetmap.org/rev ... sdetails=1";
$data = getUrl( $URL );
$json = json_decode( $data);
$res = $json->address->state.", ";
$res .=$json->address->city.", ";
$res .=$json->address->road.", ";
$res .=$json->address->house_number;
return $res;
}

метод SetLocation
$Coordinates=$this->getProperty("Coordinates");
$lat=substr($Coordinates,0,strpos($Coordinates,","));
$lon=substr($Coordinates,strpos($Coordinates,",")+1);
$this->setProperty("Location",Getgeocode($lat,$lon));
$this -> setProperty('latitude',$lat);
$this -> setProperty('longitude',$lon);

if ($this -> getProperty('HomeDistance') > 100) {
$this -> setProperty("Location",$res);
} else {
$this -> setProperty("Location",'Дом');
$this -> callMethod('gotHome');
}

и теперь в верху в админке function Getgeocode($lat, $lon) { $URL = "https://nominatim.openstreetmap.org/rev ... sdetails=1"; $data = getUrl( $URL ); $json = json_decode( $data); $res = $json->address->state.", "; $res .=$json->address->city.", "; $res .=$json->address->road.", "; $res .=$json->address->house_number; return $res; }
Аватара пользователя
xor
Сообщения: 1741
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 213 раз
Поблагодарили: 522 раза

Re: Получение адреса по координатам Гугл

Сообщение xor » Сб апр 10, 2021 8:26 pm

vitosmaxim80sad145 писал(а):
Сб апр 10, 2021 3:10 pm
и теперь в верху в админке function Getgeocode($lat, $lon) { $URL = "https://nominatim.openstreetmap.org/rev ... sdetails=1"; $data = getUrl( $URL ); $json = json_decode( $data); $res = $json->address->state.", "; $res .=$json->address->city.", "; $res .=$json->address->road.", "; $res .=$json->address->house_number; return $res; }
файл должен начинаться с
<?php
и заканчиваться пустой строкой, кмк
и кодировка должна быть утф-8 без бом
За это сообщение автора xor поблагодарил:
vitosmaxim80sad145 (Вс апр 11, 2021 9:24 am)
Рейтинг: 1.18%
Аватара пользователя
vitosmaxim80sad145
Сообщения: 128
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 88 раз
Поблагодарили: 0

Re: Получение адреса по координатам Гугл

Сообщение vitosmaxim80sad145 » Пн апр 12, 2021 9:26 am

xor писал(а):
Сб апр 10, 2021 8:26 pm
vitosmaxim80sad145 писал(а):
Сб апр 10, 2021 3:10 pm
и теперь в верху в админке function Getgeocode($lat, $lon) { $URL = "https://nominatim.openstreetmap.org/rev ... sdetails=1"; $data = getUrl( $URL ); $json = json_decode( $data); $res = $json->address->state.", "; $res .=$json->address->city.", "; $res .=$json->address->road.", "; $res .=$json->address->house_number; return $res; }
файл должен начинаться с
<?php
и заканчиваться пустой строкой, кмк
и кодировка должна быть утф-8 без бом
Большое СПАСИБО ,да добавил <?php в начале и всё заработало , но оно не совсем правильно пишет в гугл локациях пищет верньй адрес а тут через рас .
А не подскажите сейчас в свойстве локация не пишет ничего ,а в свойство seenAt адрес или локацию .Но если дом то пишет и там и там, как сделать чтобы писало в Location, а в seenAt писало где был в последний рас ну тоесть предыдущее
Просто спросить для себя если адрес уже есть в Google Location что нельзя его просто подтянуть от туда, а не создавать новые функции ?
Ответить