我正试图在map.SO中显示最近的分支位置。我想得到当前位置和分支位置之间差异最小的分支。我已经采取了这样的差异。
for(var i=0;i<$scope.locations.BranchAndAtms.length;i++){
var mapObject = $scope.locations.BranchAndAtms[i];
var differenceLat = (mapObject.lat - c.latitude);
var differenceLon = (mapObject.lon - c.longitude);
var Difference = (differenceLat + differenceLon);
alert(Difference );
现在我得到了我的array.how中每个分支之间的差异,以获得差异最小的值。
注意:我得到的差异有负值和正值。
答案 0 :(得分:0)
在for循环之外,您将要声明一个变量,该变量将跟踪哪个数组索引具有最低值,另一个变量用于当前最低值。默认情况下,它会将第一个项目存储为最低 - 如果您的数组中只有一个项目,这会派上用场。
var lowest_index = 0;
var lowest_value = 0;
在for循环中,您需要获取差异的绝对值。
for...
var differenceLat = Math.abs(mapObject.lat - c.latitude);
var differenceLon = Math.abs(mapObject.lon - c .longitude);
现在,将现有的最低值与当前值进行比较,如果当前值较低,请将lowest
设置为i
的值。
if(Difference < lowest_value) {
lowest_index = i;
lowest_value = Difference;
}
所以,您的代码应如下所示:
var lowest_index = 0;
var lowest_value = 0;
for(var i=0;i<$scope.locations.BranchAndAtms.length;i++){
var mapObject = $scope.locations.BranchAndAtms[i];
var differenceLat = Math.abs(mapObject.lat - c.latitude);
var differenceLon = Math.abs(mapObject.lon - c.longitude);
var Difference = (differenceLat + differenceLon);
if(Difference < lowest_value) {
lowest_index = i;
lowest_value = Difference;
}
}
答案 1 :(得分:0)
除了Steve的回答之外,我建议您查看如何正确计算位置之间的距离:Calculate distance between two latitude-longitude points? (Haversine formula)
因此,创建一个计算距离的函数:
function calculateDistance(currentLocation, branchLocation) {
/* the actual implementation, use answers from
* https://stackoverflow.com/questions/27928/ as reference
*
* Note that if you want, you could also use the actual latitude
* and longitude values as parameters for this function:
* calculateDistance(currentLat, currentLon, branchLat, branchLon)
*/
return distance;
}
然后在for-loop中使用它而不是当前的差值计算:
var Difference = calculateDistance(c, mapObject);
// or if you want to have the separate latitude and longitude parameters:
// var Difference = calculateDistance(c.latitude, c.longitude, mapObject.lat, mapObject.lon);
否则史蒂夫的方法是有效的。
(如果您希望显示给定距离内的所有分支位置,或者如果有多个分支具有完全相同的距离,则显示所有最近的分支位置,您需要存储距离并按它们排序。但这不属于主题,因为你只想显示一个分支位置。)