index.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var bearing_1 = __importDefault(require("@turf/bearing"));
  7. var helpers_1 = require("@turf/helpers");
  8. var rhumb_bearing_1 = __importDefault(require("@turf/rhumb-bearing"));
  9. /**
  10. * Finds the angle formed by two adjacent segments defined by 3 points. The result will be the (positive clockwise)
  11. * angle with origin on the `startPoint-midPoint` segment, or its explementary angle if required.
  12. *
  13. * @name angle
  14. * @param {Coord} startPoint Start Point Coordinates
  15. * @param {Coord} midPoint Mid Point Coordinates
  16. * @param {Coord} endPoint End Point Coordinates
  17. * @param {Object} [options={}] Optional parameters
  18. * @param {boolean} [options.explementary=false] Returns the explementary angle instead (360 - angle)
  19. * @param {boolean} [options.mercator=false] if calculations should be performed over Mercator or WGS84 projection
  20. * @returns {number} Angle between the provided points, or its explementary.
  21. * @example
  22. * turf.angle([5, 5], [5, 6], [3, 4]);
  23. * //=45
  24. */
  25. function angle(startPoint, midPoint, endPoint, options) {
  26. if (options === void 0) { options = {}; }
  27. // Optional Parameters
  28. if (!helpers_1.isObject(options)) {
  29. throw new Error("options is invalid");
  30. }
  31. // Validation
  32. if (!startPoint) {
  33. throw new Error("startPoint is required");
  34. }
  35. if (!midPoint) {
  36. throw new Error("midPoint is required");
  37. }
  38. if (!endPoint) {
  39. throw new Error("endPoint is required");
  40. }
  41. // Rename to shorter variables
  42. var A = startPoint;
  43. var O = midPoint;
  44. var B = endPoint;
  45. // Main
  46. var azimuthAO = helpers_1.bearingToAzimuth(options.mercator !== true ? bearing_1.default(A, O) : rhumb_bearing_1.default(A, O));
  47. var azimuthBO = helpers_1.bearingToAzimuth(options.mercator !== true ? bearing_1.default(B, O) : rhumb_bearing_1.default(B, O));
  48. var angleAO = Math.abs(azimuthAO - azimuthBO);
  49. // Explementary angle
  50. if (options.explementary === true) {
  51. return 360 - angleAO;
  52. }
  53. return angleAO;
  54. }
  55. exports.default = angle;