Клуб API Карт

Найдено на тему «полилиния»:
Как получить коллекцию из прямых линий в маршруте
rarescrap
7 сентября 2017, 10:35

У меня есть мультимаршрут, который содержит в себе только один маршрут (multiRoute.getRoutes().getLength() == 1):

Маршрут

Как я могу получить коллекцию, состоящую из прямых линий, из которых состоит маршрут? И, что еще важнее, как получить точку начала и точку конца линии?
 

1 комментарий
multiRoute,маршрутизация,координаты полилинии,полилиния
Кластеры за пределами видимой области карты
Швалёв Дмитрий
4 июня 2016, 13:54

Добрый день, есть задача соединить линиями кластеры геообъектов. На карту добавляются геоточки, затем добавляются кластеры, по координатам кластеров (geometry.getCoordinates()) создаётся ломаная (Polyline).

Проблема возникает когда кластер уходит за пределы видимой карты. В документации
https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer-docpage/
есть упоминание: "Если объект не попадает в видимую область карты, он не будет добавлен на карту.", поэтому, как мне кажется, кластер уходя за видимую область удаляется и к нему невозможно нарисовать линию.

Подтвердите это пожалуйста, если это действительно так?

Пробовал увеличить параметр кластера: options.viewportMargin, но из-за этого увеличивается время обработки карты вплоть до того, что картой становится невозможно пользоваться.

Каким образом можно решить эту задачу, можно ли сделать чтобы кластеры создавались за пределами видимой области карты или может получить координаты кластеров которые не добавлены на карту?

1 комментарий
кластер,кластеризатор,полилиния,координаты
Прошу помощи с удалением Полилинии с карты
Олег Семенов
4 июля 2014, 05:38

Ребята, с yandex map работаю не так давно но вот не могу разобраться как удалить полилию

1) есть ф-я которая повешана на click:

 

 $.post("/get_points.php", {
         user_id: "<? echo $uid; ?>",
         password: "<? echo $password;?>",
         child_id: child_id,
         type: type,
         data: arr
     },
     function (json) {
         if (!json.errCode) {
             for (i = 0; i < json.length; i++) {
                 var myPlacemark = new ymaps.Placemark([json[i].lat, json[i].lng], {
                         // Свойства
                         hintContent: json[i].hinttext,
                         balloonContentHeader: json[i].header,
                         balloonContentBody: json[i].balloontext,
                         balloonContentFooter: json[i].footer
                     }, // Опции
                     { // preset: +json[i].preset
                         preset: 'mystyle#' + json[i].preset
                     }
                 );
                 myCollection.add(myPlacemark);
                 if (i == json.length - 1) {
                     go_to(json[i].lng, json[i].lat);
                 }
                 points.push([+json[i].lat, +json[i].lng]);
             }
             if (type != 'online') {
                 poliline(points);
             } - здесь мы вызываем ф - ю которая рисует нам полилинию
         } else {
             alert(json.errMessage);
         }
     }, 'json');
 myMap.geoObjects.add(myCollection);
 return false;

 

все отлично метки выводятся на карту и рисуется полилиния

   if (type !='online'){poliline(points); }  - здесь мы вызываем ф-ю которая рисует нам полилинию

вот сама ф-я  function poliline(points)

  

function poliline(points) {
    console.log(points);
    var color = $.cookie('child_color');
    if (color == '') {
        color = '#CC3300';
    }
    // Создаем ломаную линию.
    var polyline = new ymaps.Polyline(points, {
        hintContent: "Путь следования"
    }, {
        draggable: true,
        strokeColor: color,
        strokeWidth: 4,
        strokeStyle: '1 2' // Первой цифрой задаем длину штриха. Второй цифрой задаем длину разрыва.
    });
    myMap.geoObjects.add(polyline); // Добавляем линию на карту.
    myMap.setBounds(polyline.geometry.getBounds()); // Устанавливаем карте границы линии.
}

 

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

1 комментарий
API 2.1,Javascript,полилиния,коллекции
Изменение толщины линии при наведении курсора мыши
Роман
11 сентября 2013, 01:27

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

Собственно сразу даю пример http://jsfiddle.net/uB3QB/2/

Попробуйте медленно навести курсор справа от линии. Возникает неадекватное поведение c вызовами событий mouseenter/mouseleave и "дёрганьем" линии. Как можно этого избежать? Нужно, чтобы просто линия становилась толще при наведении.

3 комментария
полилиния,события,API 2.0
Полилинии в api 2.0 и их стилизация.
Victor SmirnoFF
9 сентября 2013, 14:52

Есть, код. Здесь я пытаюсь каждой линии выставить свой цвет, в зависимости от того, каккой цвет выберет пользователь. Проблема в том, что Цвет выставляется для всех полилиний вместе, а должен для каждой линии свой цвет, и выставляется только для последней добавленной на карту. Помогите пожалуйста разобраться!!!!!

