将XYZ球坐标重新映射为纬度/经度

问题描述

我在XYZ中拥有一个点的表面(所有Z均为0),并将这些点映射到一个球体上。 因此,我对球体上的每个点都有一个XYZ坐标。

我要实现的是根据地理位置将XYZ球体坐标转换为其纬度/经度平行。例如,如果我有点(0,0),我想看看如何将其表示为纬度/经度(90.0000°S,45.0000°E)的南极。

我在网上搜索,有无数的网页可以解释其中的部分内容,但是其中很多人都在谈论将纬度/经度转换为XYZ,而不是相反。 我不确定是否有一个简单的公式可以将一个转换为另一个。

希望有人能指出我正确的方向。

谢谢

解决方法

有一个所谓的本地NEU(东北东北)坐标系,与您称为XYZ的坐标系相符。 NEU可以转换为以地球为中心的XeYeZe。从该XeYeZe中,您可以转换为(lat,long,H)。

在Python中,您可以使用pymap3d进行所有必需的计算。这是您可以尝试运行的代码。

import pymap3d
ell_wgs84 = pymap3d.Ellipsoid('wgs84')

# Your ENU system needs origin definition (lat0,lon0,h0) +
# and also needs a reference ellipsoid: let's use `ell_wgs84` defined above
lat0,h0 = -90,45,0   # origin of ENU,(h is height above ellipsoid)

# Test ENU coordinates: (e1,n1,u1) by `enu2geodetic()`
e1,u1     =  0.0,0.0,0.0  # just the origin of this ENU system
lat1,lon1,h1 = pymap3d.enu2geodetic(e1,u1,\
                                      lat0,h0,\
                                      ell=ell_wgs84,deg=True)  # use wgs86 ellisoid
# this should agree with: (lat0,h0)
print(lat1,h1)  # -90.0 44.99999999999999 1.313839409243646e-12  OK!

# Inversion check by `geodetic2enu()`
# input values to convert: lat1,h1
e1k,n1k,u1k = pymap3d.geodetic2enu(lat1,h1,lat0,ell=ell_wgs84,deg=True)
print(e1k,u1k)   # 0,0  OK

# Now arbitrary ENU to lat/long and reverse
lat112,lon112,h112 = pymap3d.enu2geodetic(1120,100,10,deg=True)
print(lat112,h112)
# Check
e112k,n112k,u112k = pymap3d.geodetic2enu(lat112,h112,deg=True)
print(e112k,u112k)   # 1120,10 OK

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...