Клуб API Карт

Расстояние от МКАД

alexyem
16 октября 2016, 15:13

Здравствуйте

Задача: определить расстояние от адреса в МО до МКАД
Реализация:

ymaps.ready(init);

function init() {

    var myMap = new ymaps.Map("map", {
            center: [55.73, 37.75],
            zoom: 9
        }, {
            searchControlProvider: 'yandex#search'
        }),
        mkadCoord =  [[
            [55.774558,37.842762],
            [55.76522,37.842789],
             // ...............
            [55.793991,37.840965],
            [55.785017,37.841576]
        ]],
        mkadPolygon = new ymaps.Polygon(
            mkadCoord,
            {
                hintContent: "МКАД"
            }, {
                fillColor: '#00FF0020',
                strokeWidth: 1
            }),
        mkad = ymaps.geoQuery( mkadPolygon).addToMap(myMap),
        geores = ymaps.geoQuery( ymaps.geocode("Москва, Зеленоград",
                {boundedBy: myMap.getBounds(),strictBounds: true,results: 1} )
        ).then( findClosestObjects );


    function findClosestObjects(){
        var point = geores.get(0),
            closestPoint;

        myMap.geoObjects.add(point);
        closestPoint = mkad.getClosestTo(point);
        console.log(closestPoint.geometry.getCoordinates());
    }
}

Используется api 2.1 . Создается карта с центром в Москве. Создается МКАД в виде многоугольника по координатам ( всего 108 точек . в коде все не показывал ). Потом на карту наносится адрес ( для примера Москва, Зеленоград ). Дальше пытаюсь найти ближайшую точку из МКАДа ( многоугольника )  к адресу.

closestPoint = mkad.getClosestTo(point);
console.log(closestPoint.geometry.getCoordinates());

И вот тут застрял. вместо одной точки получаю все из МКАДа скриншот ответа
Что делаю не так ?


 

2 комментария
Подписаться на комментарии к посту
Читаем документацию
getClosestTo
{IGeoObject | null} getClosestTo(object)
Метод, возвращающий объект выборки, ближайший к указанному.


Объект – значит любой геообъект, который вы в него добавили.
Вы добавляете в geoQuery один объект – полигон.
getClosestTo вам его и вернет, т.к. он единственный объект и соответственно ближайший к точке. getClosestTo – очень простой метод, и не умеет разбивать объекты на отдельные точки, не умеет разговаривать, чистить картошку или читать мысли.



Для решения задачи можно использовать метод getClosest геометрии полигона, либо создавать отдельный geoQueryResult из точек внешнего контура полигона в виде отдельных геообъектов.
Спасибо, dimik. Разобрался