|
|
|
|
import {getAzimuth} from "@/utils/map/geocomputation.ts";
|
|
|
|
|
import {Cartesian3} from "cesium";
|
|
|
|
|
|
|
|
|
|
class Angle {
|
|
|
|
|
constructor() {}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 十进制经纬度转度分秒,精确至毫秒
|
|
|
|
|
* @param decimal_var 十进制经纬度
|
|
|
|
|
* @constructor
|
|
|
|
|
*/
|
|
|
|
|
static DecimalDegree2DMS(decimal_var: number|string){
|
|
|
|
|
if(!decimal_var.toString().includes('.'))
|
|
|
|
|
return decimal_var.toString() + '°0\'0\'\''
|
|
|
|
|
let decimalStr = decimal_var.toString().split('.')
|
|
|
|
|
let degreeStr = decimalStr[0]
|
|
|
|
|
if (decimalStr[1]){
|
|
|
|
|
let minutes = Number(decimalStr[1]) / Math.pow(10,decimalStr[1].length) * 60
|
|
|
|
|
if(!minutes.toString().includes('.'))
|
|
|
|
|
return degreeStr + '°'+ minutes.toString() +'\'0\'\''
|
|
|
|
|
let minuteSecondsStr = minutes.toString().split('.')
|
|
|
|
|
if (minuteSecondsStr[1]){
|
|
|
|
|
let secondStr = Number(minuteSecondsStr[1]) / Math.pow(10,minuteSecondsStr[1].length) * 60
|
|
|
|
|
return degreeStr + '°'+ minuteSecondsStr[0] +'\'' + secondStr.toFixed(3) + '\'\''
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 计算方位角,单位度
|
|
|
|
|
* @param p1 起点
|
|
|
|
|
* @param p2 终点
|
|
|
|
|
* @param digits 保留小数位数,默认保留1位小数
|
|
|
|
|
*/
|
|
|
|
|
static getAzimuth(p1: Cartesian3, p2: Cartesian3, digits=1){
|
|
|
|
|
return getAzimuth(p1, p2, digits)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 十进制度转弧度
|
|
|
|
|
* @param degree 十进制度
|
|
|
|
|
*/
|
|
|
|
|
static degree2rad(degree: number): number {
|
|
|
|
|
return Math.PI/180 * degree
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 弧度转十进制度
|
|
|
|
|
* @param rad 弧度
|
|
|
|
|
*/
|
|
|
|
|
static rad2degree(rad: number): number {
|
|
|
|
|
return 180/Math.PI * rad
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export { Angle }
|