三维空间中直角坐标与球坐标的相互转换

三维直角坐标系

三维直角坐标系是一种利用直角坐标(x,y,z)来表示一个点 P 在三维空间的位置的三维正交坐标系。
在这里插入图片描述

注:本文所讨论的三维直角坐标系,默认其x-轴、y-轴、z-轴满足右手定则(如右图所示)。

在三维空间的任何一点 P ,可以用直角坐标(x,y,z)来表达其位置。如左下图显示了三维直角坐标的几何意义:点P在x-轴、y-轴、z-轴上的投影距离分别为x、y、z。如右下图所示,两个点 P 与 Q 的直角坐标分别为(3,0,5)与(-5,-5,7) 。

球坐标系

球坐标系是一种利用球坐标(r,θ,φ)来表示一个点 P 在三维空间的位置的三维正交坐标系。

下图描述了球坐标的几何意义:原点O与目标点P之间的径向距离为r,O到P的连线与正z-轴之间的夹角为天顶角θ,O到P的连线在xy-平面上的投影线与正x-轴之间的夹角为方位角φ。
在这里插入图片描述

三维空间下直角坐标与球坐标的相互转换

直接坐标转球坐标

实例

在这里插入图片描述

转载链接:

https://www.cnblogs.com/hans_gis/archive/2012/11/21/2755126.html

好的,我可以为您提供一个基本的 Python 代码来实现大地坐标地心直角坐标相互转换。以下是代码: ```python import math a = 6378137.0 # 长半轴 b = 6356752.3142 # 短半轴 f = (a - b) / a # 扁率 e_sq = f * (2-f) # 第一偏心率平方 def geodetic_to_geocentric(lat, lon, h): """ 大地坐标转换为地心直角坐标 :param lat: 纬度,单位:度 :param lon: 经度,单位:度 :param h: 高度,单位:米 :return: (x, y, z) 地心直角坐标,单位:米 """ # 先将经纬度转为弧度 lat_r = math.radians(lat) lon_r = math.radians(lon) # 计算半径曲率半径 N = a / math.sqrt(1 - e_sq * math.sin(lat_r)**2) # 计算地心直角坐标 x = (N + h) * math.cos(lat_r) * math.cos(lon_r) y = (N + h) * math.cos(lat_r) * math.sin(lon_r) z = ((1 - e_sq) * N + h) * math.sin(lat_r) return x, y, z def geocentric_to_geodetic(x, y, z): """ 地心直角坐标转换为大地坐标 :param x: 地心直角坐标 x,单位:米 :param y: 地心直角坐标 y,单位:米 :param z: 地心直角坐标 z,单位:米 :return: (lat, lon, h) 大地坐标,单位:度、度、米 """ # 计算经纬度 lon = math.atan2(y, x) p = math.sqrt(x**2 + y**2) lat = math.atan2(z, p) # 逐次逼近计算高度 e = math.sqrt(e_sq) N = a h = 0 for i in range(10): sin_lat = math.sin(lat) N = a / math.sqrt(1 - e_sq * sin_lat**2) h = p / math.cos(lat) - N lat = math.atan2(z, p * (1 - e_sq * N / (N + h))) # 将弧度转为角度 lat_d = math.degrees(lat) lon_d = math.degrees(lon) return lat_d, lon_d, h ``` 使用方法: ```python # 大地坐标转地心直角坐标 lat = 30.0 lon = 120.0 h = 100.0 x, y, z = geodetic_to_geocentric(lat, lon, h) print(x, y, z) # 地心直角坐标转大地坐标 lat, lon, h = geocentric_to_geodetic(x, y, z) print(lat, lon, h) ``` 注意:该代码仅适用于 WGS-84 椭体,其他椭体需要进行修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值