Cesium 中坐标相互转换

发布时间 2023-11-25 19:11:17作者: zheyi420

Cesium 中坐标相互转换

经纬度 degree <-> 弧度 radian

radians -> degrees

const coordWGS84Lon = Cesium.Math.toDegrees(coordCartographic.longitude);
const coordWGS84Lat = Cesium.Math.toDegrees(coordCartographic.latitude);

degrees -> radians

const coordCartographicLon = Cesium.Math.toRadians(coordWGS84Lon);
const coordCartographicLat = Cesium.Math.toRadians(coordWGS84Lat);

Cartographic <-> GCS(WGS84)

Cartographic -> GCS(WGS84)

const coordWGS84Lon = Cesium.Math.toDegrees(coordCartographic.longitude);
const coordWGS84Lat = Cesium.Math.toDegrees(coordCartographic.latitude);
const coordWGS84Height = coordCartographic.height;

return [coordWGS84Lon, coordWGS84Lat, coordWGS84Height];

GCS(WGS84) -> Cartographic

const coordCartographic = Cesium.Cartographic.fromDegrees(coordWGS84Lon, coordWGS84Lat, coordWGS84Height, resultCartographic);

Cartesian3 <-> Cartographic

Cartesian3 -> Cartographic

const coordCartographic = Cesium.Cartographic.fromCartesian(coordCartesian3);
const coordCartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(coordCartesian3);

Cartographic -> Cartesian3

const coordCartesian3 = Cesium.Cartographic.toCartesian(coordCartographic);

Cartesian3 <-> GCS(WGS84)

Cartesian3 -> GCS(WGS84)

需要通过 Cartographic 做过渡
Cartesian3 -> Cartographic -> WGS84

通过 Cesium.Cartographic.fromCartesian

const coordCartographic = Cesium.Cartographic.fromCartesian(coordCartesian3);

const coordWGS84Lon = Cesium.Math.toDegrees(coordCartographic.longitude);
const coordWGS84Lat = Cesium.Math.toDegrees(coordCartographic.latitude);
const coordWGS84Height = coordCartographic.height;

return [coordWGS84Lon, coordWGS84Lat, coordWGS84Height];

通过 Cesium.Ellipsoid.WGS84.cartesianToCartographic

单个坐标转换

const coordCartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(coordCartesian3);

const coordWGS84Lon = Cesium.Math.toDegrees(coordCartographic.longitude);
const coordWGS84Lat = Cesium.Math.toDegrees(coordCartographic.latitude);
const coordWGS84Height = coordCartographic.height;

return [coordWGS84Lon, coordWGS84Lat, coordWGS84Height];

多个坐标转换

const coordCartographicArray = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(coordCartesian3Array);

const coordWGS84Array = new Array(coordCartographicArray.length)
coordCartographicArray.forEach((coordCartographic, index) => {
	const coordWGS84Lon = Cesium.Math.toDegrees(coordCartographic.longitude);
	const coordWGS84Lat = Cesium.Math.toDegrees(coordCartographic.latitude);
	const coordWGS84Height = coordCartographic.height;
	coordWGS84Array[index] = [coordWGS84Lon, coordWGS84Lat, coordWGS84Height];
})

return coordWGS84Array;

GCS(WGS84) -> Cartesian3

需要通过 Cartographic 做过渡
WGS84 -> Cartographic -> Cartesian3

const coordCartographic = Cesium.Cartographic.fromDegrees(coordWGS84Lon, coordWGS84Lat, coordWGS84Height);

const coordCartesian3 = Cesium.Cartographic.toCartesian(coordCartographic);

return coordCartesian3;