gpt4 book ai didi

javascript - javascript函数和sql server STD距离计算的距离差异

转载 作者:行者123 更新时间:2023-12-03 12:00:54 25 4
gpt4 key购买 nike

DECLARE @orig geography = geography::Point(17, 78, 4326);     
Select @orig.STDistance(geography::Point(17.001, 78.00001, 4326))/1000

给出

110.674385214845

function calculateDistance(lat1, lon1, lat2, lon2, units) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2 - lat1); // deg2rad below
var dLon = deg2rad(lon2 - lon1);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI / 180)
}`

给出0.11120001099379416公里

相差 0.6 米

最佳答案

原因是因为Haversine formula您上面使用的假设是一个球形地球,周长为 6371 公里,而地理数据类型使用 WGS 84 ellipsoid 。两者之间的主要区别在于,在 WGS 84 中,地球是扁球体(即,在两极被压扁),并且假设赤道周围的周长为 6378.13 公里,但两极周围的周长为 6356.75 公里。使用 WGS 84 椭球体进行计算的完整方程相当复杂,在大多数情况下半正弦被认为是一个很好的近似值。

如果您查看这个优秀资源的介绍,http://www.movable-type.co.uk/scripts/latlong.html ,作者明确指出了这一点,并建议忽略椭球体的误差平均约为 0.3%(你的约为 0.4%)。我在这里重复作者的引言,以防万一页面出现故障。

All these formulæ are for calculations on the basis of a spherical earth (ignoring ellipsoidal effects) – which is accurate enough* for most purposes… [In fact, the earth is very slightly ellipsoidal; using a spherical model gives errors typically up to 0.3% – see notes for further details].

关于javascript - javascript函数和sql server STD距离计算的距离差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com