我有一系列包含纬度和经度值的输入框。我创建了scipr,迭代这些输入框并抓取这些值以用于计算。有问题的计算是与Radians的转换,然后计算出点之间的距离。
我使用这些数据并将其存储在对象数组中,如下所示:
$('.plotrow').each(function () {
obj[this.id] = {
lat: $(this).find('.lat input').val(),
lon: $(this).find('.lon input').val()
};
});
我希望脚本忽略返回的任何输入值为null或空字符串。为了节省时间,我不想明确定义数组中的每个项目并查看它,有什么方法可以用递归循环这样做吗?如果是这样,任何人都可以举例说明这个吗?
这是我抓住价值后的成本。这段代码执行一些数学函数来计算距离,如果任何值为null则会破坏我的代码,这就是为什么我需要根除空值并停止尝试使用它们。
plot1LatRad = deg2rad(obj.plot1.lat);
plot1LonRad = deg2rad(obj.plot1.lon);
plot2LatRad = deg2rad(obj.plot2.lat);
plot2LonRad = deg2rad(obj.plot2.lon);
plot3LatRad = deg2rad(obj.plot3.lat);
plot3LonRad = deg2rad(obj.plot3.lon);
plot4LatRad = deg2rad(obj.plot4.lat);
plot4LonRad = deg2rad(obj.plot4.lon);
//A => B
var AtoBLat = plot2LatRad - plot1LatRad;
var AtoBLon = plot2LonRad - plot1LonRad;
//B => C
var BtoCLat = plot3LatRad - plot2LatRad;
var BtoCLon = plot3LonRad - plot2LonRad;
//C => D
var CtoDLat = plot4LatRad - plot3LatRad;
var CtoDLon = plot4LonRad - plot3LonRad;
AtoBSum = Math.pow(Math.sin(AtoBLat / 2), 2) + Math.cos(plot1LatRad) * Math.cos(plot2LatRad) * Math.pow(Math.sin(AtoBLon / 2), 2);
BtoCSum = Math.pow(Math.sin(BtoCLat / 2), 2) + Math.cos(plot2LatRad) * Math.cos(plot3LatRad) * Math.pow(Math.sin(BtoCLon / 2), 2);
CtoDSum = Math.pow(Math.sin(CtoDLat / 2), 2) + Math.cos(plot3LatRad) * Math.cos(plot4LatRad) * Math.pow(Math.sin(CtoDLon / 2), 2);
AtoBSqrt = 2 * Math.atan2(Math.sqrt(AtoBSum), Math.sqrt(1 - AtoBSum));
BtoCSqrt = 2 * Math.atan2(Math.sqrt(BtoCSum), Math.sqrt(1 - BtoCSum));
CtoDSqrt = 2 * Math.atan2(Math.sqrt(CtoDSum), Math.sqrt(1 - CtoDSum));