【发布时间】:2010-12-16 04:13:27
【问题描述】:
我们有一个restaurant 表,其中每一行都有经纬度数据。
我们需要编写一个查询来执行搜索以查找提供的半径内的所有餐馆,例如1 英里、5 英里等。
为此,我们有以下query:
***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 行。
此表包含纽约市的餐厅数据 - 因此实际分布与结果集不同。
问题:这个查询有什么问题吗?
数据库:MySQL,经度:DECIMAL(10,6),纬度:DECIMAL(10,6)
【问题讨论】:
-
怎么了?对于初学者,您希望使用 UTM 而不是纬度/经度坐标,因为它们的展平误差较小...
-
查看this question 的答案。类似的问题。
标签: iphone sql mysql geolocation latitude-longitude