В новой записи я вам расскажу про геокодинг в Яндекс картах. Сегодня я научу вас получать данные о местоположение по строке адреса, а так же получать адрес по координатам.
Я буду использовать PHP для отправки запросов в API Яндекс.Карты.
Авторизации и получение токена для API Яндекс.Карты
Для работы с геокодингом вам необходимо получить токен для Яндекс Карт, для этого вам необходимо зарегистрировать приложение здесь.
https://developer.tech.yandex.ru/services
Пример токена для работы с Яндекс Картами.
0baasd2f-df1c-43d3-456f-2ed8ef0b2a18
Для написания запросов я буду использовать PHP + Curl.
Как проложить маршрут с помощью API Яндекс Карты
ymaps.ready(init);
function init(){
var myMap = new ymaps.Map ('myMap', {
center: [60.009853, 30.022536],
zoom: 10
});
let route = ymaps.route([
'Кронштадт, Якорная площадь',
{
type: 'viaPoint',
point: [59.93328,30.342791]// или 'Аничков мост'
},
'Санкт-Петербург, Финляндский вокзал'// или [59.956084, 30.356849]
]).then(
function (route) {
myMap.geoObjects.add(route);
var routeLength = route.getLength(); // Длина маршрута
var firstPath = route.getPaths().get(0); // Первый путь
var firstPathLength = firstPath.getLength(); // Длина первого пути
var firtstPathTime = firstPath.getTime(); // Время без учета пробок
var firstPathFirstSegment = firstPath.getSegments()[0];// Первый сегмент первого пути
var firstPathFirstSegmentJamsTime = firstPathFirstSegment.getJamsTime();// Время с пробками
},
function (error) {
alert("Возникла ошибка: " + error.message);
},
);
}
Найти достопримечательности с помощью API Яндекс Карты
ymaps.ready(init);
function init(){
var myMap = new ymaps.Map (
'myMap',
{
center: [
55.754952,
37.615319
],
zoom: 15
}
);
var myCoords = [
55.754952,
37.615319
];
myMap.geoObjects.add(
new ymaps.Placemark(myCoords,
{},
{
preset: 'twirl#greenStretchyIcon'
}
)
);
var myGeocoder = ymaps.geocode('Кремль');
myGeocoder.then(
function (res) {
var nearest = res.geoObjects.get(0);
var name = nearest.properties.get('name');
nearest.properties.set('iconContent', name);
nearest.options.set('preset', 'twirl#redStretchyIcon');
myMap.geoObjects.add(res.geoObjects);
}
);
}
Отметить ближайшие станции метро на Яндекс Карте
function init(){
var myMap = new ymaps.Map (
'myMap',
{
center: [
55.754952,
37.615319
],
zoom: 15
}
);
var myCoords = [
55.754952,
37.615319
];
myMap.geoObjects.add(
new ymaps.Placemark(myCoords,
{
iconContent: 'Где метро?'
},
{
preset: 'twirl#greenStretchyIcon'
}
)
);
var myGeocoder = ymaps.geocode(
myCoords,
{
kind: 'metro'
}
);
myGeocoder.then(
function (res) {
var nearest = res.geoObjects.get(0);
var name = nearest.properties.get('name');
nearest.properties.set('iconContent', name);
nearest.options.set('preset', 'twirl#redStretchyIcon');
myMap.geoObjects.add(res.geoObjects);
}
);
}
Получение данных по строке адреса через API Яндекс.Карты
Для получения данных о конкретном адресе, вам необходимо отправить GET запрос на https://geocode-maps.yandex.ru/1.x/ с указание следующих параметров:
- apikey — ключ который вы получите при оформление приложения
- geocode — адрес
- format — формат ответа
Пример запроса на PHP
$dataQuery = [
"apikey" => "токен_от_яндекс_карты",
"geocode" => "Москва, Тверская+улица, дом 7",
"format" => "json"
];
$ch = curl_init("https://geocode-maps.yandex.ru/1.x/" . http_build_query($dataQuery));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$resultQuery = curl_exec($ch);
curl_close($ch);
var_dump($resultQuery);
В ответе вы получите следующую информацию:
{
"response": {
"GeoObjectCollection": {
"metaDataProperty": {
"GeocoderResponseMetaData": {
"request": "Москва, Тверская улица, дом 7",
"results": "10",
"found": "1"
}
},
"featureMember": [
{
"GeoObject": {
"metaDataProperty": {
"GeocoderMetaData": {
"precision": "exact",
"text": "Россия, Москва, Тверская улица, 7",
"kind": "house",
"Address": {
"country_code": "RU",
"formatted": "Россия, Москва, Тверская улица, 7",
"Components": [
{
"kind": "country",
"name": "Россия"
},
{
"kind": "province",
"name": "Центральный федеральный округ"
},
{
"kind": "province",
"name": "Москва"
},
{
"kind": "locality",
"name": "Москва"
},
{
"kind": "street",
"name": "Тверская улица"
},
{
"kind": "house",
"name": "7"
}
]
},
"AddressDetails": {
"Country": {
"AddressLine": "Россия, Москва, Тверская улица, 7",
"CountryNameCode": "RU",
"CountryName": "Россия",
"AdministrativeArea": {
"AdministrativeAreaName": "Москва",
"Locality": {
"LocalityName": "Москва",
"Thoroughfare": {
"ThoroughfareName": "Тверская улица",
"Premise": {
"PremiseNumber": "7"
}
}
}
}
}
}
}
},
"name": "Тверская улица, 7",
"description": "Москва, Россия",
"boundedBy": {
"Envelope": {
"lowerCorner": "37.607107 55.755657",
"upperCorner": "37.615318 55.760287"
}
},
"uri": "",
"Point": {
"pos": "37.611212 55.757972"
}
}
}
]
}
}
}
Получение адреса по координатам через API Яндекс.Карты
Если вы знаете координаты, то вы можете для параметра geocode в качестве значения передать координаты.
Для получения данных по конкретным координатам, вам необходимо также отправить GET запрос на https://geocode-maps.yandex.ru/1.x/ с указание следующих параметров:
- apikey — ключ который вы получите при оформление приложения
- geocode — координаты
- format — формат ответа
Пример запроса на PHP
$dataQuery = [
"apikey" => "токен_от_яндекс_карты",
"geocode" => "37.597576,55.771899",
"format" => "json"
];
$ch = curl_init("https://geocode-maps.yandex.ru/1.x/" . http_build_query($dataQuery));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$resultQuery = curl_exec($ch);
curl_close($ch);
var_dump($resultQuery);
В ответе вы получите примерно следующую информацию:
{
"response": {
"GeoObjectCollection": {
"metaDataProperty": {
"GeocoderResponseMetaData": {
"Point": {
"pos": "37.597576 55.771899"
},
"request": "37.597576,55.771899",
"results": "10",
"found": "9"
}
},
"featureMember": [
...
{
"GeoObject": {
"metaDataProperty": {
"GeocoderMetaData": {
"precision": "other",
"text": "Россия",
"kind": "country",
"Address": {
"country_code": "RU",
"formatted": "Россия",
"Components": [
{
"kind": "country",
"name": "Россия"
}
]
},
"AddressDetails": {
"Country": {
"AddressLine": "Россия",
"CountryNameCode": "RU",
"CountryName": "Россия"
}
}
}
},
"name": "Россия",
"boundedBy": {
"Envelope": {
"lowerCorner": "19.484764 41.185996",
"upperCorner": "191.128012 81.886117"
}
},
"uri": "ymapsbm1://geo?data=Cgg1MzAwMDAwMRIM0KDQvtGB0YHQuNGPIgoNxQLHQhVsy3ZC",
"Point": {
"pos": "99.505405 61.698657"
}
}
}
...
]
}
}
}
Дополнительные параметры
Для получения более подробной информации вы можете передать дополнительные параметры
apikey | Обязательный параметр Токен, полученный в Кабинете Разработчика |
geocode | Обязательный параметр Адрес либо географические координаты искомого объекта. Вы можете указать широту и долготу объекта или указать строку адреса. |
sco | Только если в параметре geocode указаны координаты.Порядок записи координат. Возможные значения: longlat — долгота, широта;latlong — широта, долгота. Значение по умолчанию: longlat . |
kind | Только если в параметре geocode указаны координаты.Вид необходимого топонима. Список допустимых значений: house — дом;street — улица;metro — станция метро;district — район города;locality — населенный пункт (город/поселок/деревня/село)Примечание: Если параметр не задан, API выберет тип топонима автоматически. |
rspn | Флаг, задающий ограничение поиска указанной областью. Область задается параметрами ll и spn либо bbox . Возможные значения: 0 — не ограничивать поиск, 1 — ограничивать поиск. Значение по умолчению: 0 . Примечание: Если в параметре geocode указаны координаты, то параметр rspn игнорируется. |
ll | Долгота и широта центра области поиска. Протяженность области поиска задается параметром spn . |
spn | Протяженность области поиска. Центр области задается параметром ll .Задается двумя числами: первое обозначает разницу между максимальной и минимальной долготой области; второе обозначает разницу между максимальной и минимальной широтой области. Примечание: Если в параметре geocode указаны координаты и параметр kind имеет значение district , параметр spn не учитывается. |
bbox | Альтернативный способ задания области поиска. Границы задаются в виде географических координат (в последовательности «долгота, широта») левого нижнего и правого верхнего углов области. Формат записи: bbox=x1,y1~x2,y2 Примечание: При одновременном использовании параметров bbox и ll+spn , параметр bbox будет более приоритетным.Игнорируется, если в параметре geocode указаны координаты. |
format | Формат ответа геокодера: json |
results | Максимальное количество возвращаемых объектов. Если указан параметр skip , то значение нужно задать явно. Значение по умолчанию: 10 . Максимальное допустимое значение: 50 . |
skip | Количество пропускаемых объектов в ответе, начиная с первого. Если указано, нужно также задать значение results . Значение skip должно нацело делиться на значение results .Значение по умолчанию: 0 . |
lang | Язык ответа и региональные особенности карты. Формат записи lang=language_region , где language — двузначный код языка. Указывается в формате ISO 639-1. Задает язык, на котором будут отображаться названия географических объектов. region — двузначный код страны. Указывается в формате ISO 3166-1. Определяет региональные особенности. Список поддерживаемых значений: ru_RU — русский; uk_UA — украинский; be_BY — белорусский; en_RU — ответ на английском, российские особенности карты; en_US — ответ на английском, американские особенности карты; tr_TR — турецкий (только для карты Турции). Значение по умолчанию: ru_RU . |
uri | Дополнительная информация об объекте. Значение параметра возвращается в ответе Геосаджеста. Чтобы использовать его в запросе укажите значение вместо текста и координат. |