Поиск ближайшего объекта
С помощью объекта GeoQueryResult можно создавать объекты на карте из их JSON-описания.
В данном примере рассматривается, как найти объекты выборки, ближайшие к произвольному объекту на карте (например к метро). А также как находить объекты, ближайшие к месту клика.
index.html
find_closest_object.js
<!DOCTYPE html>
<html>
<head>
<title>Поиск ближайшего объекта</title>
<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
<!--
Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
-->
<script
src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script
src="find_closest_object.js"
type="text/javascript"
></script>
<style>
body,
html {
font-family: Arial;
font-size: 11pt;
padding: 0;
margin: 0;
width: 100%;
height: 95%;
}
p {
padding: 10px;
}
#map {
width: 100%;
height: 85%;
}
</style>
</head>
<body>
<p>
При клике на карту будет открываться балун ближайшей к месту
клика метки
</p>
<div id="map"></div>
</body>
</html>
ymaps.ready(init);
function init() {
var myMap = new ymaps.Map(
"map",
{
center: [55.73, 37.75],
zoom: 12,
},
{
searchControlProvider: "yandex#search",
}
),
cafe,
metro;
function findClosestObjects() {
// Найдем в выборке кафе, ближайшее к найденной станции метро,
// и откроем его балун.
cafe.getClosestTo(metro.get(0)).balloon.open();
// Будем открывать балун кафе, который ближе всего к месту клика
myMap.events.add("click", function (event) {
cafe.getClosestTo(event.get("coords")).balloon.open();
});
}
// Описания кафе можно хранить в формате JSON, а потом генерировать
// из описания геообъекты с помощью ymaps.geoQuery.
cafe = ymaps
.geoQuery({
type: "FeatureCollection",
features: [
{
type: "Feature",
properties: {
balloonContent:
'Кофейня "Дарт Вейдер" - у нас есть печеньки!',
},
geometry: {
type: "Point",
coordinates: [55.724166, 37.545849],
},
},
{
type: "Feature",
properties: {
balloonContent:
'Кафе "Горлум" - пирожные прелесть.',
},
geometry: {
type: "Point",
coordinates: [55.717495, 37.567886],
},
},
{
type: "Feature",
properties: {
balloonContent:
'Кафе "Кирпич" - крепкий кофе для крепких парней.',
},
geometry: {
type: "Point",
coordinates: [55.721018, 37.631057],
},
},
],
// Сразу добавим точки на карту.
})
.addToMap(myMap);
// С помощью обратного геокодирования найдем метро "Кропоткинская".
metro = ymaps
.geoQuery(ymaps.geocode([55.744828, 37.603423], { kind: "metro" }))
// Нужно дождаться ответа от сервера и только потом обрабатывать полученные результаты.
.then(findClosestObjects);
}