【发布时间】:2016-06-26 16:14:18
【问题描述】:
我的requirement 是使用mysql 在给定map 上计算两个locations 之间的distance。我在mysql 中找到了一个名为ST_Distance_Sphere 的函数,它返回一个球体上两个位置和/或多个位置之间的最小球面距离(以米为单位)。
当我使用ST_Distance_Sphere 和lat_lng_distance 函数计算两个位置之间的距离时,我发现ST_Distance_Sphere 给出的距离与lat_lng_distance 函数的距离不同。
我的lat_lng_distance功能码如下
CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(
POWER(SIN((lat1 - abs(lat2)) * pi()/180 / 2),
2) + COS(lat1 * pi()/180 ) * COS(abs(lat2) *
pi()/180) * POWER(SIN((lng1 - lng2) *
pi()/180 / 2), 2) ));
END
传递给ST_Distance_Sphere和lat_lng_distance函数的两个位置((38.898556,-77.037852),(38.897147,-77.043934))如下
SET @pt1 = ST_GeomFromText('POINT (38.898556 -77.037852)');
SET @pt2 = ST_GeomFromText('POINT (38.897147 -77.043934 )');
SELECT ST_Distance_Sphere(@pt1, @pt2)/1000,lat_lng_distance(38.898556,-77.037852,38.897147,-77.043934 );
我在google maps上查看了两个位置之间的距离,发现lat_lng_distance与两个位置之间的实际距离很接近。有人可以告诉我为什么ST_Distance_Sphere 没有给出两个位置之间的准确距离吗?
【问题讨论】:
标签: mysql sql mysql-workbench