Клуб API Карт

Помогите разобраться с полилиниями.

Пост в архиве.
Williams.Smirnov
26 июня 2013, 08:16

Сделал, что бы на карте можно было рисовать сколько угодно полилиний)

 

function createpolyYA(res) {
    var myMap = new ymaps.Map('createmap', {
        center: [54.311357, 48.412847],
        zoom: 12,
        behaviors: ['drag', 'scrollZoom']
    });
    myMap.controls
        .add('zoomControl', {
            left: 5,
            top: 5
        })
        .add('typeSelector')
        .add('mapTools', {
            left: 35,
            top: 5
        });
    $("input[id='create']").click(
        function () {
            polyline = new ymaps.Polyline([], {}, {
                strokeColor: '#0066ffff',
                strokeWidth: 5 // ширина линии
            });
            myMap.geoObjects.add(polyline);
            polyline.editor.startEditing();
            polyline.editor.startDrawing();
            $("span[id='save']").click(
                function () {
                    coord = polyline.geometry.getCoordinates();
                    var num = $("#num").val()
                    if (coord == "") {
                        alert("Укажите хотя бы одну вершину геолинии!");
                    } else {
                        alert(coord);
                        $.post('/templates/editya.php', {
                            'coord': JSON.stringify(coord),
                            'num': JSON.stringify(num)
                        }, function (coord, num) {
                            console.log(Удача)
                        }, 'json');
                        alert("Геолиния успешна сохранена. Для дальнейшей работы с ней перейдите в редактор геолиний!");
                    }
                });
        });
}

 

Но каждая полилиния это отдельный объект. Как сделать что бы это был один объект, для того что бы потом можно было работать с многомерным массивом? Заранее спасибо)

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

а можно поподробнее?

Я так понял, мне нужно задать новую переменную

var myCollection = new ymaps.GeoObjectCollection();
после чего ей присвоить свои объекты, то есть так?
myCollection.add(polyline);
Но так ничего не выходит(

не забудте добавить коллекцию на карту

var myCollection = new ymaps.GeoObjectCollection();

myCollection.add(polyline = new ymaps.Polyline([], {}, {

strokeColor: '#0066ffff',

                    strokeWidth: 5 // ширина линии

                }));

 

myMap.geoObjects.add(polyline);

polyline.editor.startEditing();

polyline.editor.startDrawing();

Теперь получилось вот так. Когда я вызываю alert(myCollection); то выводит [object Object], но когда я делаю alert (myCollection.geometry.getcoordinates()), то в консоле говорит, что не найден такой метод. Как получить доступ к координатам в этой коллекции?

myCollection.each(function(object){

     alert(object.geometry.getCoordinates());

});

 

Коллекция по сути тот же массив, вы же не можете узнать координаты массива

Пока это можно сделать только формируя многомерный массив своими силами. Геометрии MultiLineString у нас пока нет.

Вам ниже показали как перебрать коллекцию. Вот при переборе можно сформировать такой массив.

Если не секрет, зачем вам именно такой формат данных?

Мне нужно на карте нарисовать несколько "полилиний". И затем получить координаты вершин все в один массив. Я не знаю как это сделать другим способом(

 

var myArray = [];
myCollection.each(function (geoObject) {
    myArray.push(geoObject.geometry.getCoordinates());
});

 

Ребят, но у меня так и не получается запихнуть мои "polyline" в коллекцию. Делаю это так.

function init () {

            // Создание экземпляра карты и его привязка к контейнеру с

            // заданным id ("map")

            var myMap = new ymaps.Map('map', {

                    // При инициализации карты, обязательно нужно указать

                    // ее центр и коэффициент масштабирования

                    center: [56.310073,43.998007], // Нижний Новгород

                    zoom: 14

                });

//Объявляю коллекцию           

var myCollection = new ymaps.GeoObjectCollection();

  $("input[id='but']").click( function (){

myCollection( new ymaps.Polyline([], {}, {

strokeColor: '#ff0000',

                    strokeWidth: 5 // ширина линии

                }));

                  //Как рисовать линии теперь?

myMap.geoObjects.add(?);

?.editor.startEditing();

?.editor.startDrawing();

//alert (myCollection.getLength());

});

        }

В коде я написал комментарии, что мне не понятно.

Надо Javascript хоть немного изучить.

Вы ходите впотьмах, непонимая что происходит.

 

Так же как вам неинтересен php, так же и мне неинтересен JS)))

Мне он стал неинтересен, после того как я попробовал другие языки.

(где-то до сих пор валяются пара дипломов по PHP)

И кстати я без него прекрано обхожусь,

а вот для броузера на php не напишешь.

Я понимаю. Просто у меня проект горит. Основная часть писалась на php. Вроде бы и с js более или менее было понятно, а тут на тебе коллекции. А с синтаксисом у меня плохо js. 

Так что делать с myMap.geoObjects.add(polyline);

polyline.editor.startEditing();

polyline.editor.startDrawing();

коллекцию добавить на карту

полилинии добавлять в коллекции, сохраняя на них ссылки, чтобы можно было редактор открывать

Такой код дает пустой массив myCollection.add ( polyline = new ymaps.Polyline([], {}, {

strokeColor: '#ff0000',

                    strokeWidth: 5 // ширина линии

                }));

поищите исполнителя раз горит.

можно тут в клубе объявление написать.

зачем мучить себя если душа не лежит.

да! Это вероятно самое правильное решение. Уже весь клуб зафлудили. Или сразу напишите всю задачу - возможно найдутся добрые люди, которые сделают это за вас бесплатно