gpt4 book ai didi

mysql - mysql 中的 ST_Distance_Sphere 没有给出两个位置之间的准确距离

转载 作者:可可西里 更新时间:2023-11-01 07:04:14 33 4
gpt4 key购买 nike

我的要求 是计算给定map 上两个位置 之间的距离使用 mysql .我在 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

两个位置 ((38.898556,-77.037852),(38.897147,-77.043934)) 传递给了 ST_Distance_Spherelat_lng_distance函数如下

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 );

得到的结果如下 enter image description here

我在 google maps 上检查了两个位置之间的距离并发现 lat_lng_distance 接近两个位置之间的实际距离。谁能告诉我为什么是 ST_Distance_Sphere没有给出两个位置之间的准确距离?

最佳答案

ST_DISTANCE_SPHERE要求点表示为 POINT(longitude, latitude),您在代码中将它们颠倒了

set @lat1 = 38.898556;
set @lon1 = -77.037852;
set @lat2 = 38.897147;
set @lon2 = -77.043934;
SET @pt1 = point(@lon1, @lat1);
SET @pt2 = point(@lon2, @lat2);
SELECT ST_Distance_Sphere(@pt1, @pt2)/1000,
lat_lng_distance(@lat1,@lon1,@lat2,@lon2);

+-------------------------------------+-------------------------------------------+
| ST_Distance_Sphere(@pt1, @pt2)/1000 | lat_lng_distance(@lat1,@lon1,@lat2,@lon2) |
+-------------------------------------+-------------------------------------------+
| 0.549154584458455 | 0.5496311783790588 |
+-------------------------------------+-------------------------------------------+

这给出的结果更接近于您的函数返回的值。

关于mysql - mysql 中的 ST_Distance_Sphere 没有给出两个位置之间的准确距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939853/

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