Клуб 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 комментариев
Подписаться на комментарии к посту
Williams.Smirnov
26 июня 2013, 09:12

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

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

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

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

Williams.Smirnov
26 июня 2013, 09:26

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 у нас пока нет.

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

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

Williams.Smirnov
26 июня 2013, 13:22

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

 

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

 

Williams.Smirnov
26 июня 2013, 14:17

Ребят, но у меня так и не получается запихнуть мои "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 хоть немного изучить.

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

 

Williams.Smirnov
26 июня 2013, 14:41

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

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

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

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

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

Williams.Smirnov
26 июня 2013, 14:50

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

Williams.Smirnov
26 июня 2013, 14:55

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

polyline.editor.startEditing();

polyline.editor.startDrawing();

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

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

Williams.Smirnov
26 июня 2013, 16:08

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

strokeColor: '#ff0000',

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

                }));

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

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

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

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