Яндекс.Карты предоставляют сервис геокодирования. Он позволяет определять координаты и получать сведения о географическом объекте по его названию или адресу и наоборот, определять адрес объекта на карте по его координатам (обратное геокодирование).
Например, по запросу «Санкт-Петербург, Невский проспект, 35» геокодер возвратит географические координаты этого дома: «30.332631, 59.934172» (долгота, широта).
Если в запросе указать географические координаты дома «30.332631, 50.4452705», то геокодер вернет адрес: «Украина, Киев, Шевченковский район, улица Богдана Хмельницкого, 11»
https://yandex.ru/dev/maps/geocoder/
Этот пакет реализует простой интерфейс для доступа к геокодеру.
Для работы с геокодером нужен токен. Получить его можно в кабинете разработчика: https://developer.tech.yandex.ru/services/
Так как «официальный» пакет yandex/geo
(https://packagist.org/packages/yandex/geo) не обновлялся с июля 2019 года (несмотря на наличие pull-request'ов),
а разработчики не отвечают на письма, я выпустил эту версию (с небольшими исправлениями и дополнениями) для нужд разработки «АЖУР Медиа».
Этот пакет доступен в репозитории:
composer require ajur-media/yandex-geo-coder
<?php
use AJUR\Toolkit\YandexGeoCoder\Api;
require_once 'vendor/autoload.php';
// инициализируем API
// возвращает mutable object
$api = new Api();
// Можно искать по точке (обратное геокодирование)
// $api->setPoint(30.5166187, 50.4452705);
// Или можно искать по адресу (прямое геокодирование)
$api->setQuery('Санкт-Петербург, Невский проспект, 35');
// Настройка фильтров (можно использовать fluent-интерфейс)
$api
->setLimit(1) // кол-во результатов
->setLang( Api::LANG_RU) // используемый язык для ответа
->setToken('<token>') // api ключ
->load();
$response = $api->getResponse();
echo "Found: ", $response->getFoundCount(), PHP_EOL;
echo "Query: ", $response->getQuery(), PHP_EOL;
$object = $response->getFirst(); // получаем первый (самый релевантный) объект в ответе геокодера
echo "Lat: ", $object->getLatitude(), PHP_EOL;
echo "Lon: ", $object->getLongitude(), PHP_EOL;
// Список найденных объектов
$collection = $response->getList();
foreach ($collection as $n => $item) {
echo "[{$n}] Address: ", $item->getAddress(), PHP_EOL;
echo "Lat: ", $item->getLatitude(), PHP_EOL;
echo "Lon: ", $item->getLongitude(), PHP_EOL;
}
MIT
- add \Psr\Logger as second argument to API constructor