Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-04-11 00:41:47
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import { Transform } from '@dc-modules/transform'
  7. import Parse from '@dc-modules/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. if (isNaN(vector.x) || isNaN(vector.y) || isNaN(vector.z)) {
  34. return 0
  35. }
  36. Cesium.Cartesian3.normalize(vector, vector)
  37. let heading = Math.atan2(vector.y, vector.x) - Cesium.Math.PI_OVER_TWO
  38. heading = Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading)
  39. return isNaN(heading) ? 0 : heading
  40. }