我的函数计算两个经纬度之间的距离是正确的吗?



我在mysql工作

我想做一个函数返回两个坐标之间的距离

我想以英里为单位得到这个距离。

这是我的代码:-
DROP FUNCTION `checkDistance`//
CREATE DEFINER=`root`@`localhost` FUNCTION `checkDistance`(
lat1 DOUBLE(18,15),
lon1 DOUBLE(18,15),
lat2 DOUBLE(18,15),
lon2 DOUBLE(18,15)
) RETURNS double(18,15)
DETERMINISTIC
BEGIN
                DECLARE delta_lat DOUBLE(18,15);
                DECLARE delta_lon DOUBLE(18,15);
                DECLARE temp1 DOUBLE(18,15);
                DECLARE EARTH_RADIUS DOUBLE(18,15);
                DECLARE distance DOUBLE(18,15);
                SET lat1 = RADIANS(lat1);
                SET lon1 = RADIANS(lon1);
                SET lat2 = RADIANS(lat2);
                SET lon2 = RADIANS(lon2);
                SET delta_lat = lat2 - lat1;
                SET delta_lon = lon2 - lon1;
                SET temp1 = POW(SIN(delta_lat/2.0),2) + COS(lat1) * COS(lat2) * 
POW(SIN(delta_lon/2.0),2);
                SET EARTH_RADIUS = 3956.0;
                SET distance = EARTH_RADIUS * 2 * ATAN2(SQRT(temp1),SQRT(1-temp1));
                RETURN distance;
    END

每当我为测试提供这些参数时:-

lat1=26.860524000000000 lon1= 75.762005000000000

lat2= 26.860084000000000 lon2=75.761745000000000

则生成以下输出:-0.008681244150493

,但当我提供上述参数一些其他公式,然后我得到另一个结果像这样:-里程= 0.034364904109861

请告诉我哪个是正确的?我在网上搜索了很多次,有很多计算这个距离的公式。请检查我的以上代码,如果有问题请给我建议。我想要非常精确的结果。

提前谢谢你。

这看起来像商人的预测和哈维恩公式。在我看来是对的。根据你的数据,我得到"距离:0.05531公里"。您可以尝试将EARTH_RADIUS设置为正确的值(6371)吗?我不知道你为什么选择半半径。这是我的来源:http://www.movable-type.co.uk/scripts/latlong.html.

最新更新