如何计算两个 WGS84 坐标之间的方位角(向北的角度)

2023-11-22

我有两个 WGS84 坐标,纬度和经度(以度为单位)。这些点非常接近,例如相距仅一米。

有没有一种简单的方法可以计算这些点之间的线的方位角,即向北的角度?

天真的方法是假设一个笛卡尔坐标系(因为这些点非常接近)并只使用

sin(a) = abs(L2-L1) / sqrt(sqr(L2-L1) + sqr(B2-B1))

a = 方位角 L1、L2 = 经度 B1、B2 = 纬度

随着坐标远离赤道,误差会更大,因为两个经度之间的距离变得越来越小于两个纬度之间的距离(保持不变)。

我发现了一些相当复杂的公式,我真的不想实现,因为它们对于距离很近的点来说似乎太过分了,而且我不需要非常高的精度(两位小数就足够了,一位也可能很好,因为有无论如何,还有其他因素会降低精度,例如 GPS 返回的精度)。

也许我可以根据纬度确定近似的纵向修正系数并使用如下所示的东西:

sin(a) = abs(L2*f-L1*f) / sqrt(sqr(L2*f-L1*f) + sqr(B2-B1))

其中 f 是校正因子

有什么提示吗?

(我不想为此使用任何库,尤其是那些需要运行时许可证的库。任何 MPLed Delphi 源代码都很棒。)


您在文中引用的公式是计算两点之间的大圆距离。这是我计算点之间角度的方法:

uses Math, ...;
...

const
  cNO_ANGLE=-999;

...

function getAngleBetweenPoints(X1,Y1,X2,Y2:double):double;
var
  dx,dy:double;
begin
  dx := X2 - X1;
  dy := Y2 - Y1;

  if (dx > 0) then  result := (Pi*0.5) - ArcTan(dy/dx)   else
  if (dx < 0) then  result := (Pi*1.5) - ArcTan(dy/dx)   else
  if (dy > 0) then  result := 0                          else
  if (dy < 0) then  result := Pi                         else
                    result := cNO_ANGLE; // the 2 points are equal

  result := RadToDeg(result);
