2015-06-08 99 views
1

我已经开发了几年了,而且我似乎完全不知道的一个概念是地图缩小。减少坐标对集合的地图

我有一个定义方块的坐标集合,每个值都是两个数组的数组。每个内部数组本身都是两个数值的数组。

//Example values: 
//Each value is the following [[left, top],[right, bottom]] 
var boundingBoxes = [ 
[[20, 20], [50, 30]], 
[[15, 25], [35, 45]], 
[[25, 25], [40, 40]] 
] 

我需要这个集合减少一组坐标,让我来限定围绕所有的矩形,其坐标是集合中的一个矩形。因此,左侧和顶部的最低值以及右侧和底部的最高值。

//Output for above values should be 
[[15, 20], [50, 45]] 

更多背景。坐标的结构来自d3.path()。bounds(d)。我得到了多个状态的界限并创建了一个封装所有这些状态的边界框;用于缩放地图上重新定义的状态集合。

+0

不知道你的问题是 - 你问D3如何做到这一点(提示:使用'd3.max'和'd3.min')或如何使用map-reduce? –

+0

如何用map-reduce做到这一点。 – user3226861

+0

你正在使用什么特定的map-reduce实现? –

回答

1

如果你想与reduce解决这个下面会做的工作:

var boundingBoxes = [ 
    [[20, 20], [50, 30]], 
    [[15, 25], [35, 45]], 
    [[25, 25], [40, 40]] 
]; 

var result = boundingBoxes.reduce(function(prev,curr){ 
    var left = Math.min(prev[0][0], curr[0][0]), 
     top = Math.min(prev[0][1], curr[0][1]), 
     right = Math.max(prev[1][0], curr[1][0]), 
     bottom = Math.max(prev[1][1], curr[1][1]); 

    return [[left,top],[right,bottom]]; 
}); 

reduce的回调函数的previous和数组的元素current。您可以将第一个“previous”的初始值设置为reduce的第二参数。如果忽略初始值,则减少从第一个和第二个元素开始。

您只需比较每个值,并将该元素与回调中的适当值进行比较。

+0

正是我在找的,谢谢。 – user3226861