125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
|
/**
|
|||
|
* Created by bingqx on 2016/12/25.
|
|||
|
*/
|
|||
|
'use strict';
|
|||
|
|
|||
|
const {Cartesian3, Cartographic, WebMercatorProjection, SceneTransforms, CesiumMath} = require('cesium');
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* 坐标转换类
|
|||
|
* @param {Object} viewer 地球容器
|
|||
|
* @constructor
|
|||
|
*/
|
|||
|
function CoorTrans(viewer) {
|
|||
|
this._viewer = viewer;
|
|||
|
this._wmp = new WebMercatorProjection();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 屏幕坐标转世界坐标
|
|||
|
* @param {Number} [screenX] 屏幕坐标x
|
|||
|
* @param {Number} [screenY] 屏幕坐标y
|
|||
|
* @returns {Cartesian3} 世界坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromScreenToCartesian3 = function (screenX, screenY) {
|
|||
|
let pick = new Cartesian2(screenX, screenY);
|
|||
|
if (this._viewer.scene.mode === 3) {
|
|||
|
return this._viewer.scene.globe.pick(this._viewer.camera.getPickRay(pick), this._viewer.scene);
|
|||
|
} else {
|
|||
|
return this._viewer.camera.pickEllipsoid(pick, this._viewer.scene.globe.ellipsoid);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 世界坐标转地理坐标(弧度)
|
|||
|
* @param {Cartesian3} [cartesian] 世界坐标
|
|||
|
* @returns {Cartographic} 地理坐标(弧度)
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromCartesian3ToCartographic = function (cartesian) {
|
|||
|
return this._viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 世界坐标转屏幕坐标
|
|||
|
* @param {Cartesian3} [cartesian] 世界坐标
|
|||
|
* @returns {Cartesian2} 屏幕坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromCartesian3ToScreen = function (cartesian) {
|
|||
|
return SceneTransforms.wgs84ToWindowCoordinates(this._viewer.scene, cartesian);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 世界坐标转经纬度坐标
|
|||
|
* @param {Cartesian3} cartesian 世界坐标
|
|||
|
* @returns {Object} 经纬度坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromCartesian3ToDegree = function (cartesian) {
|
|||
|
let cartographic = this.fromCartesian3ToCartographic(cartesian);
|
|||
|
return this.fromCartographicToDegree(cartographic)
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 地理坐标(弧度)转经纬度坐标
|
|||
|
* @param {Cartographic} [cartographic] 地理坐标(弧度)
|
|||
|
* @returns {Object} 经纬度坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromCartographicToDegree = function (cartographic) {
|
|||
|
return {
|
|||
|
"lon": CesiumMath.toDegrees(cartographic.longitude),
|
|||
|
"lat": CesiumMath.toDegrees(cartographic.latitude),
|
|||
|
"height": cartographic.height
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 地理坐标(弧度)转世界坐标
|
|||
|
* @param {Cartographic} [cartographic] 地理坐标(弧度)
|
|||
|
* @returns {Cartesian3} 世界坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromCartographicToCartesian3 = function (cartographic) {
|
|||
|
return this._viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 经纬度坐标转地理坐标(弧度)
|
|||
|
* @param {Object} [degrees] 经纬度坐标
|
|||
|
* @returns {Cartographic} 地理坐标(弧度)
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromDegreesToCartographic = function (degrees) {
|
|||
|
return Cartographic.fromDegrees(degrees.lon, degrees.lat, degrees.height);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 经纬度转世界坐标
|
|||
|
* @param {Object} [degrees] 经纬度坐标
|
|||
|
* @returns {Cartesian3} 世界坐标
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromDegreesToCartesian3 = function (degrees) {
|
|||
|
return Cartesian3.fromDegrees(degrees.lon, degrees.lat, degrees.height);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* WGS84坐标转墨卡托
|
|||
|
* @param {Cartographic} cartographic 经纬度(弧度)
|
|||
|
* @returns {Cartesian3} 墨卡托坐标,单位米
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromWGS84ToMercator = function (cartographic) {
|
|||
|
return this._wmp.project(cartographic);
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* 墨卡托坐标转WGS84
|
|||
|
* @param {Cartesian3} cartesian 墨卡托坐标,单位米,例如new Cartesian3(x,y,0)
|
|||
|
* @returns {Cartographic} 经纬度(弧度)
|
|||
|
*/
|
|||
|
CoorTrans.prototype.fromMercatorToWGS84 = function (cartesian) {
|
|||
|
return this._wmp.unproject(cartesian)
|
|||
|
};
|
|||
|
|
|||
|
module.exports = {
|
|||
|
CoorTrans: CoorTrans
|
|||
|
};
|
|||
|
|
|||
|
|