Клуб API Карт

Проблема отображения Polyline IE (Explorer 7 и выше)

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

//point[1] = 30.427

//point[0] = 50.743

 var mark = new YMaps.GeoPoint(point[1],point[0]);

потом в цикле я в ассоциативный массив запихиваю точки

check_points[""+point[6]+""].push(mark);

и потом же в цикле я для каждого элемента ассоциативного массива check_points строю полилинию

 

for ( var line in check_points )

{

   var poly = new YMaps.Polyline(check_points[line]);

   poly.setStyle("example#CustomLine");

   map.addOverlay(poly);

}

в итоге ошибка возникает после попытке создать полилинию

 

Сведения об ошибке на веб-странице

 

Агент пользователя: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

штамп времени: Fri, 15 Apr 2011 07:11:00 UTC

 

Сообщение: Недопустимый аргумент.

Строка: 11

Символ: 246999

Код: 0

URI-код: http://api-maps.yandex.ru/1.1.19/_YMaps.js

 

 

Сообщение: 'undefined' -  есть null или не является объектом

Строка: 11

Символ: 64997

Код: 0

URI-код: http://api-maps.yandex.ru/1.1.19/_YMaps.js

 

попытался на страницу включить в тег 

<html  xmlns="http://www.w3.org/1999/xhtml"  xmlns:vml="urn:schemas-microsoft-com:vml">  результата никакого не дало.

На браузерах Chrome и Firefox работает всё нормально.

 

 

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

Попробуйте добавить на страницу:

Или же создавать линии в обработчике window.onload.

Если проблема не решится, дайте ссылку на страницу.

я не могу создавать линии в обработчике window.onload

мне нужно создавать полилинии в определённый момент.

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

 

Сведения об ошибке на веб-странице

 

Агент пользователя: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

штамп времени: Fri, 15 Apr 2011 07:58:35 UTC

 

 

Сообщение: Недопустимый аргумент.

Строка: 11

Символ: 246999

Код: 0

URI-код: http://api-maps.yandex.ru/1.1.19/_YMaps.js

 

 

 

Вы может дать ссылку?
И фактически линии у вас создаются до window.load или после?

я работаю на localhost. линии создаются после того как загрузилась карта, по нажатии на button. Могу дать часть кода в котором идёт прорисовка полилинии.

$.post('scripts/monitoringData.php',{func_name:'show_route', array_of_imei: array_of_imei, CurrTime:CurrTime, PrevTime:PrevTime}, function(data){
            PrevTime = CurrTime;
            if (data != undefined && data !=""){
                var points = data.split("\n");
                for(var i=0;i                    var point = points[i].split("\t");
                   
                                       
                    var mark = new YMaps.GeoPoint(point[1],point[0]);
                    current_coord_array[""+point[6]+""] = mark;

                    if (check_points[""+point[6]+""] == undefined){
                        check_points[""+point[6]+""] = [];
                        check_points[""+point[6]+""].push(mark);
                    } else {
                        check_points[""+point[6]+""].push(mark);
                    }
                }
                for ( var line in check_points )
                {

                    var poly = new YMaps.Polyline(check_points[line]);
                   
                    poly.setStyle("example#CustomLine");
                    if(lastPoly[line]){
                        map.removeOverlay(lastPoly[line]);   
                    }                   
                    lastPoly[line] = poly;                   
                   
                    map.addOverlay(poly);
                }
            }
        });
на сколько я понял эта ошибка создаётся при попытке применить стиль в объекту-полилиния, который был создан с ошибкой.
var poly = new YMaps.Polyline(check_points[line]); вот в этом месте
Sergey Konstantinov
28 января 2016, 06:11

Вы уверены, что в массиве check_points лежат только массивы точек?

Попробуйте добавить условие:

  for ( var line in check_points )
  {

    if (check_points[line] && YMaps.jQuery.isArray(check_points[line])) {

...

да уверен, в массиве содержатся только объекты точек
http://s45.radikal.ru/i107/1104/c4/0ec4eb33c907.jpg
Sergey Konstantinov
28 января 2016, 06:11

На приведённом Вами скриншоте как раз видно, что первые три элемента - undefined.

К тому же, это скрин не из IE.

там первые 11110 элементов undefined. Потому что это массив, и точки в массиве я разделил таким образом. Более того далее используется цикл for в котором обрабатываются только существующие элементы многомерного массива.
http://i060.radikal.ru/1104/f1/d6c6e44db5cc.jpg
тут видно какая формируется объект GeoPoint, которая потом сохраняется в массив. Тут не может быть синтаксической ошибки, такое ощущение что всё таки связь с vml
Sergey Konstantinov
28 января 2016, 06:11

> Более того далее используется цикл for в котором обрабатываются только существующие элементы многомерного массива.

В Вашем коде я не вижу проверки на существование элемента.

Есть подозрение, что ошибка именно в коде, а не в VML.

в Chrome и firefox бы тогда не работало. Проверку поставил - результат тот же.
Sergey Konstantinov
28 января 2016, 06:11

Вы не можете выложить скрипт на какой-то публичный хост?

сегодня уже навряд ли. Я думаю только в понедельник.

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

Есть подозрение, что вы передаете в YMaps.Polyline не корректные данные.

Рекомендую используя дебаггер проверить что именно уходит в YMaps.Polyline.

выложить на общий сервер не могу, но меня удивил факт что массив, из которого потом строится полилиния и в маленьком рабочем примере и в нерабочем примере - идентичный. На первом скрине - рабочий пример, которые рисует квадрат, а второй мой. Не могу понять в чём бок или баг? (((

http://s60.radikal.ru/i170/1104/ac/e8729016b6c8.jpg

http://s41.radikal.ru/i091/1104/c5/854a7ca7e9a8.jpg