正如其他人所说,计算距离在计算上相当昂贵.返回庞大的数据集也不是一个好主意 – 特别是考虑到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倍.
绝对不值得.只需要近似值.