index.cjs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
  2. var _helpers = require('@turf/helpers');
  3. var _meta = require('@turf/meta');
  4. function polygonSmooth(inputPolys, options) {
  5. options = options || {};
  6. options.iterations = options.iterations || 1;
  7. const { iterations } = options;
  8. const outPolys = [];
  9. if (!inputPolys) throw new Error("inputPolys is required");
  10. _meta.geomEach.call(void 0, inputPolys, function(geom, geomIndex, properties) {
  11. if (geom.type === "Polygon") {
  12. let outCoords = [[]];
  13. for (let i = 0; i < iterations; i++) {
  14. let tempOutput = [];
  15. let poly = geom;
  16. if (i > 0) {
  17. poly = _helpers.polygon.call(void 0, outCoords).geometry;
  18. }
  19. processPolygon(poly, tempOutput);
  20. outCoords = tempOutput.slice(0);
  21. }
  22. outPolys.push(_helpers.polygon.call(void 0, outCoords, properties));
  23. } else if (geom.type === "MultiPolygon") {
  24. let outCoords = [[[]]];
  25. for (let y = 0; y < iterations; y++) {
  26. let tempOutput = [];
  27. let poly = geom;
  28. if (y > 0) {
  29. poly = _helpers.multiPolygon.call(void 0, outCoords).geometry;
  30. }
  31. processMultiPolygon(poly, tempOutput);
  32. outCoords = tempOutput.slice(0);
  33. }
  34. outPolys.push(_helpers.multiPolygon.call(void 0, outCoords, properties));
  35. } else {
  36. throw new Error("geometry is invalid, must be Polygon or MultiPolygon");
  37. }
  38. });
  39. return _helpers.featureCollection.call(void 0, outPolys);
  40. }
  41. function processPolygon(poly, tempOutput) {
  42. var previousCoord;
  43. var previousGeometryIndex;
  44. _meta.coordEach.call(void 0,
  45. poly,
  46. function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
  47. if (previousGeometryIndex !== geometryIndex) {
  48. tempOutput.push([]);
  49. } else {
  50. var p0x = previousCoord[0];
  51. var p0y = previousCoord[1];
  52. var p1x = currentCoord[0];
  53. var p1y = currentCoord[1];
  54. tempOutput[geometryIndex].push([
  55. 0.75 * p0x + 0.25 * p1x,
  56. 0.75 * p0y + 0.25 * p1y
  57. ]);
  58. tempOutput[geometryIndex].push([
  59. 0.25 * p0x + 0.75 * p1x,
  60. 0.25 * p0y + 0.75 * p1y
  61. ]);
  62. }
  63. previousCoord = currentCoord;
  64. previousGeometryIndex = geometryIndex;
  65. },
  66. false
  67. );
  68. tempOutput.forEach(function(ring) {
  69. ring.push(ring[0]);
  70. });
  71. }
  72. function processMultiPolygon(poly, tempOutput) {
  73. let previousCoord;
  74. let previousMultiFeatureIndex;
  75. let previousGeometryIndex;
  76. _meta.coordEach.call(void 0,
  77. poly,
  78. function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
  79. if (previousMultiFeatureIndex !== multiFeatureIndex) {
  80. tempOutput.push([[]]);
  81. } else if (previousGeometryIndex !== geometryIndex) {
  82. tempOutput[multiFeatureIndex].push([]);
  83. } else {
  84. var p0x = previousCoord[0];
  85. var p0y = previousCoord[1];
  86. var p1x = currentCoord[0];
  87. var p1y = currentCoord[1];
  88. tempOutput[multiFeatureIndex][geometryIndex].push([
  89. 0.75 * p0x + 0.25 * p1x,
  90. 0.75 * p0y + 0.25 * p1y
  91. ]);
  92. tempOutput[multiFeatureIndex][geometryIndex].push([
  93. 0.25 * p0x + 0.75 * p1x,
  94. 0.25 * p0y + 0.75 * p1y
  95. ]);
  96. }
  97. previousCoord = currentCoord;
  98. previousMultiFeatureIndex = multiFeatureIndex;
  99. previousGeometryIndex = geometryIndex;
  100. },
  101. false
  102. );
  103. tempOutput.forEach(function(poly2) {
  104. poly2.forEach(function(ring) {
  105. ring.push(ring[0]);
  106. });
  107. });
  108. }
  109. var turf_polygon_smooth_default = polygonSmooth;
  110. exports.default = turf_polygon_smooth_default; exports.polygonSmooth = polygonSmooth;
  111. //# sourceMappingURL=index.cjs.map