Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取附近位置的最佳方法?_Php_Mysql_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Php 获取附近位置的最佳方法?

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()对其进行抽象 我真的不确定什么是解决这个问题的最佳方法,所以如

在我的应用程序中,我们要求用户输入zipcode以查询附近的位置。我们使用zipcode的LatLng对象作为原点,然后绘制一个假想的“边界框”来查询数据库中该范围内的所有位置。这些位置将在地图上显示为用户可以看到的标记。我们希望将结果限制在10-15左右

数据库示例:

我在考虑使用MySQL的
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。随着表的增大,它将影响性能。我建议在将数据集拉到前端之前,尽量限制数据集。