gpt4 book ai didi

iphone - 根据纬度经度进行半径搜索的SQL查询

转载 作者:IT老高 更新时间:2023-10-29 00:21:15 27 4
gpt4 key购买 nike

我们有一个 restaurant 表,其中每一行都有经纬度数据。

我们需要编写一个查询来执行搜索以查找所提供半径内的所有餐馆,例如1 英里、5 英里等

为此,我们有以下查询:

***Parameters***

Longitude: -74.008680
Latitude: 40.711676
Radius: 1 mile

***Query***

SELECT *
FROM restaurant
WHERE (
POW( ( 69.1 * ( Longitude - -74.008680 ) * cos( 40.711676 / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - 40.711676 ) ) , 2 )
) < ( 1 *1 );

该表大约有 23k 行。结果集的大小有时很奇怪,例如对于 5.4 英里的搜索,它返回 880 行,对于 5.5 英里,它返回 21k 行。

此表包含 nyc 的餐厅数据 - 因此实际分布与结果集不同。

问题:这个查询有什么问题吗?

DB: MySQL, Longitude: DECIMAL(10,6), Latitude: DECIMAL(10,6)

最佳答案

IS THERE ANYTHING WRONG With this query?

在我看来,由于涉及数学,WHERE 子句会很慢,并且在 WHERE 子句中使用函数会阻止数据库使用索引来加速查询 - 因此,实际上,您将检查每个数据库中的餐厅,并在每次查询时对每一行执行大圆数学运算。

我个人会计算一个正方形的 TopLeft 和 BottomRight 坐标(只需要使用毕达哥拉斯进行粗略计算),其边等于您正在寻找的范围,然后在该纬度/经度正方形内的较小记录子集。

使用数据库中的经纬度索引进行查询

WHERE     MyLat >= @MinLat AND MyLat <= @MaxLat      AND MyLong >= @MinLong AND MyLong <= @MaxLong

应该很高效

(请注意,我不了解 MySQL,只了解 MS SQL)

关于iphone - 根据纬度经度进行半径搜索的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1727137/

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