index.cjs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. "use strict";Object.defineProperty(exports, "__esModule", {value: true});// index.ts
  2. var _invariant = require('@turf/invariant');
  3. var _helpers = require('@turf/helpers');
  4. var _booleandisjoint = require('@turf/boolean-disjoint');
  5. var _booleancrosses = require('@turf/boolean-crosses');
  6. var _lineintersect = require('@turf/line-intersect');
  7. var _booleanpointonline = require('@turf/boolean-point-on-line');
  8. function booleanValid(feature) {
  9. if (!feature.type) return false;
  10. const geom = _invariant.getGeom.call(void 0, feature);
  11. const type = geom.type;
  12. const coords = geom.coordinates;
  13. switch (type) {
  14. case "Point":
  15. return coords.length > 1;
  16. case "MultiPoint":
  17. for (var i = 0; i < coords.length; i++) {
  18. if (coords[i].length < 2) return false;
  19. }
  20. return true;
  21. case "LineString":
  22. if (coords.length < 2) return false;
  23. for (var i = 0; i < coords.length; i++) {
  24. if (coords[i].length < 2) return false;
  25. }
  26. return true;
  27. case "MultiLineString":
  28. if (coords.length < 2) return false;
  29. for (var i = 0; i < coords.length; i++) {
  30. if (coords[i].length < 2) return false;
  31. }
  32. return true;
  33. case "Polygon":
  34. for (var i = 0; i < geom.coordinates.length; i++) {
  35. if (coords[i].length < 4) return false;
  36. if (!checkRingsClose(coords[i])) return false;
  37. if (checkRingsForSpikesPunctures(coords[i])) return false;
  38. if (i > 0) {
  39. if (_lineintersect.lineIntersect.call(void 0, _helpers.polygon.call(void 0, [coords[0]]), _helpers.polygon.call(void 0, [coords[i]])).features.length > 1)
  40. return false;
  41. }
  42. }
  43. return true;
  44. case "MultiPolygon":
  45. for (var i = 0; i < geom.coordinates.length; i++) {
  46. var poly = geom.coordinates[i];
  47. for (var ii = 0; ii < poly.length; ii++) {
  48. if (poly[ii].length < 4) return false;
  49. if (!checkRingsClose(poly[ii])) return false;
  50. if (checkRingsForSpikesPunctures(poly[ii])) return false;
  51. if (ii === 0) {
  52. if (!checkPolygonAgainstOthers(poly, geom.coordinates, i))
  53. return false;
  54. }
  55. if (ii > 0) {
  56. if (_lineintersect.lineIntersect.call(void 0, _helpers.polygon.call(void 0, [poly[0]]), _helpers.polygon.call(void 0, [poly[ii]])).features.length > 1)
  57. return false;
  58. }
  59. }
  60. }
  61. return true;
  62. default:
  63. return false;
  64. }
  65. }
  66. function checkRingsClose(geom) {
  67. return geom[0][0] === geom[geom.length - 1][0] && geom[0][1] === geom[geom.length - 1][1];
  68. }
  69. function checkRingsForSpikesPunctures(geom) {
  70. for (var i = 0; i < geom.length - 1; i++) {
  71. var point = geom[i];
  72. for (var ii = i + 1; ii < geom.length - 2; ii++) {
  73. var seg = [geom[ii], geom[ii + 1]];
  74. if (_booleanpointonline.booleanPointOnLine.call(void 0, point, _helpers.lineString.call(void 0, seg))) return true;
  75. }
  76. }
  77. return false;
  78. }
  79. function checkPolygonAgainstOthers(poly, geom, index) {
  80. var polyToCheck = _helpers.polygon.call(void 0, poly);
  81. for (var i = index + 1; i < geom.length; i++) {
  82. if (!_booleandisjoint.booleanDisjoint.call(void 0, polyToCheck, _helpers.polygon.call(void 0, geom[i]))) {
  83. if (_booleancrosses.booleanCrosses.call(void 0, polyToCheck, _helpers.lineString.call(void 0, geom[i][0]))) return false;
  84. }
  85. }
  86. return true;
  87. }
  88. var turf_boolean_valid_default = booleanValid;
  89. exports.booleanValid = booleanValid; exports.default = turf_boolean_valid_default;
  90. //# sourceMappingURL=index.cjs.map