Клуб API Карт

Добавление ломанной на карту через цикл

sergcloud
10 июля 2012, 15:45

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

Есть массив с координатами в таком виде (js): arr[key]['coords-y'], arr[key]['coords-x'].

Мне нужно создать из этого массива координат ломанную и добавить ее на карту. В документации я нашел 2 способа создания ломанной:

1.Не подходит, так как нельзя задать цикл, чтобы перебрать элементы массива

var line = new YMaps.Polyline([
new YMaps.GeoPoint(37.77751,55.76578),
new YMaps.GeoPoint(37.67751,55.86578),
new YMaps.GeoPoint(37.41321,55.92685)
], {
geodesic: true
});
map.addOverlay(line);

2. Не подходит, так как вершины вначале нужно кодировать в base64.

var polyline = YMaps.Polyline.fromEncodedPoints(
"-4aTAwItMQEI087-vuHkAICWmAA7S0wA_9LO_kNLTAABLTEBQUtMAIBpZ_8_S0wA-CwxAUBLTAAI087-PUtMAICWmABBS0wA_9LO_j5LTAA=",
"BCCBCCBCCB"
);
map.addOverlay(polyline);

Подскажите пожалуйста как можно создать ломанную из массива вершин, перебрав их в цикле (на мой взгляд самый удобный способ), и наложить ее карту. Скорее всего есть способ, не могу найти/догадаться.

3 комментария
Подписаться на комментарии к посту

Лучше сразу писать что речь идет про АПИ1.

Так и почему не подходит первый способ?

Да, АПИ1.

Есть двумерный массив:

arr[0]['coords-y'] arr[0]['coords-x']

arr[1]['coords-y'] arr[1]['coords-x']

...

arr[n]['coords-y'] arr[n]['coords-x']

Никак не могу догадаться, как я могу передать этот массив в качестве параметра YMapsPolilyne.

var line = new YMaps.Polyline([
new YMaps.GeoPoint(37.77751,55.76578),
new YMaps.GeoPoint(37.67751,55.86578),
new YMaps.GeoPoint(37.41321,55.92685)
]);

Можно так, если ломанная - "константа":

var line = new YMaps.Polyline([
new YMaps.GeoPoint(arr[0]['coords-y'],arr[0]['coords-x']),
new YMaps.GeoPoint(arr[1]['coords-y'],arr[1]['coords-x']),

...,
new YMaps.GeoPoint(arr[n]['coords-y'],arr[n]['coords-x'])
]);

Но у меня ломанная изменяется в зависимочти от того, что выбрал пользователь. Вариантов ломанной - огромное количество.

Я не знаю заранее количество (n) элементов массива arr. Поэтому на мой взгляд нужен перебор элементов циклом. Но как этот цикл связать с параметром YMaps.Polyline?...

Я не очень понимаю в чем проблема, вроде бы все решается в 3 строчки.

Нужно сначала сформировать массив для передачи его в конструктор YMaps.Polyline (например методом массива "map")

 

 

var verticles = arr.map(function (point) {    return new YMaps.GeoPoint(point['coords-y'], point['coords-x']);}),line = new YMaps.Polyline(verticles);