php mysql 抢位置_PHP MySQL从半径用户的位置获取位置

这篇博客探讨了在处理大型数据集时计算距离的高计算成本问题,建议使用启发式方法来近似距离,例如基于分钟、公里和英里的简单转换。通过在给定范围内搜索数据库并使用PHP进行后处理,可以显著提高效率。还提供了两种距离近似公式,包括考虑了余弦函数的改进版,以平衡精度和计算速度。测试表明,这些近似方法在短距离时效果良好,且计算速度显著快于精确算法。
摘要由CSDN通过智能技术生成

正如其他人所说,计算距离在计算上相当昂贵.返回庞大的数据集也不是一个好主意 – 特别是考虑到PHP在性能上并不是那么好.

我会使用启发式方法,例如通过简单的加法和减法来近似距离.

1 minute = 1.86 kilometers = 1.15

miles

只需在该范围内搜索包含事件的数据库(实际上是正方形而不是圆形),然后您可以使用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)

编辑2:我用随机生成的数据集运行了一堆测试.

> 3种算法的准确度差异很小,尤其是在短距离时

>最慢的算法(具有整组trig函数的算法)比其他两个算法慢4倍.

绝对不值得.只需要近似值.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值