Php 从数据库中获取相似的经纬度

Php 从数据库中获取相似的经纬度,php,jquery,mysql,cordova,jquery-mobile,Php,Jquery,Mysql,Cordova,Jquery Mobile,我正在使用Phonegap和JQuery创建一个移动应用程序 该应用程序收集用户的经度和纬度并将其存储在数据库中(使用PHP脚本-web服务),并通过某种算法检测是否存在流量。我需要的是从数据库中获取彼此接近的所有经度和纬度值,比如在同一条街/200m范围内 假设您在数据库中有一个列表,其中5个lon/lat彼此相邻(在同一街道a中),3个lon/lat在某些街道B中彼此相邻,另一些代表其他街道中随机的用户。谁能告诉我如何检测彼此接近的lon/lat值?我将这些值作为单独的值存储在MySQL数据

我正在使用Phonegap和JQuery创建一个移动应用程序

该应用程序收集用户的经度和纬度并将其存储在数据库中(使用PHP脚本-web服务),并通过某种算法检测是否存在流量。我需要的是从数据库中获取彼此接近的所有经度和纬度值,比如在同一条街/200m范围内

假设您在数据库中有一个列表,其中5个lon/lat彼此相邻(在同一街道a中),3个lon/lat在某些街道B中彼此相邻,另一些代表其他街道中随机的用户。谁能告诉我如何检测彼此接近的lon/lat值?我将这些值作为单独的值存储在MySQL数据库中,即一个字段表示经度,另一个字段表示纬度


一旦我获得了彼此相邻的lon/lat,那么我需要找到A街用户和B街用户之间的中心点,以标记为交通拥堵(基于一些其他检测)。

您应该研究哈弗森公式。请参阅下文:

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;
选择id,(3959*acos(cos(弧度(37))*cos(弧度(纬度))*cos(弧度(lng)-弧度(-122))+sin(弧度(37))*sin(弧度(纬度)))作为距离
从标记
距离小于25的
按距离排序;

这将返回距离输入long/lat对25英里以内的所有记录

取决于应用程序的规模,如果它是一个选项,您可能需要考虑使用PASGIS。因为它比MySQL有更好的空间支持。在PostGIS中执行此操作将非常简单。请看Hi Mark,应用程序的规模非常基本。我们正在考虑PostGIS,但我们发现托管更便宜,所以求助于MySQL。。。否则,PostGIS确实有更好的空间特性:/distance<25这里的distance关键字-MySQL能识别它吗?某些函数或类似的东西?请检查ans it,并在其上生成别名“距离”@m4k。我想上面的代码片段可以让我了解A街和B街的所有长/宽。但有什么方法可以区分这两条街道吗?因为我需要做的是获取彼此接近的点(如上所述),然后获取街道A或B上的所有点,并找到它们的中点。@m4k我尝试过这个方法,但不幸的是它没有返回任何结果:(仅供参考,我的long/lat值的格式如下:51.58731,-0.319427我已将Select语句中的lat/lng替换为我的经度和纬度字段,并将ID替换为VehicleID。由于某些原因,即使我在数据库中有接近的车辆,我也没有得到任何信息。)together@m4k好吧,我发现了我需要用坐标替换37和-122。