Использование API Геокодера в PHP для получения координат

Использование API Геокодера в PHP для получения координат

Сервис Яндекс.Карты предоставляет доступ к API Геокодера, который позволяет по адресу получить координаты объекта на карте, также поддерживается обратное геокодирование. В этой статье приведен пример обращения к API Геокодера с помощью PHP CURL.

Для запросов к API потребуется ключ, получить его можно на https://developer.tech.yandex.ru/services/, заполнив небольшую анкету.

Подключить API
Подключить API - анкета

Документация по формату запроса можно посмотреть на https://yandex.ru/dev/maps/geocoder/doc/desc/concepts/input_params.html

Далее, пример как получить все доступные данные по адресу в виде PHP массива:

$address = 'Москва, Тверская, д.7';

$ch = curl_init('https://geocode-maps.yandex.ru/1.x/?apikey=КЛЮЧ&format=json&geocode=' . urlencode($address));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

$res = json_decode($res, true);
print_r($res);
PHP

Результат:

Array(
    [response] => Array(
		[GeoObjectCollection] => Array(
			[metaDataProperty] => Array(
				[GeocoderResponseMetaData] => Array(
					[request] => Москва, Тверская, д.7
					[results] => 10
					[found] => 1
				)
			)
			[featureMember] => Array(
				[0] => Array(
					[GeoObject] => Array(
						[metaDataProperty] => Array(
							[GeocoderMetaData] => Array(
								[precision] => exact
								[text] => Россия, Москва, Тверская улица, 7
								[kind] => house
								[Address] => Array(
									[country_code] => RU
									[formatted] => Россия, Москва, Тверская улица, 7
									[Components] => Array(
										[0] => Array(
											[kind] => country
											[name] => Россия
										)
										[1] => Array(
											[kind] => province
											[name] => Центральный федеральный округ
										)
										[2] => Array(
											[kind] => province
											[name] => Москва
										)
										[3] => Array(
											[kind] => locality
											[name] => Москва
										)
										[4] => Array(
											[kind] => street
											[name] => Тверская улица
										)
										[5] => Array(
											[kind] => house
											[name] => 7
										)
									)
								)
								[AddressDetails] => Array(
									[Country] => Array(
										[AddressLine] => Россия, Москва, Тверская улица, 7
										[CountryNameCode] => RU
										[CountryName] => Россия
										[AdministrativeArea] => Array(
											[AdministrativeAreaName] => Москва
											[Locality] => Array(
												[LocalityName] => Москва
												[Thoroughfare] => Array(
													[ThoroughfareName] => Тверская улица
													[Premise] => Array(
														[PremiseNumber] => 7
													)
												)
											)
										)
									)
                                )
                            )
						)
						[name] => Тверская улица, 7
						[description] => Москва, Россия
						[boundedBy] => Array(
							[Envelope] => Array(
								[lowerCorner] => 37.607107 55.755657
								[upperCorner] => 37.615318 55.760287
							)
						)
						[Point] => Array(
							[pos] => 37.611212 55.757972
						)
					)
				)
			)
		)
	)
)

Видно, что координаты передаются строкой «37.611212 55.757972», достанем их и преобразуем в массив:

$coordinates = $res['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'];
$coordinates = explode(' ', $coordinates);
print_r($coordinates);
PHP

Результат:

Array(
    [0] => 37.611212
    [1] => 55.757972
)

Нужно учесть, что первое значение – долгота, а второе – широта. Т.к. в разных сервисах яндекса используется разная последовательность значений.

05.08.2021
589

Комментарии

, чтобы добавить комментарий.

Другие публикации

Яндекс Карты: перетаскивание метки по карте
Функция перетаскивания метки по карте и получение адреса и координат будет весьма удобна на сайтах недвижимости,...
5861
+1
Верстка блока контактов с картой
Пример, как вывести Яндекс карту на всю ширину сайта + плавающий блок с контактной информацией.
9825
-1
Яндекс карты не прямоугольной формы
Пример, как сделать Яндекс карту не прямоугольной формы т.е. наложить изображение (маску) по верх карты со сохранением...
3962
-2
Ускорение загрузки Яндекс Карт
Несколько рекомендаций как увеличить скорость загрузки API Яндекс.Карт 2.0.
17173
+8
Поиск ближайших объектов в БД по координатам
Рассмотрим пример как найти в базе данных соседние объекты по координатам и вывести их на карте Яндекс.
5306
0
Автомасштаб Яндекс карты
При выводе нескольких меток на Яндекс карте, желательно вместить их все в область просмотра.
6959
+1