如何从一组LatLng坐标池中查找最大的LatLng坐标对
实现思路
首先你得先明确你对坐标对「最大值」的定义,不同业务场景的判定规则完全不同,常见的判定逻辑有下面几种:
- 规则1:优先比较纬度(Lat),纬度更大的坐标判定为更大,纬度相等时再比较经度(Lng)大小,和你示例里的结果匹配,你的示例里第一个坐标纬度3.9是最大的,直接命中
- 规则2:计算坐标到原点(0,0)的欧氏距离,距离更大的判定为更大,你示例里第一个坐标的距离是√(3.9²+3.4²)≈5.17,也是三个里面最大的,也符合你的示例结果
- 规则3:两个维度的数值相加,和更大的坐标判定为更大,你示例里第一个坐标和为7.3,同样是最大的
具体实现代码(JS示例)
我们以最常用的「欧氏距离最大」规则为例,代码实现如下:
// 定义坐标数组 const latLngList = [ { lat: 3.9, lng: 3.4 }, { lat: 1.2, lng: 3.3 }, { lat: 0.4, lng: 2.4 } ] // 计算坐标到原点的平方距离(开方是单调运算,不开方不影响大小比较,性能更好) const getDistanceSquare = (point) => { return point.lat ** 2 + point.lng ** 2 } // 遍历找最大值 const maxPoint = latLngList.reduce((max, current) => { return getDistanceSquare(current) > getDistanceSquare(max) ? current : max }, latLngList[0]) console.log(maxPoint) // 输出 {lat: 3.9, lng: 3.4}
如果是要用「优先比纬度再比经度」的规则,只需要修改reduce里的比较逻辑即可:
const maxPoint = latLngList.reduce((max, current) => { if (current.lat !== max.lat) { return current.lat > max.lat ? current : max } return current.lng > max.lng ? current : max }, latLngList[0])
内容的提问来源于stack exchange,提问作者ololo
相关产品推荐
相关产品推荐

