API Яндекс Карты. Геокодинг | PROG-TIME

API Яндекс Карты. Геокодинг

24.01.2024
Содержание:

В новой записи я вам расскажу про геокодинг в Яндекс картах. Сегодня я научу вас получать данные о местоположение по строке адреса, а так же получать адрес по координатам.

Я буду использовать 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Дополнительная информация об объекте. Значение параметра возвращается в ответе Геосаджеста. Чтобы использовать его в запросе укажите значение вместо текста и координат.
На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Ссылка на мой KWORK