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

7
我正在使用Phonegap和JQuery创建一个移动应用程序。该应用程序收集用户的经纬度并将其存储在数据库中(使用PHP脚本-Web服务),通过某些算法检测是否存在交通拥堵。我需要做的是从数据库中获取所有彼此接近的经度和纬度值,比如在同一条街道/200米范围内。例如,在数据库中有一个列表,其中包含5个彼此接近的经纬度值(在A街上),3个彼此接近的经纬度值(在B街上),以及其他随机分布在其他街道上的用户。请问如何检测彼此接近的经纬度值?我将它们作为单独的值存储在MySQL数据库中,即一个字段表示经度,另一个字段表示纬度。 一旦我获得了彼此接近的经纬度值,我需要找到A街的用户和B街的用户之间的中心点来标记交通拥堵情况(基于其他检测)。

根据您的应用程序规模和选项,您可能需要考虑使用PostGIS。它比MySQL具有更好的空间支持。在PostGIS中完成这个任务非常简单,请参见http://gis.stackexchange.com/q/27878/3591。 - Mark Davidson
嗨,马克,这个应用程序的规模非常基础。我们曾考虑过使用PostGIS,但最终选择了MySQL,因为我们发现它的托管费用更便宜...否则,PostGIS确实具有更好的空间特性 :/ - user1809790
1个回答

6
你应该了解一下Haversine公式。请看下面的内容:
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;

这将返回所有距离输入的经纬度对 25 英里以内的记录。


在这里,distance关键字是MySQL识别的吗?是某个函数或类似的东西吗? - user1809790
请检查答案,它创建了一个名为“distance”的别名。 - Mukesh Yadav
我猜上面的代码片段会给我所有在A街和B街都有的经纬度。但是有没有办法区分这两个呢?因为我需要做的是获取彼此靠近的点(如上所述),然后获取A或B街上的所有点并找到它们的中点。 - user1809790
我尝试了这个,但不幸的是它没有返回任何东西:( 只是提醒一下,我的经纬度值以以下格式呈现:51.58731,-0.319427。我已经在Select语句中用我的字段Longitude和Latitude替换了lat/lng,并用VehicleID替换了ID。出于某种原因,即使我在数据库中有彼此靠近的车辆,我仍然没有得到任何回应。 - user1809790
@m4k 好的,我发现我需要用我的坐标替换37和-122。 - user1809790

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接