Клуб API Карт

Сортировка меток по геолокации

apaboss
18 августа 2016, 07:43

Есть код, он выводит заголовки меток в генерируемое меню

пример из песочницы: https://tech.yandex.ru/maps/jsbox/2.1/ymapsml_menu

Мой код, с определением геолокации по ip

ymaps.ready(init);

function init () {
    // Создание экземпляра карты
    var geolocation = ymaps.geolocation,
     myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 12
        }, {
            searchControlProvider: 'yandex#search'
        });
        
        geolocation.get({
        provider: 'yandex',
        mapStateAutoApply: true
    }).then(function (result) {
        // Красным цветом пометим положение, вычисленное через ip.
        result.geoObjects.options.set('preset', 'islands#redCircleIcon');
        result.geoObjects.get(0).properties.set({
            balloonContentBody: 'Мое местоположение'
        });
        myMap.geoObjects.add(result.geoObjects);
    });
    
    
        
        ymaps.geoXml.load('/map1.xml?v=' + (+new Date()))
        .then(function (res) {
            res.geoObjects.each(function (item) {
                addMenuItem(item, myMap);
            });
        },
        // Вызывается в случае неудачной загрузки YMapsML-файла.
        function (error) {
            alert("При загрузке YMapsML-файла произошла ошибка: " + error);
        });
        
        function addMenuItem(group, map) {
        // Показать/скрыть группу геообъектов на карте.
        $("<a class=\"title\" href=\"#\">" + group.properties.get('name') + "</a>")
            .bind("click", function () {
                var link = $(this);
                // Если пункт меню "неактивный", то добавляем группу на карту,
                // иначе - удаляем с карты.
                if (link.hasClass("active")) {
                    map.geoObjects.remove(group);
                } else {
                    map.geoObjects.add(group);
                }
                // Меняем "активность" пункта меню.
                link.toggleClass("active");
                return false;
            })
            // Добавление нового пункта меню в список.
            .appendTo(
                $("<li></li>").appendTo($("#map_menu"))
            );
    }  

}

Задача: сделать автоматическую сортировку вывода меток в зависимости от их геолокации. Например, если пользователь из Питера, вывести в эту менюшку* именно те метки, которые расположены в Питере.

Понимаю, что нужно собрать "Питерские" метки в коллекцию, и из нее уже выводить. Но как сделать этот вывод автоматическим, исходя из геолокации?

4 комментария
Подписаться на комментарии к посту
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoQueryResult-docpage/#sortByDistance
dimik,
и что сделать указанной точкой, от которой будем получать объекты? центр карты? точку, в которую переместились после? как это указать? не могу понять.. хоть бы небольшой примерчик дали..


а может вот с этим получится? https://tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/remote-object-manager/about-docpage/ 
сортировать по видимой области?
apaboss,
Судя по документации (вы вообще смотрели ссылку?) туда можно передать Карту/Метку/Координаты.
Геолокации возвращает метку result.geoObjects.get(0) вот ее туда и передайте.
Только нужно учесть, что и геолокация и запрос за YMapsML – асинхронные процессы и нужно дождаться пока и то и другое вернет результат, прежде чем сортировать
dimik,
я сейчас знакомлюсь с ymaps, не так легко дается..поэтому такие вопросы. спасибо за подсказку, попробую использовать result.geoObjects.get(0)