index.cjs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
  2. var _helpers = require('@turf/helpers');
  3. function kinks(featureIn) {
  4. let coordinates;
  5. let feature;
  6. const results = {
  7. type: "FeatureCollection",
  8. features: []
  9. };
  10. if (featureIn.type === "Feature") {
  11. feature = featureIn.geometry;
  12. } else {
  13. feature = featureIn;
  14. }
  15. if (feature.type === "LineString") {
  16. coordinates = [feature.coordinates];
  17. } else if (feature.type === "MultiLineString") {
  18. coordinates = feature.coordinates;
  19. } else if (feature.type === "MultiPolygon") {
  20. coordinates = [].concat(...feature.coordinates);
  21. } else if (feature.type === "Polygon") {
  22. coordinates = feature.coordinates;
  23. } else {
  24. throw new Error(
  25. "Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry"
  26. );
  27. }
  28. coordinates.forEach((line1) => {
  29. coordinates.forEach((line2) => {
  30. for (let i = 0; i < line1.length - 1; i++) {
  31. for (let k = i; k < line2.length - 1; k++) {
  32. if (line1 === line2) {
  33. if (Math.abs(i - k) === 1) {
  34. continue;
  35. }
  36. if (
  37. // segments are first and last segment of lineString
  38. i === 0 && k === line1.length - 2 && // lineString is closed
  39. line1[i][0] === line1[line1.length - 1][0] && line1[i][1] === line1[line1.length - 1][1]
  40. ) {
  41. continue;
  42. }
  43. }
  44. const intersection = lineIntersects(
  45. line1[i][0],
  46. line1[i][1],
  47. line1[i + 1][0],
  48. line1[i + 1][1],
  49. line2[k][0],
  50. line2[k][1],
  51. line2[k + 1][0],
  52. line2[k + 1][1]
  53. );
  54. if (intersection) {
  55. results.features.push(_helpers.point.call(void 0, [intersection[0], intersection[1]]));
  56. }
  57. }
  58. }
  59. });
  60. });
  61. return results;
  62. }
  63. function lineIntersects(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {
  64. let denominator;
  65. let a;
  66. let b;
  67. let numerator1;
  68. let numerator2;
  69. const result = {
  70. x: null,
  71. y: null,
  72. onLine1: false,
  73. onLine2: false
  74. };
  75. denominator = (line2EndY - line2StartY) * (line1EndX - line1StartX) - (line2EndX - line2StartX) * (line1EndY - line1StartY);
  76. if (denominator === 0) {
  77. if (result.x !== null && result.y !== null) {
  78. return result;
  79. } else {
  80. return false;
  81. }
  82. }
  83. a = line1StartY - line2StartY;
  84. b = line1StartX - line2StartX;
  85. numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b;
  86. numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b;
  87. a = numerator1 / denominator;
  88. b = numerator2 / denominator;
  89. result.x = line1StartX + a * (line1EndX - line1StartX);
  90. result.y = line1StartY + a * (line1EndY - line1StartY);
  91. if (a >= 0 && a <= 1) {
  92. result.onLine1 = true;
  93. }
  94. if (b >= 0 && b <= 1) {
  95. result.onLine2 = true;
  96. }
  97. if (result.onLine1 && result.onLine2) {
  98. return [result.x, result.y];
  99. } else {
  100. return false;
  101. }
  102. }
  103. var turf_kinks_default = kinks;
  104. exports.default = turf_kinks_default; exports.kinks = kinks;
  105. //# sourceMappingURL=index.cjs.map