2016-11-09 52 views
1

任何人都可以幫助我理解如何獲得最大/最小座標以及一系列座標?我試圖得到的是它可以從這些座標數組中獲得的最長距離。防爆。如何使用座標數組獲得最大/最小邊界

 
    var coordinates = [{ 
     lat: -231, 
     lng: 223l 
    }, { 
     lat: 43, 
     lng: -4323 
    }, { 
     lat: 42312, 
     lng: -231 
    }, { 
     lat: 435345, 
     lng: -6563 
    }] 

    // some filter calculation here... 


    // This is what I need 
    var min_coords = { lat, lng } 
    var max_coords = { lat, lng } 

回答

2

您可以創建值的數組,然後用Math.maxMath.min,以獲得最高值和最低值

var coordinates = [{ 
 
    lat: -231, 
 
    lng: 223 
 
}, { 
 
    lat: 43, 
 
    lng: -4323 
 
}, { 
 
    lat: 42312, 
 
    lng: -231 
 
}, { 
 
    lat: 435345, 
 
    lng: -6563 
 
}] 
 

 
var lat = coordinates.map(function(p) {return p.lat}); 
 
var lng = coordinates.map(function(p) {return p.lng}); 
 

 
var min_coords = { 
 
    lat : Math.min.apply(null, lat), 
 
    lng : Math.min.apply(null, lng) 
 
} 
 
var max_coords = { 
 
    lat : Math.max.apply(null, lat), 
 
    lng : Math.max.apply(null, lng) 
 
} 
 

 
console.log(min_coords); 
 
console.log(max_coords);

+0

哇,太好了。我認爲這一個作品... – olanchuy

1

使用Array.prototype.reduce通過數組來過濾解決方案爲最小值和最大值 - 演示如下:

var coordinates=[{lat:-231,lng:223},{lat:43,lng:-4323},{lat:42312,lng:-231},{lat:435345,lng:-6563}]; 
 

 
var result = coordinates.reduce(function(prev,curr){ 
 
    if(curr.lat < prev.min_cords.lat) 
 
    prev.min_cords.lat = curr.lat; 
 
    if(curr.lat > prev.max_cords.lat) 
 
    prev.max_cords.lat = curr.lat; 
 
    if(curr.lng < prev.min_cords.lng) 
 
    prev.min_cords.lng = curr.lng; 
 
    if(curr.lng > prev.max_cords.lng) 
 
    prev.max_cords.lng = curr.lng; 
 
    return prev; 
 
},{min_cords:{lat:Infinity,lng:Infinity},max_cords:{lat:-Infinity,lng:-Infinity}}); 
 

 
console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

+0

@olanchuy讓我知道你對這一個的想法,謝謝! – kukkuz

相關問題