рони,
Вот обновленный код программы:
function init() {
var myMap = new ymaps.Map('map', {
center: [49.2469, 31.4811],
zoom: 6,
type: 'yandex#map',
behaviors: ['scrollZoom', 'drag'],
controls: []
});
var centroids = [{
object: "A",
point: [50.4404, 30.5582],
color: '#ff0000'
}, {
object: "B",
point: [49.3905, 27.0426],
color: '#B723FF'
}, {
object: "C",
point: [48.4931, 32.2721],
color: '#32B51D'
}, {
object: "D",
point: [49.5623, 34.5573],
color: '#1E98FF'
}];
var points = [{
point: [50.2153, 29.5036],
weight: 150,
name: 'a'
}, {
point: [50.3561, 32.1842],
weight: 200,
name: 'b'
}, {
point: [48.5515, 29.5915],
weight: 250,
name: 'c'
}, {
point: [47.6686, 32.4040],
weight: 300,
name: 'd'
}, {
point: [48.6972, 35.7438],
weight: 500,
name: 'e'
}, {
point: [47.1016, 35.2604],
weight: 400,
name: 'f'
}, {
point: [50.0390, 25.2796],
weight: 700,
name: 'g'
}];
var i = 0;
var j = 0;
var k = 0,
centerDistance = [];
$('#map').click(function(e) {
for (i; i < points.length; i++) {
centerDistance[i] = {
length: 0
};
for (j; j < centroids.length; j++) {
(function(a, b) {
ymaps.route([points[a]['point'], centroids[b]['point']]).then(function(router) {
var distance = Math.round(router.getLength() / 1000);
//вывод центроидов
var placemark1 = new ymaps.Placemark(centroids[b]['point'], { iconContent: centroids[b]['object'] }, {
// Задаем стиль метки (метка в виде круга).
preset: 'islands#darkGreenCircleIcon',
// Задаем цвет метки (в формате RGB).
iconColor: centroids[b]['color']
});
myMap.geoObjects.add(placemark1);
centerDistance[a][centroids[b]["object"]] = distance;
centerDistance[a]["length"]++;
if (centerDistance[a]["length"] == centroids.length){
centerDistance[k]['point'] = points[k]['point'];
centerDistance[k]['name'] = points[k]['name'];
k++;
}
if (k == points.length) {
centerDistance = centerDistance.map(function(c, b) {
var d = c.A, point = centerDistance[b]['point'],name = centerDistance[b]['name'],
centre = "A";
for (var k in c) {
var h = c[k];
k != "length" && h < d && (d = h, centre = k);
}
var centerPoints = {
center: centre,
point: point,
dist: d,
name: name
};
return centerPoints;
});
//подбор цвета точки с помощью сравнения каждого центра (буквы) с буквой центроида
for(var n in centerDistance)
for(var z in centroids){
//если буквы совпадают, то записываем цвет в текущую точку с такой же буквой
if(centerDistance[n]['center']==centroids[z]['object'])
centerDistance[n]['color']=centroids[z]['color'];
}
for(var m in centerDistance){
//вывод точек
var placemark2 = new ymaps.Placemark(centerDistance[m]['point'], { iconContent: centerDistance[m]['center'] }, {
// Задаем стиль метки (метка в виде круга).
preset: "islands#dotCircleIcon",
// Задаем цвет метки (в формате RGB).
iconColor: centerDistance[m]['color']
});
myMap.geoObjects.add(placemark2);
}
for(m=0;m<points.length;m++){
for(n=0;n<points.length;n++){
(function(c, e) {
if((centerDistance[c]['center']==centerDistance[e]['center']) && (centerDistance[c]['point']!=centerDistance[e]['point'])){
ymaps.route([centerDistance[c]['point'], centerDistance[e]['point']]).then(function(router) {
var dist = Math.round(router.getLength() / 1000);
});
}
})(m, n)
}
n=0;
}
}
});
})(i, j)
}
j = 0;
}
});
}
ymaps.ready(init);
Пытаюсь как в предыдущем примере найти расстояния, только уже не точка с центроидом, а точка которая принадлежит центроиду с другими точками этого же центроида. Например, точка принадлежит к центроиду А, то нужно найти расстояния этой точки со всеми остальными точками по очереди, которые тоже принадлежат этому центроиду. И так каждую точку: точка А1 и точка А2, точка А1 и точка А3, ... , точкаА1 и точка Аn; точка А2 и точка А3, точка А2 и точка А4, ... , точкаА2 и точка Аn; и так со всеми точками. Также, я думаю, их нужно будет записывать в массив? потому что потом нужно будет работать с предыдущим массивом centerDistance и этим. И, наверное, нужно обозначить как-то эти точки именами? я подавал им маленькие буквы англ. алфавита, может им просто номера дать, так проще будет?
Вот я пытался делать такую задумку, но что-то уже на начальном этапе не очень получается:
for(m=0;m<points.length;m++){
//console.log(pointsDistance);
for(n=0;n<points.length;n++){
(function(c, e) {
if((centerDistance[c]['center']==centerDistance[e]['center']) && (centerDistance[c]['point']!=centerDistance[e]['point'])){
console.log(centerDistance[c]['point'],centerDistance[e]['point']);
ymaps.route([centerDistance[c]['point'], centerDistance[e]['point']]).then(function(router) {
var dist = Math.round(router.getLength() / 1000);
});
}
})(m, n)
}
n=0;
}