meface/docs/.vuepress/components/js/cUtils.js

87 lines
3.5 KiB
JavaScript
Raw Normal View History

2023-11-17 10:54:23 +08:00
export default {
cartesianToLnglat:(cartesian)=>{
// //笛卡尔空间坐标转WGS84弧度.
// const ellipsoid84 = Cesium.Ellipsoid.wgs84;
// const cartographicPosition = ellipsoid84.cartesianToCartographic(cartesian);
const cartographicPosition = Cesium.Cartographic.fromCartesian(cartesian);
return [
Cesium.Math.toDegrees(cartographicPosition.longitude),
Cesium.Math.toDegrees(cartographicPosition.latitude),
]
},
getCenterByPositions:(cartesianArr)=>{
let points = [];
cartesianArr.forEach(cartesianCoor=>{
let cartesian = new Cesium.Cartesian3(cartesianCoor.x, cartesianCoor.y, cartesianCoor.z)
points.push(cUtil.cartesianToLnglat(cartesian))
})
var features = turf.points(points);
let center = turf.center(features);
return center.geometry.coordinates;
},
/**
* 全局唯一标识符GUIDGlobally Unique Identifier也称作 UUID(Universally Unique IDentifier)
* 可以指定长度
* @param len
* @param radix
* @returns {string}
*/
uuid:function(len, radix) {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var uuid = [], i;
radix = radix || chars.length;
if (len) {
// Compact form
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
} else {
// rfc4122, version 4 form
var r;
// rfc4122 requires these characters
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
// Fill in random data. At i==19 set the high bits of clock sequence as
// per rfc4122, sec. 4.1.5
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
},
focus:(data,angle=-45,h=200)=>{
const length = (Math.PI * Cesium.Ellipsoid.WGS84.minimumRadius) / 180;
let dist = h/Math.tan( Math.abs(angle) * Math.PI/180)/length;
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(data.lng, data.lat-dist, 200.0),
orientation: {
heading: 0.0,
pitch: Cesium.Math.toRadians(angle),
roll: 0.0,
},
});
},
}
// 对Date的扩展将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}