index.js 887 B

123456789101112131415161718192021222324252627282930
  1. import { getCoords } from "@turf/invariant";
  2. /**
  3. * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.
  4. *
  5. * @name booleanClockwise
  6. * @param {Feature<LineString>|LineString|Array<Array<number>>} line to be evaluated
  7. * @returns {boolean} true/false
  8. * @example
  9. * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);
  10. * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);
  11. *
  12. * turf.booleanClockwise(clockwiseRing)
  13. * //=true
  14. * turf.booleanClockwise(counterClockwiseRing)
  15. * //=false
  16. */
  17. export default function booleanClockwise(line) {
  18. var ring = getCoords(line);
  19. var sum = 0;
  20. var i = 1;
  21. var prev;
  22. var cur;
  23. while (i < ring.length) {
  24. prev = cur || ring[0];
  25. cur = ring[i];
  26. sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);
  27. i++;
  28. }
  29. return sum > 0;
  30. }