【问题标题】:Algorithm for converting Latitude and Longitude to World Coordinates (OpenGL)将纬度和经度转换为世界坐标的算法(OpenGL)
【发布时间】:2009-12-30 08:35:16
【问题描述】:

我有一组纬度和经度坐标,它们将在我正在处理的 GL 程序中呈现。我有诸如每个纬度和经度度数的单位数(我有十进制度的坐标,例如 27.1234) - 例如,每个经度 15 个单位,每个纬度 10 个单位。但是,我在渲染时遇到了问题。

此计算为我提供了可用于渲染的位置,但并不完美。我最初仅使用 S026.33.01.806 E148.46.27.009 等坐标进行测试,当我切换到 N039.52.19.030 W075.14.28.107 等坐标时,渲染结果是上下颠倒并水平的翻转。

这可能是对 OpenGL 以及它如何解释坐标的基本理解不足,或者我可能以错误的方式处理问题。我正在使用 Python 和 PyOpenGL,但我认为这个算法可以在没有特定语言要求的情况下完成。

编辑:我上传了似乎与http://slexy.org/view/s21LKiD9tj 最相关的代码。

【问题讨论】:

  • 如果您发布代码,会更容易发现代码中的错误。
  • 我可以看到各种问题。首先,尽管 1 度的纬度对于第一(球形)近似而言是相同的距离,无论在地球上的位置如何,1 度的纬度具有可变的大小,在赤道处最大,在两极处很小。其次,我不确定您所指的世界坐标是 OpenGL 项目还是您对如何解释位置的描述。如果您正在查看生成 3D 笛卡尔坐标,我可以看到可以颠倒和翻转显示的各种方式。 S026.33.01.806 W075.14.28.107 会发生什么?
  • @Jonathan Leffler:坐标是针对小区域的,每个纬度和经度的单位是从数据源提供的。我所说的世界坐标是指在 GL 世界中(我来自 DirectX 开发背景,以防万一。在这种情况下,“世界坐标”实际上是 z 为零的 3D 笛卡尔坐标)。这个软件有点不准确是可以的。至于您提供的示例:渲染的项目水平翻转。
  • @meriton:具体是哪个代码?我有很多代码,我想减少我提供的数量,而不是仅仅倾倒整个代码。
  • @Matthew:您正在观看的视点(3D 位置)是什么?你在看哪个方向?由于当位置在 N-S 和 E-W 方向上从负变为正(反之亦然)时,您会遇到奇怪的影响,因此可能是您在应该允许有符号值时使用了绝对值。

标签: algorithm opengl latitude-longitude


【解决方案1】:

Erm,经度的单位数不是恒定的吗?你用的什么奇怪的转换函数?

假设地球是一个半径为r的球面,以坐标系的根为中心,z轴指向北方,x轴指向经度0,y轴指向经度90,可以得到笛卡尔坐标坐标如下:

x = r * cos(latitude) * cos(longitude);
y = r * cos(latitude) * sin(longitude);
z = r * sin(latitude);

注意:如果您的语言的三角函数期望参数以弧度而不是度数指定,请务必先转换它们。

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2010-10-11
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多