2015-06-08 97 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