Клуб API Карт

Отображение нескольких точек на карте

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

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

Помогите пожалуйста решить задачу.

Имеются данные с координатами нескольких точек.

Координаты точек берутся из базы и постоянно меняются.

На данный момент удается вывести все точки на карте, но при повторном выводе эти точки дублируются(не удаляются перед выводом новых).

Данные приходят в готовом виде. Массив с координатами и два объекта со свойствами точки.

 

 

myMap.geoObjects.remove(myPlacemark);

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

//Координатыconsole.log($cars_info[i][0]); 

//Надписиconsole.log($cars_info[i][1]);

//Свойстваconsole.log($cars_info[i][2]);

myPlacemark = new ymaps.Placemark(

$cars_info[i][0]

,$cars_info[i][1]

,$cars_info[i][2]

);

myMap.geoObjects.add(myPlacemark);

}

 

Уверен что есть какой-то другой способ вывода.

Спасибо!

17 комментариев
Комментарий удалён

var objects = new ymaps.GeoObjectCollection();

myMap.geoObjects.add(objects);

if(objects.getLength() > 0){ // Проверяем есть ли объекты в коллекции, если есть то удялем их

objects.removeAll()

}

objects.add(new ymaps.Placemark([0,0])) // Добавляем объекты в коллекцию

 

Максим Новиков
28 января 2016, 00:48

Удаление объектов всеравно не происходит.

var objects = new ymaps.GeoObjectCollection();

if(objects.getLength() > 0){

objects.removeAll();

}

for(var i=0; i

objects.add(new ymaps.Placemark(

$cars_info[i][0]

,$cars_info[i][1]

,$cars_info[i][2]

)

);

}

myMap.geoObjects.add(objects);

При повторном вызове функции точки не удаляются, а дублируются.

var objects = new ymaps.GeoObjectCollection();

myMap.geoObjects.add(objects);


if(objects.getLength() > 0){

objects.removeAll();

}

for(var i=0; i

objects.add(new ymaps.Placemark(

$cars_info[i][0]

,$cars_info[i][1]

,$cars_info[i][2]

)

);

}

вот так надо

Максим Новиков
28 января 2016, 00:48

var objects = new ymaps.GeoObjectCollection();

myMap.geoObjects.add(objects);

if(objects.getLength() > 0){

objects.removeAll();

}

for(var i=0; i

objects.add(new ymaps.Placemark(

$cars_info[i][0]

,$cars_info[i][1]

,$cars_info[i][2]

)

);

}

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

objects.removeAll(); не работает...

Максим Новиков
28 января 2016, 00:48

myMap.removeAll();

Uncaught TypeError: Object # has no method 'removeAll'

myMap.geoObjects.removeAll()

Максим Новиков
28 января 2016, 00:48

myMap.geoObjects.removeAll();

Uncaught TypeError: Object [object Object] has no method 'removeAll'

ссылку на проект или код полностью

Максим Новиков
28 января 2016, 00:48

Пожалуйста.

Немного упростил, но суть та же.

http://zxz.zz.mu/multipoints.php

Код.

 

var objects = new ymaps.GeoObjectCollection();

myMap.geoObjects.add(objects); вот этот код вытащите из функции

 

код нужно иницирвать после ymaps.ready

Я щас сам напишу вам решение

$(document).ready(function(){

// инициализация карты

ymaps.ready(big_map_init);

$("#BigMap").height($(window).height()-10);

$("#BigMap").width($(window).width()-10);

});

    var myMap;

var objects;

 

function big_map_init () {

myMap = new ymaps.Map("BigMap", { 

center: [59.94, 30.31],

zoom: 11,

behaviors: ['drag','scrollZoom']

});

myMap.controls

.add('zoomControl')      // Кнопка изменения масштаба

.add('typeSelector');    // Список типов карты

      objects = new ymaps.GeoObjectCollection();

 myMap.geoObjects.add(objects);

 }

 

 /********************************************/

// Данные о водителях on-line

/********************************************/

 function get_cars_coordinates(){

if(objects.getLength() > 0){

objects.removeAll();

}

for(var i=0; i

objects.add(new ymaps.Placemark(

[59.94, 30.31],{

            // Свойства.

            // Содержимое иконки, балуна и хинта.

            iconContent: '1',

            balloonContent: 'Балун',

            hintContent: 'Стандартный значок метки'

        }, {

            // Опции.

            // Стандартная фиолетовая иконка.

            preset: 'twirl#violetIcon',

 draggable: true

        }

)

);

}

 

 }

Максим Новиков
28 января 2016, 00:48

$(document).ready(function(){

var myMap;

var objects;

// инициализация карты

ymaps.ready(big_map_init);

 

$("#BigMap").height($(window).height()-10);

$("#BigMap").width($(window).width()-10);

 

});

var myMap;

var objects;

 

function big_map_init () {

myMap = new ymaps.Map("BigMap", { 

center: [59.94, 30.31],

zoom: 11,

behaviors: ['drag','scrollZoom']

});

myMap.controls

.add('zoomControl')      // Кнопка изменения масштаба

.add('typeSelector');    // Список типов карты

var objects = new ymaps.GeoObjectCollection();

myMap.geoObjects.add(objects);

}

 /********************************************/

// Данные о водителях on-line

/********************************************/

 function get_cars_coordinates(){

 

if(objects.getLength() > 0){

objects.removeAll();

}

for(var i=0; i

objects.add(new ymaps.Placemark(

[59.94, 30.31],{

            // Свойства.

            // Содержимое иконки, балуна и хинта.

            iconContent: '1',

            balloonContent: 'Балун',

            hintContent: 'Стандартный значок метки'

        }, {

            // Опции.

            // Стандартная фиолетовая иконка.

            preset: 'twirl#violetIcon',

 draggable: true

        }

)

);

}

 

 }

 

При попытке вызвать ф-ию ошибка:

Uncaught TypeError: Cannot call method 'getLength' of undefined


big_map_init () {

переменная var object уже создана

var objects = new ymaps.GeoObjectCollection() // Надо без var

objects = new ymaps.GeoObjectCollection() // Вам нужно ее редактировать а не создавать по новой


 

Максим Новиков
28 января 2016, 00:48

Большое Спасибо!

Теперь все заработало!

Коллеги. Вы точно велосипед не изобрели? http://ymapsapi.ya.ru/replies.xml?item_no=1763

Максим Новиков
28 января 2016, 00:48

а зачем эти дополнительные сложности? зачем создавать xml-файл, когда все данные есть в массиве и все отлично работает?