【问题标题】:Is the Azimuth on the equator equal to the one not on the equator?赤道上的方位角是否等于不在赤道上的方位角?
【发布时间】:2014-10-21 03:50:40
【问题描述】:

我正在尝试完全理解方位角的概念,但遇到了一些不一致(或者可能是我的错误)。

我向你展示了一些不匹配的例子,希望有人能解释一下这是如何工作的。

我使用我自己的 JavaScript 函数在 EPSG:900913、PostGIS 中显示坐标。

我的功能

/* Difference between the two longitudes */
var dLon = lon2 - lon1;
/* Y value */
var y = Math.sin(dLon) * Math.cos(lat2);
/* X value */
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
/* Calculates the azimuth between the two points and converts it to degrees */
var angle = Math.atan2(y, x) / Math.PI * 180;

示例

/* Same Y, not on the equator */
Point A: (-81328.998084106, 7474929.8690234)
Point B: (4125765.0381464, 7474929.8690234)
Result in PostGIS: 90 degrees
Result in my JS function: 74.232 degrees

/* Same Y, on the equator */
Point A: (-81328.998084106, 0)
Point B: (4125765.0381464, 0)
Result in PostGIS: 90 degrees
Result in my JS function: 90 degrees

我了解,在赤道上,水平线的方位角为 90(或 270)。想想如果你在赤道的北(或南)画一条水平线,那么方位角就不再是 90 度了。但是... PostGIS 告诉我,当我们有相同的 Y 时,它总是 90 度。

此外,此calculator 还表明,当 Y != 0(不在赤道上)时,水平线的方位角不是 90 度。

如何正确?

谢谢

【问题讨论】:

  • 这个问题似乎离题了,因为它与编程无关(尽管它使用编程)。请参阅帮助中心的What topics can I ask about here。也许Geography Stack Exchange 会是一个更好的提问地点。
  • @jww,谢谢。我知道 GIS.StackExchange 更好。我都试过了,这里的aswer更好。所以,非常感谢回答的人! :) 以后我会更加小心的。
  • @joaorodr84 - 太棒了;很高兴你得到了一个好的答案。 (请不要亲自结束。我不得不结束自己的问题(我真的在几年前问过这个问题吗?))。
  • 没问题,@jww。 :) 我不认为这是个人的。你是绝对正确的。 ;)

标签: javascript postgis azimuth geodesic-sphere


【解决方案1】:

在您的示例中,您使用了 EPSG:900913,它是平面的、投影的并以米为单位。这意味着使用的公式将是 atan2,当纬度相同时,它总是 90,因为公式是:

azimuth = atan2(y1-y2, x1-x2)

第二部分将始终为 0,方位角为 90。因此,使用平面坐标,是的,对于具有相同纬度的坐标对,方位角始终相同,这就是 Postgis 总是给出相同答案的原因使用 EPS 时:900913。

如果您切换到地理数据类型,并因此使用测地线坐标,则不再是这种情况。

例如:

select degrees(   
  st_azimuth(
   st_makepoint(0, 10)::geography, 
   st_makepoint(90, 10)::geography));

在 Postgis 中给出 80.1318065,在您链接的计算器页面上给出 80.139。

对于给定的纬度,随着 x/经度越来越接近,值越接近 90。例如,

select degrees(   
  st_azimuth(
   st_makepoint(0, 10)::geography, 
   st_makepoint(1, 10)::geography));

现在在 Postgis 中给出 89.9131737,在在线计算器中给出 89.333(差异稍大)。

这一切都是因为公式现在考虑了曲率,所以两个等纬度向量的投影之间的夹角将不再是 90,除了赤道。

查看Wikipedia azimuth 文章中的方程式,了解球体版本。这应该很容易用 JavaScript 编写代码,并且应该给出与地理类型的 Postgis 相当的答案。

【讨论】:

  • 嗨@JohnBarça。我以错误的方式使用 PostGIS。谢谢你。如您所见,我已经在使用function from Wikipedia,稍作修改。还是你的意思是second one
  • 我的意思是第二个,它代表扁球体,从upload.wikimedia.org/math/7/6/e/…开始。如果你使用它,你应该更接近在 Postgis 中使用 geography 获得的值。
猜你喜欢
  • 2017-02-28
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
相关资源
最近更新 更多