PHP MySQL从GPS获取RADIUS用户位置中的位置

ubof19bj  于 2022-10-03  发布在  PHP
关注(0)|答案(1)|浏览(289)

例如,我的数据库中有汽车事故。这些事件都有纬度和经度。在使用GPS的手机上,我通过用户的坐标获得他的位置。如果周围有事故,用户可以选择他想知道的半径。比方说,他想知道他周围2英里的事件。

因此,我从手机向Web服务发送用户的纬度、经度和他选择的半径。我需要执行一个SQL查询来获取用户周围2英里处的事件。

你知道怎么做吗?

kupeojn6

kupeojn61#

正如其他人所说,计算距离是相当昂贵的。返回庞大的数据集也不是一个非常好的主意--特别是考虑到PHP的性能并不是很好。

我会使用启发式方法,比如用简单的加法和减法来近似距离。

1分钟=1.86公里=1.15英里

只需搜索事件在该范围内的数据库(实际上是一个正方形,而不是一个圆圈),然后您就可以使用PHP处理这些事件。

  • 编辑*:这里有一个替代方案;一个计算成本低得多的近似值:

以英里为单位的近似距离:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 53.0 * (lon2 - lon1)

您可以通过添加余弦数学函数来提高此近似距离计算的精度:

改进了以英里为单位的近似距离:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)

来源:http://www.meridianworlddata.com/Distance-Calculation.asp

  • 编辑2*:我使用随机生成的数据集运行了一系列测试。

  • 3种算法的精度差异很小,特别是在短距离

  • 最慢的算法(具有全部TRIG函数的算法)比其他两个算法慢4倍。

绝对不值得这么做。只需要一个近似值。

代码在此:http://pastebin.org/424186

相关问题