我想从坐标(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(latitude)*111(km)为经度1°,5(km)为搜索半径。
问题:我希望找到至少 8 个城市,但 5 公里的半径对于浓缩区(许多城市)来说很小但很快,所以如果我search radius
对浓缩区使用太大,查询会很慢(很多结果:排序),但是对于非浓缩版search radius
来说太小了,至少找不到 8 个城市...
如果找到的城市数量<8(仅使用mysql) ,我如何进行递归查询,自动增加search radius
(x2)?
谢谢