11 комментариев
Javascript,API 2.0,полилиния
geometryEditor.LineString - как добраться до выбранной вершины?
nolan23
5 сентября 2013, 11:01

 

var collection = new ymaps.GeoObjectCollection([], {

            editorMenuManager: function (items) {

                {

                    title: "Разделить линию",

                    onClick: function (e) {

                        /* вот тут */

                    }

                });

                return items;

            } 

 

как добраться до выбранной вершины и редактируемой ломаной?

2 комментария
редактор геометрии,полилиния,API 2.0
Количество точек в kml файле
iytin-ne
27 июня 2013, 22:30

Здравствуйте. Заинтересовал вопрос, о том существует ли какое-то ограничение в количестве передаваемый точек через kml файл? Задача у меня строил polyline, который отображает историю движения авто за месяц, и там может быть  ооочень много точек. И еще вопрос по kml, когда подрузил раз файл на карту то все норм, а после внесения изменений в файле и обновления страници изменения не видны на карте, показывается старый вариант, это связано с кешированием или я где-то туплю?)

2 комментария
KML,полилиния,API 2.0,geoXml
Событие у ломаной линии.
Victor SmirnoFF
27 июня 2013, 17:56

Какое событие отвечает за прекращение рисование кривой, но что бы все точки(вершины) остались на месте, то есть не исчезли (polyline.edeter.Stopediting)? Заранее спасибо)

1 комментарий
редактор геометрии,полилиния,события,API 2.0
Помогите разобраться с полилиниями.
Victor SmirnoFF
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 комментариев
полилиния,API 2.0,коллекции
Как на карту добавить несколько полилиний?
Victor SmirnoFF
25 июня 2013, 22:06

рисую полилинии с помощью следующей функции 

