Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

heading.js 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 heading = 0
  10. let startPosition = start
  11. let endPosition = end
  12. if (!(start instanceof Cesium.Cartesian3)) {
  13. startPosition = Parse.parsePosition(start)
  14. startPosition = Transform.transformWGS84ToCartesian(startPosition)
  15. }
  16. if (!(end instanceof Cesium.Cartesian3)) {
  17. endPosition = Parse.parsePosition(end)
  18. endPosition = Transform.transformWGS84ToCartesian(endPosition)
  19. }
  20. let v = Cesium.Cartesian3.subtract(
  21. endPosition,
  22. startPosition,
  23. new Cesium.Cartesian3()
  24. )
  25. if (v) {
  26. Cesium.Cartesian3.normalize(v, v)
  27. let up = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal(
  28. startPosition,
  29. new Cesium.Cartesian3()
  30. )
  31. let east = Cesium.Cartesian3.cross(
  32. Cesium.Cartesian3.UNIT_Z,
  33. up,
  34. new Cesium.Cartesian3()
  35. )
  36. let north = Cesium.Cartesian3.cross(up, east, new Cesium.Cartesian3())
  37. heading = Math.atan2(
  38. Cesium.Cartesian3.dot(v, east),
  39. Cesium.Cartesian3.dot(v, north)
  40. )
  41. }
  42. return heading
  43. }