87 lines
3.5 KiB
JavaScript
87 lines
3.5 KiB
JavaScript
|
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;
|
|||
|
},
|
|||
|
/**
|
|||
|
* 全局唯一标识符(GUID,Globally 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;
|
|||
|
}
|