| import Parse from '@dc-modules/parse/Parse' | import Parse from '@dc-modules/parse/Parse' | ||||
| export default function heading(start, end) { | export default function heading(start, end) { | ||||
| let heading = 0 | |||||
| let startPosition = start | let startPosition = start | ||||
| let endPosition = end | let endPosition = end | ||||
| if (!(start instanceof Cesium.Cartesian3)) { | if (!(start instanceof Cesium.Cartesian3)) { | ||||
| startPosition = Parse.parsePosition(start) | startPosition = Parse.parsePosition(start) | ||||
| startPosition = Transform.transformWGS84ToCartesian(startPosition) | startPosition = Transform.transformWGS84ToCartesian(startPosition) | ||||
| endPosition = Transform.transformWGS84ToCartesian(endPosition) | endPosition = Transform.transformWGS84ToCartesian(endPosition) | ||||
| } | } | ||||
| let ff = Cesium.Transforms.eastNorthUpToFixedFrame(startPosition) | |||||
| let v = Cesium.Cartesian3.subtract( | let v = Cesium.Cartesian3.subtract( | ||||
| endPosition, | endPosition, | ||||
| startPosition, | startPosition, | ||||
| new Cesium.Cartesian3() | new Cesium.Cartesian3() | ||||
| ) | ) | ||||
| if (v) { | |||||
| Cesium.Cartesian3.normalize(v, v) | |||||
| let up = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal( | |||||
| startPosition, | |||||
| new Cesium.Cartesian3() | |||||
| ) | |||||
| let east = Cesium.Cartesian3.cross( | |||||
| Cesium.Cartesian3.UNIT_Z, | |||||
| up, | |||||
| new Cesium.Cartesian3() | |||||
| ) | |||||
| let north = Cesium.Cartesian3.cross(up, east, new Cesium.Cartesian3()) | |||||
| heading = Math.atan2( | |||||
| Cesium.Cartesian3.dot(v, east), | |||||
| Cesium.Cartesian3.dot(v, north) | |||||
| ) | |||||
| } | |||||
| return heading | |||||
| let vector = Cesium.Matrix4.multiplyByPointAsVector( | |||||
| Cesium.Matrix4.inverse(ff, new Cesium.Matrix4()), | |||||
| v, | |||||
| new Cesium.Cartesian3() | |||||
| ) | |||||
| Cesium.Cartesian3.normalize(vector, vector) | |||||
| let heading = Math.atan2(vector.y, vector.x) - Cesium.Math.PI_OVER_TWO | |||||
| return Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading) | |||||
| } | } |