经纬度笛卡尔杂谈

当然可以!将经纬度坐标转换为笛卡尔坐标系的公式如下:

x = ( R + h ) cos ⁡ ϕ cos ⁡ θ   y = ( R + h ) cos ⁡ ϕ sin ⁡ θ   z = ( R + h ) sin ⁡ ϕ \begin{aligned} x &= (R+h)\cos\phi\cos\theta \ y &= (R+h)\cos\phi\sin\theta \ z &= (R+h)\sin\phi \end{aligned} x=(R+h)cosϕcosθ y=(R+h)cosϕsinθ z=(R+h)sinϕ

其中, R R R是地球半径, h h h是海拔高度, ϕ \phi ϕ是纬度, θ \theta θ是经度。在这个公式中, x , y , z x, y, z x,y,z分别表示笛卡尔坐标系下的 x , y , z x, y, z x,y,z坐标。

下面是用MATLAB编写的转换函数,函数名为 geo2cart:

function [x, y, z] = geo2cart(lat, lon, alt)
% GEP2CART Convert latitude, longitude and altitude to Cartesian coordinates.
%
% [x, y, z] = GEO2CART(lat, lon, alt) converts the latitude, longitude and
% altitude coordinates into Cartesian coordinates (x, y, z).
%
% Inputs:
% -------
% lat - latitude in degrees, ranges from -90(degree) to 90(degree)
% lon - longitude in degrees, ranges from -180(degree) to 180(degree)
% alt - altitude in meters
%
% Outputs:
% --------
% x, y, z - Cartesian coordinates in meters
%
% Example:
% --------
% [x, y, z] = geo2cart(40, 116, 0);
% This function calculates the Cartesian coordinates for a location at
% latitude = 40 degrees, longitude = 116 degrees, and altitude = 0 meters.
%
% Reference:
% ----------
% [1] Li, X. (2015). GNSS Data Processing: Geodesy, Kinematics, and
% Positioning. John Wiley & Sons, Ltd.
%
% Author: Zhanpeng Yang
% Date: 2021/10/02
% Email: zhanpeng.yang@outlook.com

% Earth parameters
R = 6371000; % Earth radius in meters
f = 1/298.257223563; % Flattening factor

% Convert latitude and longitude to radians
lat = deg2rad(lat);
lon = deg2rad(lon);

% Calculate the earth’s radius at the geodetic latitude
N = R./sqrt(1 - f*(2 - f)*sin(lat).^2);

% Calculate the Cartesian coordinates
x = (N + alt).*cos(lat).*cos(lon);
y = (N + alt).*cos(lat).sin(lon);
z = (N
(1 - f^2) + alt).*sin(lat);
end
这个函数的输入为一个纬度、一个经度和一个高度,输出为笛卡尔坐标系下的三个坐标。在实现中,首先把度数转换成弧度,然后计算出经过这个点的子午面曲率半径 N N N。最后,使用公式计算 Cartesian 坐标。当地球是一个精确的椭球时,我们可以使用复杂的数学模型来准确定位 N N N,但在本实例中,我们将 N N N 近似为一个简单的公式。

这句代码是为了计算在经过给定的地球曲面上特定的纬度处(即等高纬度),该位置上的曲率半径 N N N。在该代码中, R R R 表示地球的平均半径(单位为米), f f f 表示扁率(a - b)/a,其中 a a a 是地球的赤道半径, b b b 是地球的极半径。

公式中的 N N N 可以使用以下公式计算:

N = R 1 − f ( 2 − f ) sin ⁡ 2 ϕ N = \frac{R}{\sqrt{1 - f(2-f) \sin^2\phi}} N=1f(2f)sin2ϕ R

其中, ϕ \phi ϕ 表示给定点的纬度,使用 deg2rad 函数将其从角度转换为弧度。

因此,那一句代码就是在使用上述公式计算该位置上的曲率半径 N N N

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一款用于浏览器环境中构建三维地球和地球空间的开源JavaScript库。在Cesium中,我们可以将经纬度坐标转换成笛卡尔坐标。 经纬度是一种用于表示地球表面上任意点位置的坐标系统。经度表示位于东西方向上的位置,而纬度表示位于南北方向上的位置。它们可以用度数、分钟和秒来表示。 在Cesium中,我们可以使用Cartographic对象来表示经纬度坐标。Cartographic对象有两个属性,分别是longitude(经度)和latitude(纬度)。我们可以通过设置这两个属性的值来定义一个经纬度坐标。 在转换经纬度坐标为笛卡尔坐标时,我们可以使用Cesium.Cartesian3.fromDegrees函数。这个函数接受经度和纬度的参数,并返回一个表示笛卡尔坐标的Cartesian3对象。 下面是一个示例代码: ``` // 导入Cesium库 import * as Cesium from 'cesium'; // 定义经纬度 const longitude = -75.59777; // 经度 const latitude = 40.03883; // 纬度 // 将经纬度转换为笛卡尔坐标 const cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude); const cartesian = Cesium.Cartesian3.fromDegrees(longitude, latitude); // 输出笛卡尔坐标 console.log('笛卡尔坐标:', cartesian); ``` 通过上述代码,我们可以得到表示经纬度转换为笛卡尔坐标的cartesian对象。这个cartesian对象包含了在三维空间中表示该点位置的x、y和z坐标值。 总而言之,Cesium库提供了便捷的函数来将经纬度坐标转换成笛卡尔坐标。这使得我们可以在三维地球和地球空间中准确定位和显示地理位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值