代码之家  ›  专栏  ›  技术社区  ›  Matthew Iselin

将经纬度转换为世界坐标的算法(OpenGL)

  •  3
  • Matthew Iselin  · 技术社区  · 15 年前

    我有一组经纬度坐标,将在我正在工作的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 回复  |  直到 15 年前
        1
  •  10
  •   meriton    15 年前

    嗯,经度的单位数不是常数吗?你在使用什么奇怪的转换函数?

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

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

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