在我的应用程序中,我们要求用户输入邮政编码以查询附近的位置。我们使用zipcode的LatLng对象作为原点,然后我们绘制一个虚构的“边界框”来查询数据库中该范围内的所有位置。这些位置将在地图上显示为用户将能够看到的标记。我们希望将结果限制在10-15左右。
数据库示例:
我在考虑使用MySQL的BETWEEN
运算符在垂直和水平方向上查询±2度,然后LIMIT n
这些结果,或者我可以将整个数据库拉入PHP然后使用{{{ 1}}。
我不确定什么是解决这个问题的最佳方式,所以如果你们之前有任何人已经处理过这个场景,我会很感激,并且可以提供一些如何解决它的见解。
答案 0 :(得分:6)
在sql中执行
SELECT
id,
( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance
FROM
markers
HAVING
distance < 25
ORDER BY
distance
LIMIT
0 , 20;