|                                          | 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | /**
 * @Author: Caven
 * @Date: 2020-04-11 00:41:47
 */
import { Cesium } from '../../namespace'
import { Transform } from '../transform'
import Parse from '../parse/Parse'
export default function heading(start, end) {
  let startPosition = start
  let endPosition = end
  if (!startPosition || !endPosition) {
    return 0
  }
  if (!(start instanceof Cesium.Cartesian3)) {
    startPosition = Parse.parsePosition(start)
    startPosition = Transform.transformWGS84ToCartesian(startPosition)
  }
  if (!(end instanceof Cesium.Cartesian3)) {
    endPosition = Parse.parsePosition(end)
    endPosition = Transform.transformWGS84ToCartesian(endPosition)
  }
  let ff = Cesium.Transforms.eastNorthUpToFixedFrame(startPosition)
  let v = Cesium.Cartesian3.subtract(
    endPosition,
    startPosition,
    new Cesium.Cartesian3()
  )
  let vector = Cesium.Matrix4.multiplyByPointAsVector(
    Cesium.Matrix4.inverse(ff, new Cesium.Matrix4()),
    v,
    new Cesium.Cartesian3()
  )
  let heading = Math.atan2(vector.y, vector.x) - Cesium.Math.PI_OVER_TWO
  heading = Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading)
  return isNaN(heading) ? 0 : heading
}
 |