function createpolyYA() {
    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
        });
    var 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 {
                $.post('/templates/editya.php', {
                    'coord': JSON.stringify(coord),
                    'num': JSON.stringify(num)
                }, function (coord, num) {
                    console.log(Удача)
                }, 'json');
                alert("Геолиния успешна сохранена. Для дальнейшей работы с ней перейдите в редактор геолиний!");
            }
        });
}
function proverka(input) {
    var value = input.value;
    var rep = /[-\.;!№#@$%^&?*()_=+":'a-zA-Zа-яА-Я]/;
    if (rep.test(value)) {
        value = value.replace(rep, '');
        input.value = value;
        alert("Номер должет состоять только из чисел!!!");
    }
}

 

Но рисуется только одна ПОЛИЛИНИЯ. Как добавить возможность рисование двух и более полилиний? Заранее спасибо.

5 комментариев
Javascript,API 2.0,полилиния
Как из объекта myPolyline достать координаты?
Victor SmirnoFF
20 июня 2013, 17:13

 

var itemss = [];

res.geoObjects.each(function (item) {

    itemss.push(item);

})

//Вывод полученных координат

for (var i = 0; i < itemss.length; i++) {


    var victor = res.geoObjects.get(i).geometry.getCoordinates();


    //var myPolyline = new Array();

    myPolyline[i] = new ymaps.Polyline(victor, {}, {

        // Задаем опции геообъекта.

        // Цвет с прозрачностью.

        strokeColor: "#0066ffff",

        // Ширину линии.

        strokeWidth: 4,

        // Максимально допустимое количество вершин в ломаной.

        editorMaxPoints: 500,

        // Добавляем в контекстное меню новый пункт, позволяющий удалить ломаную.

        editorMenuManager: function (items) {

            items.push({

                title: "Удалить линию",

                onClick: function () {

                    for (var i = 0; i < itemss.length; i++)

                        myMap.geoObjects.remove(myPolyline[i]);

                }

            });

            return items;

        }

 

    });

 

Как же оттуда достать координаты?

6 комментариев
полилиния,координаты,API 2.0
Помогите разобраться.
Victor SmirnoFF
19 июня 2013, 16:57

 

//Функция обработки XML

function onGeoXmlLoad(res) {

    // myMap.geoObjects.add(res.geoObjects);

    if (res.mapState) {

        //res.mapState.applyToMap(myMap);

        //Переносим всю коллекцию в массив

        var itemss = [];

        res.geoObjects.each(function (item) {

            itemss.push(item);

        })

        //Вывод полученных координат

        for (var i = 0; i < itemss.length; i++) {

 

            var victor = res.geoObjects.get(i).geometry.getCoordinates();

 

            var myPolyline = new Array();

            myPolyline[i] = new ymaps.Polyline(victor, {}, {

                // Задаем опции геообъекта.

                // Цвет с прозрачностью.

                strokeColor: "#0066ffff",

                // Ширину линии.

                strokeWidth: 4,

                // Максимально допустимое количество вершин в ломаной.

                editorMaxPoints: 500,

                // Добавляем в контекстное меню новый пункт, позволяющий удалить ломаную.

                editorMenuManager: function (items) {

                    items.push({

                        title: "Удалить линию",

                        onClick: function () {

                            myMap.geoObjects.remove(myPolyline[i]);

                        }

                    });

                    return items;

                }

 

            });

            myMap.geoObjects.add(myPolyline[i]);

            //myPolyline[i].editor.startEditing();

            alert(myPolyline[i]);

            $("span[id='startEditPolyline']").click(

 

                function () {

 

                    myPolyline[i].editor.startEditing();

                    alert(myPolyline[i]); //Здесь выдает undefined  

 

                });

        }

 

    }

 

    //Нажимаем для редактирования полилинии

    /* $("span[id='startEditPolyline']").click(

                function () {

                   

  myPolyline.editor.startEditing();

  

 });*/

    $("span[id='stopEditPolyline']").click(

        function () {

 

            myPolyline.editor.stopEditing();

            alert("Линия успешно сохранена :)");

        });

}

 

 Короче не работет функция редактирования геолинии. myPolyline[i].editor.startEditing(); (возвращает результат

Uncaught TypeError: Cannot read property 'editor' of undefined, я так понимаю не видит массив из-за функции или что. Заранее спасибо за помощь.

3 комментария
Javascript,API 2.0,полилиния
Как фокусироваться на метке или геолинии.
Victor SmirnoFF
18 июня 2013, 21:40

Здравствуйте. Подскажите как постоянно фокусироваться на метке или геолинии. Что бы при перетаскивании карты, нас опять возвращали на метку? Спасибо заранее.

4 комментария
метка,полилиния,API 2.0
Отрисовка траектории заданной длины
sofmes
18 июня 2013, 10:58

Доброго времени суток. Возник вопрос по отрисовке траектории.

К примеру, у меня есть две точки А и Б, расстояние между ними 8 километров. Можно ли отследить отрисовку данной траектории, и когда будет отрисована траектория длиной 4 километра, перестать рисовать.

Другими словами условие, если длина траектории больше 4 километров, отрисовку прекратить.

3 комментария
API 2.0,маршрутизация,полилиния,измерение расстояний
Как координаты передать js переменной?
Victor SmirnoFF
16 июня 2013, 19:44

Здравствуйте. Есть переменная js( var poli = "[55.80, 37.50],[55.80, 37.40],[55.70, 37.50],[55.70, 37.40]";) в ней как видно хранятся координаты. мне нужно эти координаты передать в 

 

var myPolyline = new ymaps.Polyline([

        // Указываем координаты вершин.

       <-------СЮДА переменную poli----->

    ], {}, {

        // Задаем опции геообъекта.

        // Цвет с прозрачностью.

        strokeColor: "#00000088",

        // Ширину линии.

        strokeWidth: 4,

        // Максимально допустимое количество вершин в ломаной.

        editorMaxPoints: 6,

        // Добавляем в контекстное меню новый пункт, позволяющий удалить ломаную.

        editorMenuManager: function (items) {

            items.push({

                title: "Удалить линию",

                onClick: function () {

                    myMap.geoObjects.remove(myPolyline);

                }

            });

            return items;

        }

    });

 

Не знаю как сделать, что бы значение этой переменной распечаталось в нужном месте кода. Когда переменная была на PHP было проще, там я делал вот так :

var myPolyline = new ymaps.Polyline([

        // Указываем координаты вершин.

       <? echo (poli);?>

    ], {}, {...

Вроде бы за это отвечает document.write, но увы он распечатывает ее в теге body, вообще на пустой странице( Как быть?

 

8 комментариев
полилиния,координаты,API 2.0
Загрузка координат из XML(для дальнейшего отображения на яндекс картах).
Victor SmirnoFF
14 июня 2013, 13:45

Здравствуйте уважаемы пользователи. Вопрос у меня следующий... У меня есть XML файл из которого я подгружаю координаты _ГЕОЛИНИЙ_. Массив с геолинией выглядит следующим образом:
 

Array
(
    [0] => [54.33231759676864,48.38716080263373],[54.33217965353232,48.385819698126305],[54.33298222587114,48.3853154428315],[54.333157786472725,48.385229612143014],[54.333251836485275,48.385390544683936],[54.33328318644142,48.3856373079133]
    [1] => [54.3054127121529,48.389606914611434],[54.30546918042839,48.38936015138208],[54.30544408342667,48.38909193048059],[54.30543153492004,48.38882370957911]
    [2] => [54.33717497382992,48.5417303423243],[54.3370558551911,48.541762528832464]
    [3] => [54.35749233551292,48.564284447216394],[54.35752366690122,48.56483161785544],[54.35764272595778,48.56519639828145]
    [4] => [54.382757580097376,48.598030423845636],[54.38258849472276,48.59824500056684],[54.38100930700113,48.594699181806796],[54.379530895156755,48.5913226075243],[54.3775673248255,48.586870612394954],[54.374878071232025,48.58081963315011],[54.37279618554164,48.57608892187275],[54.37153085108996,48.573277966825145]
)
(Это пример массиваБ там на самом деле больше координат, но не суть).
Все это дело отображается следующим методом
var myPolyline = new ymaps.Polyline([
        // Указываем координаты вершин.
<? echo ($fluer[0]) ?>
], {}, {
        // Задаем опции геообъекта.
        // Цвет с прозрачностью.
        strokeColor: "#0066ffff",
        // Ширину линии.
        strokeWidth: 4,
        // Максимально допустимое количество вершин в ломаной.
        editorMaxPoints: 100,
        // Добавляем в контекстное меню новый пункт, позволяющий удалить ломаную.
        editorMenuManager: function (items) {
            items.push({
                title: "Удалить линию",
                onClick: function () {
                    myMap.geoObjects.remove(myPolyline);
                }
            });
            return items;
        }
    });

 
То есть в переменной $fluer[0] хранится первая часть координат в ячейке [0]. Мне надо туда передать еще остальные ячейки с координатами (то есть   и т.д.) Все бы было просто. Но мне необходимо, что бы координаты передавались отдельными блоками. А не все вместе, так как полилинии рисуются коряво. Так как конечные координаты одной ячейки соединяются с начальными координаты следующей ячейки. И получается неправильная линия между ними (а между ними линии быть вообще не должно). Так как передать координаты блоками, ну или иначе говоря разными полилиниями? Заранее огромное спасибо :)

3 комментария
полилиния,координаты,API 2.0
Изменение цвета участков маршрута
Александ Арбузов
29 мая 2013, 10:26

Такая задачка.

Запросом получаю массив с координатами и запихиваю в маршрутизатор. Он мне конечно номерует все точки с первого по n-ю и соединяет.

Задача: могу ли я через раз менять цвет маршрута?  Другими словами сделать зебру?

 

ymaps.route(JSON.parse('[' + auxArr + ']'), {
    // Опции маршрутизатора
    mapStateAutoApply: true, // автоматически позиционировать карту
    avoidTrafficJams: true,
}).then(function (route) {
    myRoute && myMap.geoObjects.remove(myRoute);
    myMap.geoObjects.add(myRoute = route);
})

 

 

 

5 комментариев
маршрутизация,полилиния,API 2.0,стили
как достать координаты полилинии
iytin-ne
15 мая 2013, 18:04

 ymaps.geoXml.load('http://mapz.cybers.net.ua/trek/gpx.xml')

            .then(onGeoXmlLoad);

 

            // Обработчик загрузки XML-файлов.

    function onGeoXmlLoad (res) {

        myMap.geoObjects.add(res.geoObjects.get(0));

        console.log(res.geoObjects.get(0));      //вот как тут дальше?  

    }

 

пробовал res.geoObjects.get(0).geometry.getCoordinates() но почему-то ничего не находит(

9 комментариев
координаты,GPX,полилиния,geoXml,API 2.0,коллекции
Получение координат текущей точки линии в режиме редактирования
Віктор Дзундза
11 мая 2013, 16:01

 

function menuManager (items, model) {

    items.push({

        id: 'addStation',

        title: "Set as station",

        onClick: function() {

            console.log('как узнать координаты текущей точки ?');

 

        }

    });

    return items;

}

 

 

Как узнать координаты точки для которой я вызвал меню?

3 комментария
редактор геометрии,полилиния,API 2.0
По какой точке трека кликнули?
Fabel.A
30 марта 2013, 18:11

Трек загружен на карту из GPX. Как определить, по какой именно точке трека был произведен клик? Где-то в недрах API это происходит - baloon показывает время точки, по которой кликнули. А как мне получить это время (и др. св-ва точки) в своем обработчике клика ?

 ymaps.geoXml.load( 'http://myhost.ru/FILE.GPX' ).then( function(res) {

        res.geoObjects.events.add( 'click', function( e ) {

            var object = e.get('target'); // target соотвествует тегу "trkseg" из GPX-файла, т.е. множеству точек трека, а не одной

            console.log( object.properties.get('metaDataProperty').gpxPoints ); // вот все точки трека, но на них не повесить обработчик клика, это просто данные

        } );

        myMap.geoObjects.add( res.geoObjects );

 

3 комментария
geoXml,полилиния,события,API 2.0,GPX