index.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // index.ts
  2. import { degreesToRadians, radiansToDegrees } from "@turf/helpers";
  3. import { getCoord } from "@turf/invariant";
  4. function rhumbBearing(start, end, options = {}) {
  5. let bear360;
  6. if (options.final) {
  7. bear360 = calculateRhumbBearing(getCoord(end), getCoord(start));
  8. } else {
  9. bear360 = calculateRhumbBearing(getCoord(start), getCoord(end));
  10. }
  11. const bear180 = bear360 > 180 ? -(360 - bear360) : bear360;
  12. return bear180;
  13. }
  14. function calculateRhumbBearing(from, to) {
  15. const phi1 = degreesToRadians(from[1]);
  16. const phi2 = degreesToRadians(to[1]);
  17. let deltaLambda = degreesToRadians(to[0] - from[0]);
  18. if (deltaLambda > Math.PI) {
  19. deltaLambda -= 2 * Math.PI;
  20. }
  21. if (deltaLambda < -Math.PI) {
  22. deltaLambda += 2 * Math.PI;
  23. }
  24. const deltaPsi = Math.log(
  25. Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4)
  26. );
  27. const theta = Math.atan2(deltaLambda, deltaPsi);
  28. return (radiansToDegrees(theta) + 360) % 360;
  29. }
  30. var turf_rhumb_bearing_default = rhumbBearing;
  31. export {
  32. turf_rhumb_bearing_default as default,
  33. rhumbBearing
  34. };
  35. //# sourceMappingURL=index.js.map