c# – 邮政编码产品查询| Haversine算法|性能

我有一个应用程序,根据邮政编码搜索项目.

在搜索邮政编码时,我会返回来自该城市/邻居的所有产品(通过解析邮政/邮政编码完成).

我现在需要根据与原始邮政/邮政编码的距离对这些产品进行分类.

我在数据库中存储了Lat / Long,并计划使用Haversine公式计算与原始查询的apprx距离.

我的问题是,应该在哪里计算.
在返回数据集之前,我应该在存储过程中执行此操作吗?

或者我应该使用我的Lat / Long返回我的数据集,并在返回用户之前计算它的服务器端.

可能需要执行最多1000次结果的计算.

解决方法:

通常,DB服务器是IO绑定的而不是CPU绑定的. YMMV,但如果您的情况是典型的,则需要在DB服务器上执行Haversine计算.

我建议您使用自定义查找表进行反正弦计算,因为您可以在对数刻度上提供近似距离,例如:

> 100米,
> 300米,
> 1km,
> 3km,
> 10km,
> 30km,
>> 30公里

然后使用线性插值作为细化.

对于单个都市区域遇到的典型距离,您可以考虑仅使用2或3个the Taylor expansion for sin and cos项而不是更精确的计算:

> sin(x)= ~x – x ^ 3/6 x ^ 5/120
> cos(x)= ~1 – x ^ 2/2 x ^ 4/24

回想一下,对于收敛的泰勒级数,第n个项之后的误差严格小于(n 1)’st项的大小.这使您可以在达到所需精度后有效地终止计算,一般而言,由于地球不是均匀球体,因此Haversine公式仅为0.5%.

上一篇:python – Pandas Dataframe:根据地理坐标(经度和纬度)连接范围内的项目


下一篇:php – 加入Haversine公式中的操作