【问题标题】:Getting similar longitude and latitude from database从数据库中获取相似的经度和纬度
【发布时间】:2012-12-06 17:26:33
【问题描述】:

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

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

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

一旦我获得彼此靠近的经度/纬度,那么我需要找到街道 A 中的用户和街道 B 中的用户之间的中心点,以标记为交通拥堵(基于其他一些检测) .

【问题讨论】:

  • 取决于您的应用程序的规模以及是否可以考虑使用 PostGIS。因为它比 MySQL 有更好的空间支持。在 PostGIS 中执行此操作非常简单,请参阅 gis.stackexchange.com/q/27878/3591
  • 嗨,马克,应用程序的规模非常基本。我们正在考虑 PostGIS,但由于我们发现托管更便宜,所以使用了 MySQL……否则 PostGIS 确实具有更好的空间功能:/

标签: php jquery mysql cordova jquery-mobile


【解决方案1】:

您应该研究 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 英里范围内的所有记录。

【讨论】:

  • HAVING distance
  • 请检查它的别名'距离'
  • @m4k 我想上面的 sn-p 会让我得到街道 A 和街道 B 的所有长/纬度。有什么方法可以区分两者吗?因为我需要做的是获取彼此接近的点(如上),然后获取街道 A 或 B 上的所有点并找到它们的中点。
  • @m4k 我试过了,但不幸的是它没有返回任何东西 :( 仅供参考,我的 long/lat 值采用以下格式:51.58731,-0.319427 我已经替换了 lat/lng使用我的字段经度和纬度选择语句,并将 ID 替换为 VehicleID。出于某种原因,即使我在数据库中有靠近在一起的车辆,我也没有得到任何回报
  • @m4k 好的,我发现我需要用我的坐标替换 37 和 -122。
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多