gpt4 book ai didi

Mysql递归查询/余弦球面定律

转载 作者:行者123 更新时间:2023-11-29 02:06:50 26 4
gpt4 key购买 nike

我想从坐标 (lat/lng) 搜索最近的位置到 mysql 数据库,我使用余弦的球面定律来搜索这些地方:

SELECT onlycoord.id, locations.name, locations.ascii,
locations.latitude, locations.longitude,
locations.country, locations.elevation,
locations.gtopo30, locations.timezone,
(6371 * ACOS(
COS( RADIANS( 48.48 ) ) *
COS( RADIANS( onlycoord.latitude ) ) *
COS(
RADIANS( onlycoord.longitude ) -
RADIANS( 2.20 )
) +
SIN( RADIANS( 48.48 ) ) *
SIN( RADIANS( onlycoord.latitude ) )
)) AS distance
FROM onlycoord USE INDEX (coordinate)
LEFT JOIN locations USE INDEX (id)
ON (onlycoord.id = locations.id)
WHERE onlycoord.latitude BETWEEN (
48.48 - ( 5 / 111 )
) AND (
48.48 + ( 5 / 111 )
) AND onlycoord.longitude BETWEEN (
2.20 - ( 5 / ABS( COS(
RADIANS( 48.48 )
) * 111 ) )
) AND (
2.20 + ( 5 / ABS( COS(
RADIANS( 48.48 )
) * 111 ) )
)
ORDER BY distance ASC
LIMIT 0, 20

其中6371是地球半径(km),111(km)是纬度1°,cos(纬度)* 111(km)是经度1°,5(km)是搜索半径。

问题:我想至少找到 8 个城市,但是 5 公里的半径对于密集区(许多城市)来说很小但很快,所以如果我使用的 search radius 对于密集区来说太大了,查询速度很慢(许多结果:按顺序排序),但对于非压缩的搜索半径 太小,无法找到至少 8 个城市...

如果找到的城市数 < 8(仅使用 mysql),我如何进行递归查询自动增加 search radius (x2)?

谢谢

最佳答案

MySQL 不支持递归查询。

您必须根据先前查询的结果进行新的查询。

顺便说一句,对于空间查询,我建议使用 spatial database .

关于Mysql递归查询/余弦球面定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569658/

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