Php 获取附近位置的最佳方法?
在我的应用程序中,我们要求用户输入zipcode以查询附近的位置。我们使用zipcode的LatLng对象作为原点,然后绘制一个假想的“边界框”来查询数据库中该范围内的所有位置。这些位置将在地图上显示为用户可以看到的标记。我们希望将结果限制在10-15左右 数据库示例: 我在考虑使用MySQL的Php 获取附近位置的最佳方法?,php,mysql,google-maps,google-maps-api-3,google-maps-markers,Php,Mysql,Google Maps,Google Maps Api 3,Google Maps Markers,在我的应用程序中,我们要求用户输入zipcode以查询附近的位置。我们使用zipcode的LatLng对象作为原点,然后绘制一个假想的“边界框”来查询数据库中该范围内的所有位置。这些位置将在地图上显示为用户可以看到的标记。我们希望将结果限制在10-15左右 数据库示例: 我在考虑使用MySQL的BETWEEN操作符在±2度范围内进行垂直和水平查询,然后LIMIT n这些结果,或者我可以将整个数据库拉到PHP中,然后使用range()对其进行抽象 我真的不确定什么是解决这个问题的最佳方法,所以如
BETWEEN
操作符在±2度范围内进行垂直和水平查询,然后LIMIT n
这些结果,或者我可以将整个数据库拉到PHP中,然后使用range()
对其进行抽象
我真的不确定什么是解决这个问题的最佳方法,所以如果你们中的任何人以前处理过这个问题,并且能够提供一些解决方法的见解,我将不胜感激。在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;
选择
身份证件
(3959*acos(cos(弧度(37))*cos(弧度(lat))*cos(弧度(lng)-弧度(-122))+sin(弧度(37))*sin(弧度(lat)))作为距离
从…起
标记
有
距离<25
订购人
距离
极限
0 , 20;
不幸的是,这会对每一行进行计算,因此可能会严重影响数据库。。请看这个问题:如果索引做得很好,就不会。我们运行了一个带有商店定位器的网站,就像这样运行。从来没有遇到过问题。我相信你可以对位置做一些估计,这样你就可以用
WHERE
子句删除一些记录?这实际上工作得很好,唯一的问题是大多数LatLng对象都是浮动的。我必须把我的位置四舍五入以进行搜索。除此之外,这是一个很好的开始。@thenetimp能否请您解释一下这个语句(3959*acos(cos(radians(37))*cos(radians(lat))*cos(radians(lng)-radians(-122))+sin(radians(37))*sin(radians(lat)))作为距离。我强烈建议不要将整个表拉入PHP。随着表的增大,它将影响性能。我建议在将数据集拉到前端之前,尽量限制数据集。