【问题标题】:Is my function correct to calculate distance between two latitude and longitude?我的函数计算两个纬度和经度之间的距离是否正确?
【发布时间】:2011-12-06 09:40:32
【问题描述】:

我在 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

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

提前谢谢你。欢迎您发表您的建议。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    这看起来像 Mercantor 投影和 Harvesine 公式。在我看来是对的。根据您的数据,我得到“距离:0.05531 公里”。您能否尝试将 EARTH_RADIUS 设置为正确的值(6371)。我不确定你为什么选择半半径。这是我的来源:http://www.movable-type.co.uk/scripts/latlong.html

    【讨论】:

    • @PushpendraKuntal:修正了我的答案。
    猜你喜欢
    • 2012-11-22
    • 2018-06-11
    • 2015-11-05
    • 2011-09-16
    • 1970-01-01
    • 2012-10-13
    • 2014-04-10
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多