index.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // index.ts
  2. import { cleanCoords } from "@turf/clean-coords";
  3. import { lineSegment } from "@turf/line-segment";
  4. import { rhumbBearing } from "@turf/rhumb-bearing";
  5. import { bearingToAzimuth } from "@turf/helpers";
  6. function booleanParallel(line1, line2) {
  7. if (!line1) throw new Error("line1 is required");
  8. if (!line2) throw new Error("line2 is required");
  9. var type1 = getType(line1, "line1");
  10. if (type1 !== "LineString") throw new Error("line1 must be a LineString");
  11. var type2 = getType(line2, "line2");
  12. if (type2 !== "LineString") throw new Error("line2 must be a LineString");
  13. var segments1 = lineSegment(cleanCoords(line1)).features;
  14. var segments2 = lineSegment(cleanCoords(line2)).features;
  15. for (var i = 0; i < segments1.length; i++) {
  16. var segment1 = segments1[i].geometry.coordinates;
  17. if (!segments2[i]) break;
  18. var segment2 = segments2[i].geometry.coordinates;
  19. if (!isParallel(segment1, segment2)) return false;
  20. }
  21. return true;
  22. }
  23. function isParallel(segment1, segment2) {
  24. var slope1 = bearingToAzimuth(rhumbBearing(segment1[0], segment1[1]));
  25. var slope2 = bearingToAzimuth(rhumbBearing(segment2[0], segment2[1]));
  26. return slope1 === slope2 || (slope2 - slope1) % 180 === 0;
  27. }
  28. function getType(geojson, name) {
  29. if (geojson.geometry && geojson.geometry.type)
  30. return geojson.geometry.type;
  31. if (geojson.type) return geojson.type;
  32. throw new Error("Invalid GeoJSON object for " + name);
  33. }
  34. var turf_boolean_parallel_default = booleanParallel;
  35. export {
  36. booleanParallel,
  37. turf_boolean_parallel_default as default
  38. };
  39. //# sourceMappingURL=index.js.map