end;
  • 记得处理2个点相等的情况(检查结果是否等于cNO_ANGLE,或者修改函数抛出异常);

  • 此功能假设您位于平坦的表面上。对于您提到的小距离来说,这一切都很好,但如果您要计算世界各地城市之间的航向,您可能需要研究采用地球形状的计算方法;

  • 最好为该函数提供已经映射到平面的坐标。不过,您可以将 WGS84 Latitude 直接输入 Y(将 lon 输入 X)以获得粗略的近似值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算两个 WGS84 坐标之间的方位角(向北的角度) 的相关文章

  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • 如何添加资源并使用它们

    在我的应用程序中 我想添加 2 个图像作为资源 我想使用这些图像 当我在应用程序中单击 是 按钮时 第一张图像将被设置为壁纸 当我在应用程序中单击 否 按钮时 第二张图像将被设置为桌面壁纸 提前致谢 regards 最简单的方法是创建一个文
  • HTML5 网站在手机屏幕关闭时运行?

    基本上 我的问题与这个话题 https stackoverflow com questions 15465242 html5 mobile app running while phone screen is off但现在已经是 2018 年
  • 在运行时创建 TQReport 元素

    在运行时创建 TQReport 元素 嗯 至少尝试一下 我不知道这份报告中应出现哪些标题或数据 我得到一个代表数据行和列的 TString 的 TList 我在组的带打印事件中植入 创建 指令 并在主数据行带的 OnNeedData 事件中
  • 如何在Delphi XE中通过名称获取类类型引用?

    我实际上正在尝试使用 Rtti 来实现通用方法调用程序 它应该像这样工作 我将提供类名 方法名和参数 调用者将通过调用此类的指定方法来完成其工作 因此 我需要类引用才能获取其 Rtti 信息并寻找我想要调用的方法 有没有办法在不实现我想要使
  • delphi 变量值在循环中的线程中发生变化

    我的代码正在运行一个 for 循环来处理一些数据 如下所示 procedure printValue Value Integer begin TThread Synchronize TThread Current procedure beg
  • 如何避免使用 WinApi.Windows 的 Delphi 应用程序中的 dll 劫持

    Delphi 最新版本使用各种系统 dll 的静态链接 例如 WinApi Windows 单元中的 version dll 这会导致在单元初始化之前加载 version dll 这会打开一个安全漏洞 可以通过将受感染的 version d
  • 使用Delphi检查HTML代码中是否有对象属性值

    如何使用Delphi检查HTML代码中是否有输入对象属性值 there isn t value attribute
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 单元测试定位服务

    我有一个位置跟踪服务 正在尝试对其进行单元测试 我正在尝试使用 locationManager addTestProvider 和 setTestProviderLocation 方法来实现此目的 但是 我似乎无法通过提供程序获取任何位置并
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • 查找附近应用程序的用户(iPhone 和 Android)

    我正在开发一个有 iPhone 版本和 Android 版本的应用程序 我的目标是 显示我的应用程序的附近用户列表 iPhone 应用程序用户和 Android 应用程序用户 假设列出当前在 1 英里或 2 英里半径内并且当前正在使用我的应
  • 在 R 中创建缓冲区和计数点

    I asked 这个问题 https stackoverflow com questions 42498344 create buffer around spatial point data in r and count how many
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • TDictionary 上的 GetItem 由链接器消除

    我正在使用一个TDictionary of
  • 如何在调试器中显示 TStringList 的内容?

    我想在调试应用程序时显示 TStringList 的全部内容 相反 我只是得到指示 Flist 仅显示地址 如果您使用的是 Delphi 2010 或更高版本 调试器允许使用调试可视化工具 http docwiki embarcadero
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • 为什么未初始化的指针会导致内存访问冲突接近 0?

    据说often 但并非总是如此 当你在接近于零的内存位置 比如 89 美元 获得 AV 时 你就有了一个未初始化的指针 但我也在 Delphi 书籍中看到了这一点 嗯 或者它们都是由同一作者写的 Update 引自 Bob Swart 等人
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets

