我用ruby编写了一个聚类算法,但是我不知道为什么聚类前的元素大小是67,聚类后元素的大小是66。某个地方从数组中跳过索引。
MarkerCluster.new(reports, distance, zoom).clusterize
class MarkerCluster
...
def initialize(markers, distance, zoom)
@markers, @distance, @zoom = markers, distance, zoom
@map_markers = []
end
...
def clusterize
puts "The size of markers before clustering #{@markers.size}" # prints 67
marker_count = 0
cluster.each do |item|
if item.is_a?(Array)
marker_count += item.size
map_markers << create_map_marker(item)
else
marker_count += 1
map_markers << item
end
end
puts "The size of markers after clustering: #{marker_count}" # prints 66
to_map
end
...
# return collection where coordinates closer than distance are clustered together.
def cluster
cluster_list = []
i = j = 0
i = markers.size - 1
while(i > 0)
cluster = []
j = i - 1
while(j > 0)
pixels = pixel_distance(markers[i].latitude, markers[i].longitude,
markers[j].latitude, markers[j].longitude)
if distance > pixels
cluster << markers[j]
j -= 1
else
break
end
end
if cluster.size > 0
cluster << markers[i]
cluster_list << cluster
i = j + 1
else
# no cluster, so just add single marker
cluster_list << markers[i]
end
i -= 1
end
cluster_list
end正如您所看到的,我只是遍历一个数组并比较索引,以确定它们是属于集群还是作为一个单元。但是,我不知道集群方法在哪里跳过索引。
发布于 2014-03-05 22:14:51
可能这一行应该改为while (i >=0)。因为在初始化i = markers.size -1的值时,以及在对I>0进行检查时,不考虑索引i=0。
如果有帮助请告诉我
https://stackoverflow.com/questions/22210421
复制相似问题