【问题标题】:haversine / spherical law of cosines / vincenty in sql querysql查询中的harsine /余弦球面定律/ vincenty
【发布时间】:2016-06-13 13:33:50
【问题描述】:

我正在测试不同的公式,以在给定纬度/经度的给定半径内找到地球上的特定点。我一直在使用“余弦的球面定律”以及我认为是Haversine 的实现。

对于以下公式,这些是变量:

[$lat/$lon] = 起点

[纬度/经度] = 第二点

[$radius] = 半径

余弦定律

3959 * acos( cos( radians('.$lat.') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$lon.') ) + sin( radians('.$lat.') ) * sin( radians( latitude ) ) ) ) <= '.$radius.';

Haversine(至少我认为是!)

3959*3.1415926*sqrt((latitude-'.$lat.')*(latitude-'.$lat.') + cos(latitude/57.29578)*cos('.$lat.'/57.29578)*(longitude-'.$lon.')*(longitude-'.$lon.'))/180) <= '.$radius.';';

我最初看到很多信息说,就准确性而言,Haversine 是黄金标准。然而,似乎也有一种观点认为,余弦球面定律比Haversine 更准确,只要被测距离大于5 米左右。此外,有人说文森蒂在准确性上胜过两者。

三个问题:

我的 Haversine 公式实际上是 Haversine 还是其他什么?

有什么想法最准确?

谁能按照上述论坛的思路向我提供文森蒂的公式?

谢谢!

【问题讨论】:

    标签: distance haversine trigonometry


    【解决方案1】:

    你所谓的Haversine公式完全不正确。

    首先它包含 7 个左括号和 8 个右括号。

    在某些情况下,从度数到弧度的第二次转换是通过除以 57.29578 来完成的,然后前面有一个常数 pi,后面有一个常数 180。

    第三,haversine(x) = sin(x / 2) ** 2,我在任何地方都看不到/ 2

    第四,前面附近应该有一个asin函数调用。

    正确的公式here

    【讨论】:

      【解决方案2】:

      我的回答会针对你的第一个和第二个回答更具体

      Q1:我的 Haversine 公式实际上是 Haversine 还是其他什么?

      我不明白你的haversine公式是你做的 为 hasrsine 公式编写一个或完全的 SQl 查询是 来自谷歌开发者网站Click Here For Details

      SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
      

      此 SQL 语句将查找距离 37, -122 坐标 25 英里半径内最近的 20 个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于 25 的行,按距离对整个查询进行排序,并将其限制为 20 个结果。要按公里而不是英里搜索,请将 3959 替换为 6371。

      您可以对此 SQL 查询进行更改,使其完全符合您的要求。

      Q2:有什么想法最准确?

      谁会赢没有最终答案?!,但我们可以处理:

      1.Haversine 更快。

      2.球面余弦定律对于小距离更准确。

      关于第三季度,我知道 vincenty 公式是最准确的,但它是最慢的一个

      【讨论】:

      • Q1:您推荐的公式以SELECT id, ( 3959 * acos( 开头...acos 将其标记为余弦公式的球面定律,绝对不是半正弦公式。 Q2.1 hasrsine 并不快。 Q2.2 球面余弦定律在小的差异上不太准确。
      猜你喜欢
      • 2011-06-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多