Skip to content

ajur-media/yandexgeocoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Сервис Яндекс.Геокодирование

Яндекс.Карты предоставляют сервис геокодирования. Он позволяет определять координаты и получать сведения о географическом объекте по его названию или адресу и наоборот, определять адрес объекта на карте по его координатам (обратное геокодирование).

Например, по запросу «Санкт-Петербург, Невский проспект, 35» геокодер возвратит географические координаты этого дома: «30.332631, 59.934172» (долгота, широта).

Если в запросе указать географические координаты дома «30.332631, 50.4452705», то геокодер вернет адрес: «Украина, Киев, Шевченковский район, улица Богдана Хмельницкого, 11»

https://yandex.ru/dev/maps/geocoder/

API для работы с сервисом Яндекс.Геокодирование

Этот пакет реализует простой интерфейс для доступа к геокодеру.

Для работы с геокодером нужен токен. Получить его можно в кабинете разработчика: https://developer.tech.yandex.ru/services/

Пакет ajur-media/yandex-geo-coder

Так как «официальный» пакет 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

TODO

  • add \Psr\Logger as second argument to API constructor