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

Algorithm 将纬度和经度转换为世界坐标的算法(OpenGL),algorithm,opengl,latitude-longitude,Algorithm,Opengl,Latitude Longitude,我有一组纬度和经度坐标,这些坐标将在我正在使用的GL程序中呈现。我有一些信息,比如每个纬度和经度的单位数(我有十进制度数的坐标,例如27.1234)-例如,每个经度15个单位,每个纬度10个单位。但是,我在渲染方面遇到了问题 这个计算为我提供了可以用于渲染的位置,但它并不完美。我最初仅使用坐标(如S026.33.01.806 E148.46.27.009)进行测试,当我切换到坐标(如N039.52.19.030 W075.14.28.107)时,渲染结果颠倒并水平翻转 这可能是对OpenGL以及

我有一组纬度和经度坐标,这些坐标将在我正在使用的GL程序中呈现。我有一些信息,比如每个纬度和经度的单位数(我有十进制度数的坐标,例如27.1234)-例如,每个经度15个单位,每个纬度10个单位。但是,我在渲染方面遇到了问题

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

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


编辑:我上传了似乎最相关的代码。

呃,经度的单位数不是常数?你用的是哪种奇怪的转换函数

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

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

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

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