Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

heading.js 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-04-11 00:41:47
  4. */
  5. import { Cesium } from '../../namespace'
  6. import { Transform } from '../transform'
  7. import Parse from '../parse/Parse'
  8. export default function heading(start, end) {
  9. let startPosition = start
  10. let endPosition = end
  11. if (!startPosition || !endPosition) {
  12. return 0
  13. }
  14. if (!(start instanceof Cesium.Cartesian3)) {
  15. startPosition = Parse.parsePosition(start)
  16. startPosition = Transform.transformWGS84ToCartesian(startPosition)
  17. }
  18. if (!(end instanceof Cesium.Cartesian3)) {
  19. endPosition = Parse.parsePosition(end)
  20. endPosition = Transform.transformWGS84ToCartesian(endPosition)
  21. }
  22. let ff = Cesium.Transforms.eastNorthUpToFixedFrame(startPosition)
  23. let v = Cesium.Cartesian3.subtract(
  24. endPosition,
  25. startPosition,
  26. new Cesium.Cartesian3()
  27. )
  28. let vector = Cesium.Matrix4.multiplyByPointAsVector(
  29. Cesium.Matrix4.inverse(ff, new Cesium.Matrix4()),
  30. v,
  31. new Cesium.Cartesian3()
  32. )
  33. let heading = Math.atan2(vector.y, vector.x) - Cesium.Math.PI_OVER_TWO
  34. heading = Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading)
  35. return isNaN(heading) ? 0 : heading
  36. }