Подскажите где я допускаю ошибку?
Подскажите, пожалуйста, у меня есть функция которая рисует на карте треугольник по 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(); } Подскажите где я допускаю ошибку? Спасибо |
Строки не объекты, их следует пропустить через JSON.parse перед использованием.
|
Ваша ошибка в то что вы нифига не понимаете что делаете.
Но даже нифига не зная можно тупо сравнить. Надо так: 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 - массив, содержащий объекты, во втором - массив, содержащий массив, содержащий, в свою очередь, строки. |
Спасибо, что разъяснили.
Написал так: 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) + '}'); ? Заранее спасибо. |
Изменил строку poly.push({ lng: obj.bounds().center().lng.toPrecision(7) , lat: obj.bounds().center().lat.toPrecision(7) });
Если теперь посмотреть в alert то выдает уже [object Object],[object Object],[object Object], … В принципе должно уже рисоваться, а не хочет ((( Подскажите … где еще неправильно ??? |
Форматируйте код.
[JS] [/JS] [HTML] [/HTML] Возможно вам сразу станет понятно. В любом случае в не форматированном разбираться лень. |
Убрал лишний массив poly, оставил тот который объявляется выше этих функций polly1.
Теперь рисует полигон согласно внесенным координатам (улицы или просто адресам(индексам)) в массив. Всем спасибо… тема закрыта. ) P.S (Отдельное спасибо Aetae) |
Часовой пояс GMT +3, время: 07:21. |