Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите где я допускаю ошибку? (https://javascript.ru/forum/misc/15486-podskazhite-gde-ya-dopuskayu-oshibku.html)

ed_17 01.03.2011 12:16

Подскажите где я допускаю ошибку?
 
Подскажите, пожалуйста, у меня есть функция которая рисует на карте треугольник по 3 координатам:

function vlayer() {
var area5 = new VArea();
area5 = {coords: [{ lng: 27.68555, lat: 51.53609 }, { lng: 32.49756, lat: 50.65294 }, { lng: 28.41064, lat: 49.23912 }],type: "area",
color: "#ff0000", opacity:0.4}

map.add(area5);
map.repaint();

Но когда я пытаюсь взять координаты из уже заранее созданного массива, у меня треугольник не появляется:
function vlayer() {

var area5 = new VArea();
var data = ["{lng: 27.68555, lat: 51.53609}", "{lng: 32.49756, lat: 50.65294}", "{lng: 28.41064, lat: 49.23912}"];
area5 = { coords: [data],type: "area", color: "#ff0000", opacity: 0.4}

map.add(area5);
map.repaint();
}
Подскажите где я допускаю ошибку? Спасибо

SV0L0CH 01.03.2011 12:38

Строки не объекты, их следует пропустить через JSON.parse перед использованием.

Aetae 01.03.2011 12:49

Ваша ошибка в то что вы нифига не понимаете что делаете.
Но даже нифига не зная можно тупо сравнить.

Надо так:
area5 = {coords: [{ lng: 27.68555, lat: 51.53609 }, { lng: 32.49756, lat: 50.65294 }, { lng: 28.41064, lat: 49.23912 }],type: "area",
color: "#ff0000", opacity:0.4}


Вы делаете так:
var data = ["{lng: 27.68555, lat: 51.53609}", "{lng: 32.49756, lat: 50.65294}", "{lng: 28.41064, lat: 49.23912}"];
area5 = { coords: [data],type: "area", color: "#ff0000", opacity: 0.4}
Что равносильно:
area5 = { coords: [["{lng: 27.68555, lat: 51.53609}", "{lng: 32.49756, lat: 50.65294}", "{lng: 28.41064, lat: 49.23912}"]],type: "area", color: "#ff0000", opacity: 0.4}


Теперь сравним:
[{ lng: 27.68555, lat: 51.53609 }, { lng: 32.49756, lat: 50.65294 }, { lng: 28.41064, lat: 49.23912 }]
[["{lng: 27.68555, lat: 51.53609}", "{lng: 32.49756, lat: 50.65294}", "{lng: 28.41064, lat: 49.23912}"]]

В первом случае coords - массив, содержащий объекты, во втором - массив, содержащий массив, содержащий, в свою очередь, строки.

ed_17 01.03.2011 15:42

Спасибо, что разъяснили.
Написал так:
var data =[{lng: 27.68555, lat: 51.53609}, {lng: 32.49756, lat: 50.65294}, {lng: 28.41064, lat: 49.23912}];
area5 = {coords: data,type: "area", color: "#ff0000", opacity: 0.4}

Все работает.

Подскажите, а если я массив polly пополняю в функции:
var polly1 = new Array();
function show_points_address() {
var poly = new Array();
var point = { lng: 30.5112, lat: 50.4550 };
map.center(point, 13);

VRemoteCall.request("address", form1.Text4.value + "9999", function callback(layer) {
for (var p = 0; p < layer.childs().length; p++) {

var obj = layer.childs(p);
poly.push( '{ lng:' + obj.bounds().center().lng.toPrecision(7) + ', lat:' + obj.bounds().center().lat.toPrecision(7) + '}');
}
polly1.push(poly);
}

);
}

У меня выходит массив polly1 в котором есть значения { lng:30.48206, lat:50.43444},{ lng:30.48873, lat:50.43675},{ lng:30.48989, lat:50.43683}, . . .
Этот массив я использую в функции show_gps() но полигон не рисуется.


function show_gps() {
var area4 = new VArea();
area4 = { coords: polly1, type: "area", color: "#ff0000", opacity: 0.4 }
map.add(area4);
alert(polly1);
map.repaint();
}

Подскажите пожалуйста, не работает потому что я один массив пишу в другой? (polly -- > polly1)
Или потому что тут ошибка poly.push( '{ lng:' + obj.bounds().center().lng.toPrecision(7) + ', lat:' + obj.bounds().center().lat.toPrecision(7) + '}'); ?

Заранее спасибо.

ed_17 01.03.2011 18:46

Изменил строку poly.push({ lng: obj.bounds().center().lng.toPrecision(7) , lat: obj.bounds().center().lat.toPrecision(7) });
Если теперь посмотреть в alert то выдает уже [object Object],[object Object],[object Object], …
В принципе должно уже рисоваться, а не хочет (((

Подскажите … где еще неправильно ???

Aetae 01.03.2011 19:00

Форматируйте код.
[JS] [/JS]
[HTML] [/HTML]
Возможно вам сразу станет понятно.
В любом случае в не форматированном разбираться лень.

ed_17 01.03.2011 19:39

Убрал лишний массив poly, оставил тот который объявляется выше этих функций polly1.
Теперь рисует полигон согласно внесенным координатам (улицы или просто адресам(индексам)) в массив.

Всем спасибо… тема закрыта. )

P.S (Отдельное спасибо Aetae)


Часовой пояс GMT +3, время: 15:47.