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

3
我有一组纬度和经度坐标需要在我正在开发的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

2
如果您发布了代码,那么发现其中的错误会更容易。 - meriton
我能看到各种问题。首先,尽管在地球上的任何位置,以第一(球形)近似为准,纬度的1°距离相同,但是纬度的1°大小是可变的,在赤道最大,在两极微不足道。其次,我不确定您所指的世界坐标是OpenGL项目还是您解释位置的描述。如果您正在生成3D笛卡尔坐标,我可以看到显示可能会倒置和翻转的各种方式。S026.33.01.806 W075.14.28.107会发生什么? - Jonathan Leffler
@Jonathan Leffler:这些坐标是用于一个小区域的,并且纬度和经度每度单位从数据源提供。所谓的世界坐标是指在 GL 世界中的坐标(我来自 DirectX 开发背景,如果有帮助的话)。在这种情况下,“世界坐标”实际上是具有零 Z 坐标的 3D 笛卡尔坐标。此软件允许存在一些不准确性。至于您提供的示例:呈现的项被水平翻转了。 - Matthew Iselin
@meriton:具体是哪段代码?我有很多代码,我想减少提供的量,而不是只倾倒整个代码。 - Matthew Iselin
@Matthew:你从哪个视点观察的(三维位置)是什么?你正朝着哪个方向看?由于当位置在南北和东西方向上从负数变为正数(或反之)时,你会遇到奇怪的效果,这可能是因为你在使用绝对值,而应该使用有符号的值。 - Jonathan Leffler
显示剩余3条评论
1个回答

10

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

假设地球是半径为r、以坐标系根处为中心、z轴指向北方、x轴指向经度0度、y轴指向经度90度的球体,那么可以按照以下方式获取笛卡尔坐标:

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

注意:如果你所使用的编程语言中三角函数的参数需要用弧度而不是角度来表示,请确保首先将其转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接