1 заметка с тегом

геокодер

Геокодирование от Яндекса, используя Yii

На Yii2 надо было мне реализовать обратное геокодирование. Я знаю город (населенный пункт), но не знаю координаты.

Лучший вариант — прикрутить гео от Яндекса или Гугла.
Прикручивать буду от Яндекса. Заглянул в github на готовые библиотеки для yii.
Есть отличный, я бы даже сказал, навороченный вариант от разработчиков Яндекса https://github.com/yandex-php/php-yandex-geo. По всем правилам ооп, написанный на хорошем php (еще бы:D). Но в нем куча ненужных мне функций (например работа с локалью, прямое гео и т. д.). Тащить лишнее в проект не хочется.

Порылся и нашел неплохой вариант https://github.com/vitalik74/yii2-geocode-yandex.
Реализован в виде отдельного класса, который можно подключить в любом месте проекта (я подключил его как модель). К тому же, данный класс позволяет работать только с обратным геокодированием.
В общем, я сэкономил добрые полчаса, котоые мне потребовались бы на написание обработчика с нуля.
Для удобства, я внес небольшие корректировки, которые учитывали специфику моей задачи:

Мне нужен только один ответ, а не массив ответов (т. к. название населенного пункта, район и страну я уже знаю):

public $results = 1;

У меня город, потому:

public $kind = 'locality';

В функции get массив $params я собираю сам, аттрибуты в функцию передаваться не будут:

...
public function get($geocode, array $params = [], $apiKey = '')
{
	$params = ['key' => $this->key, 'results' => $this->results, 'kind' => $this->kind ];
	...
}

Теперь, в нужном месте, мне достаточно определить класс:

$geo = new Geocode();
$result = $geo->get('Москва, Россия');

Соответственно переменная $result содержит все необходимые данные. В частности, необходимые мне координаты содержаться во вложенном массиве «Point»

2016   api   geo   yandex   yii   yii2   геокодер   Яндекс API