Клуб API Карт

Не изменять индекс вершин

Пост в архиве.

Здравствуйте. Пытаюсь подстроить polyline.editor под свои задачи, при клике на вершину  я определяю её индекс, и создаю метку с таким индексом тоесть прикрепляю к ней метку которая будет всегда "приклеена" к определенной вершине. Но проблема в том что индекс вершины может изменится при создании еще одной вершины, и метка переходит в к другой метке, а это плохо. Может есть какой-то метод который будет закреплять индекс вершины, и при любых действиях чтобы он не изменялся. Ну или если есть другие варианты как это сделать по другому, с удовольствием выслушаю.

16 комментариев

при создании новой вершины - проверяете индекс той к которой привязана метка, 

и если он изменился переносите метку на другой индекс

я так и не понял к какому событию привязываться http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Polyline.xml тут вроде ничего подходящего нет.

 

geometrychange?

нужно попробовать, но что-то я сомневаюсь что там как-то можно узнать индекс только-что созданого элемента. Помучаюсь, потом отпишу о результате)

 

не-а, не подходит(

при добавлении вершины не происходит "geometrychange"?

происходит, но вот смотри, оно выдает оновленую геометрию кривой, например было вершин 0 1  а стало 0 1(новая) 2 но вот какая добавилсь всеравно не ясно, так как индексы просто обновляются.

А тебе надо чтобы индекс на метке привязанной к вершине не менялся?

т.е. чтобы было при добавлении точки между 0 и 1 метки были 0 2 1?

 

да, именно так, я уже думал о другом каком-то уникальном значении вершины, но кроме индекса ничего нету.

В принципе ничего особо сложного в этом нет.

Написал отдельный класс PolylineVertexCounter

Вот пример использования

спасибо большое, сейчас буду пробовать адаптировать под свою задачу.

хэх, нужно садится и учить  нормально javascript(  Возникла проблема при переделывании вашего класса, получается я не создаю метки на всех вершинах, а только на тех на которых захочет пользователь, выбрав с меню пункт метка http://cybers.net.ua/test/mysend.html  при этом я вызываю функцию

 editorMenuManager: function (menuItems,index) {                               
                                    menuItems.push({
                                        id: "ChangeIcon",
                                        title: 'Метка',
                                        onClick: function () {   
                                            PolylineVertexCounter.prototype.onVertexAdd(polyline.editor.getGeometry().getCoordinates(),true);
                                   
                                            polyline.editor.stopDrawing();
                                        }
                                    });
                                    return menuItems;
                                }

первым параметром в PolylineVertexCounter.prototype.onVertexAdd передаю массив вершин а вторым параметром подтверждение того что это событие было вызвано с меню. И после нажатия на пункт меню "метка" мне выдает такую ошибку "TypeError: this.vertices is undefined"   что я делаю не так?

 

да, учить надо )

ругается потому что ты вызываешь метод, не создавая инстанс класса.

this.vertices инициализируется в конструкторе.

заменил на вот такое

PolylineVertexCounter.prototype.onVertexAdd = function (geometry,menu=false) {
        this.vertices = polyline.geometry.getCoordinates().slice(0);   
        this.map = polyline.getMap();
    var added = geometry.filter(function (vertex) {
                return this.vertices.indexOf(vertex) === -1;
            }, this)[0],
            index = this.vertices.push(added) - 1;
            console.log(added);
        this.createMarker(added, index,menu,geometry);
        this.reIndex();
    };

теперь при нажатии на меню метка сразу не появляется а если создать след вершину то она появляется, в общем совается по индексам, что-то я нарушил(

 

function (geometry,menu=false) {

В javascript нет параметров по-умолчанию

menu=false в объявлении функции вызовет синтаксическую ошибку.


Есть ощущение что ты всё делаешь наугад,

правда, почитай что-нибудь про javascript, рекомендую Definitive Guide Флэнагана, или Javascript Patterns Стефанова, думаю их можно и на торентах найти.


спасибо, просто редко со скриптами работаю, вот думал есть аналогия. Извини за глупые вопросы, пойду учить.