Mar*_*ark 5 c# sql sql-server haversine
我有一个应用程序,根据邮政编码搜索项目.
在搜索邮政编码时,我会返回来自该城市/邻居的所有产品(通过解析邮政/邮政编码完成).
我现在需要根据与原始邮政/邮政编码的距离对这些产品进行分类.
我在数据库中存储了Lat/Long,并计划使用Haversine公式计算与原始查询的apprx距离.
我的问题是,应该在哪里计算.在返回数据集之前,我应该在存储过程中执行此操作吗?
或者我应该使用我的Lat/Long返回我的数据集,并在返回用户之前计算它的服务器端.
可能需要执行最多1000次结果的计算.
通常,数据库服务器是 IO 密集型的,而不是 CPU 密集型的。YMMV,但如果您的情况很典型,则需要在数据库服务器上执行半正矢计算。
我建议使用自定义查找表进行反正弦计算,因为您可以提供对数刻度上的近似距离,例如:
100米,
300米,
1公里,
3公里,
10公里,
30公里,
> 30公里
然后使用线性插值作为细化。
对于单个大都市区遇到的典型距离,您可以考虑仅使用sin和cos泰勒展开式的 2 或 3 项,而不是更精确的计算:
还记得对于收敛的泰勒级数,第 n 项之后的误差严格小于第 (n+1) 项的大小。这使您可以在达到所需精度后有效地终止计算,由于地球不是均匀球体,半正矢公式的精度通常仅为 0.5%。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |