2016-11-09 54 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

相关问题