随机推荐

  • 将错误从服务层传递回视图

    Edit 我研究过 Spring 3 ExceptionHandler注释并将其与Option 1下面看起来是一个非常干净的解决方案 See http static springsource org spring docs 3 0 x sp
  • “uncap”一个有上限的 MongoDB 集合

    有没有办法 取消 上限集合 创建新集合并复制数据对我来说不是一个选择 thanks 不 您可以使用 convertToCapped 命令将非上限集合转换为上限集合 但没有其他方法 您唯一的选择是将集合克隆为非上限集合并重命名 这显然会涉及停
  • Python 多个 for 循环

    我想知道下面代码中的3个for循环是否可以用更好的方式编写 Nc 10 number of points for 0 pi cc1 linspace 0 pi Nc cc2 linspace 0 pi 2 Nc 2 cc3 linspace
  • 将 ID 分配给 Android ListView 中的行

    我有一个列表视图 当点击 ListView 上的某个项目时 它会加载一个 SubView 我想为 ListView 的每一行分配一个 ID 这样我就可以将该 ID 传递给 SubView 如何为 ListView 中的每一行分配特定的 ID
  • 如何将子存储库添加到 Mercurial 中的现有存储库中

    将现有存储库作为子存储库添加到另一个现有存储库的最佳 最简单方法是什么 或者甚至可能 情况是我有一个现有的 主 项目 我想在其中包含一个库项目 以便我可以从主项目编辑库项目 并在提交主项目时将更改提交到库项目 另外 我是否需要克隆 推 拉到
  • 更改运行时权限的语言

    如何更改android运行时权限的语言 当我尝试使用更改语言时 Configuration config getBaseContext getResources getConfiguration locale new Locale lang
  • iPhoneSDK从CATransform3D计算旋转角度

    如何通过将 CATransform3D 结构作为输入来计算绕 Z 轴的弧度旋转 基本上我需要的是相反的CATransform3DMakeRotation 这取决于您在哪个轴上进行旋转 绕 z 轴的旋转表示为 a angle in radia
  • Teamcity - 哪个外部差异查看器

    您知道有哪些工具可以用作 Teamcity 的 Visual Studio 插件的外部差异查看器吗 我正在使用 Visual Studio 2010 Pro 和 Teamcity 5 1 2 We use 超越比较3与 TeamCity 插
  • 谷歌文本转语音 API

    我想知道如何在我的 NET 项目中使用 Google Text to Speech API 我认为我需要调用一个 URL 来使用 Web 服务 但我的想法并不清楚 有人可以帮忙吗 旧答案 尝试使用此网址 它将自动生成一个 wav 文件 您可
  • Go:跟踪 POST 请求进度

    我正在 Go 中为 Linux 编写一个 ShareX 克隆 它通过 http POST 请求将文件和图像上传到文件共享服务 我目前正在使用 http Client 和 Do 发送我的请求 但我希望能够跟踪需要最多一分钟上传的较大文件的上传
  • 为什么 Scala 找不到 org.apache.commons.lang 包?

    我想用org apache commons lang NotImplementedException因为它似乎是 Java Scala 域中唯一的 NotImplementedException 实现 我记得我曾经在 Scala 2 8 1
  • NSTextField 像 safari 地址栏

    构建像 Safari 中那样的地址字段的最佳方法是什么 需要有可编辑的文本和确定的进度指示器背景 你可以直接子类化NSTextField并覆盖 drawRect 方法用某种颜色或渐变 或其他 来 填充 整个宽度的适当百分比以用于进度 如果我
  • 局部变量作用域的问题。怎么解决呢?

    我在尝试执行时收到以下错误statemet executeUpdate 在我的代码中 Local variable statement defined in an enclosing scope must be final or effec
  • 从 grails 2.3.8 2.4 升级时出现资源插件错误

    我正在关注docs尝试将我的项目从 2 3 8 升级到 2 4 但我遇到了这些错误 localhost startStop 1 ERROR resource ResourceProcessor Unable to load resource
  • 链接外部文件时列出属性的顺序是否正确?

    在 HTML 中声明外部文件 例如 css 或 js 时 是否存在放置链接属性的正确顺序 例如 or or 这有关系吗 同样的问题也适用于链接到外部 JavaScript 文件的属性 谢谢你的时间 不 属性顺序无关
  • CSS无限旋转动画

    我想通过 CSS 旋转我的加载图标 我有一个图标和以下代码 div div
  • COPY 命令:仅从 csv 复制特定列

    我有一个关于COPYPostgreSQL 中的命令 我有一个 CSV 文件 我只想将其中一些列值复制到我的 PostgreSQL 表中 是否有可能做到这一点 我熟悉使用COPY命令使用标题将 CSV 中的所有数据复制到表中以映射到列名称 但
  • OpenCV - 如何从 uint8_t 指针创建 Mat

    我有以下 C 代码 void foo const uint8 t data int height int width need to create a cv Mat from data which is a pointer to grays
  • Nunit-C#:通过编码运行特定测试

    我使用 Selenium 和 C 进行自动化 我想通过代码调用 NUnit 如下所示 CoreExtensions Host InitializeService TestPackage testPackage new TestPackage
  • 如何计算两个 WGS84 坐标之间的方位角(向北的角度)

    我有两个 WGS84 坐标 纬度和经度 以度为单位 这些点非常接近 例如相距仅一米 有没有一种简单的方法可以计算这些点之间的线的方位角 即向北的角度 天真的方法是假设一个笛卡尔坐标系 因为这些点非常接近 并只使用 sin a abs L2