繁体   English   中英

JavaScript中的分层聚类

[英]Hierarchical Clustering in JavaScript

我在Google地图上有一些标记,我想通过它们之间的点对点距离来识别它们。 但是,我有一些困难:

首先,我遍历所有标记并创建一个数组:

for (var i = 0; i < MARKERS.length - 1; i++) {      
for (var j = i + 1; j < MARKERS.length; j++) {  
var distance_between = google.maps.geometry.spherical.computeDistanceBetween(point_i, point_j)
var valueToPush = {}
valueToPush.fromMarker = name_i
valueToPush.toMarker = name_j
valueToPush.distance = distance_between
cluster_array.push(valueToPush)
}
}

然后,我想做的是运行像这样的分层聚类算法:

var cluster = .cluster(cluster_array, MAX, threshold)

如果将阈值指定为500,那么我会得到一个这样的列表

群组0:标记A,标记Y,标记C

类别1:标记B

类别2:标记D,标记E

等等

每个群集向我显示的标记之间的距离都在500米之内。

非常感谢

如果有帮助,这就是我最终要做的事情:

function the_clusterer(cluster_array, num_radius) {
    console.log('Clustering distance array')
    for (var i = 0; i < cluster_array.length - 1; i++) {
        if (typeof(cluster_array[i]) != 'undefined') {
            var size_outer = 0,
                key_outer;
            for (key_outer in cluster_array[i]) {
                if (cluster_array[i].hasOwnProperty(key_outer));
                size_outer++;
            }
            for (var j = 0; j < size_outer; j++) {
                for (var k = i + 1; k < cluster_array.length; k++) {
                    if (typeof(cluster_array[i]) != 'undefined') {
                        var size_inner = 0,
                            key_inner;
                        for (key_inner in cluster_array[k]) {
                            if (cluster_array[k].hasOwnProperty(key_inner));
                            size_inner++;
                        }
                        var found_outer = 0
                        for (var l = 0; l < size_inner; l++) {
                            if (found_outer === 1) {
                                break;
                            }
                            if (cluster_array[k][l] == cluster_array[i][j]) {
                                found_outer++
                            }
                        }
                        if (found_outer > 0) {
                            for (var l = 0; l < size_inner; l++) {
                                var found_inner = 0
                                for (var m = 0; m < size_outer; m++) {
                                    if (cluster_array[i][m] == cluster_array[k][l]) {
                                        found_inner++
                                    }
                                }
                                if (found_inner == 0) {
                                    cluster_array[i][size_outer] = cluster_array[k][l]
                                    size_outer++
                                }
                            }
                            delete cluster_array[k];
                        }
                    }
                }
            }
        }
    }
    txtOutput.value += "Start Clusters: " + num_radius + "m.\n"
    var k = 0
    for (var i = 0; i < cluster_array.length - 1; i++) {
        var size_outer = 0,
            key_outer;
        for (key_outer in cluster_array[i]) {
            if (cluster_array[i].hasOwnProperty(key_outer));
            size_outer++;
        }
        if (size_outer > 0) {
            k++
            var temp_line = "Cluster " + k + ":"
            for (var j = 0; j < size_outer; j++) {
                temp_line = temp_line + " Marker " + cluster_array[i][j]
            }
            txtOutput.value += temp_line + ".\n"
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM