index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // index.ts
  2. import { segmentEach } from "@turf/meta";
  3. import { getGeom } from "@turf/invariant";
  4. import { lineOverlap } from "@turf/line-overlap";
  5. import { lineIntersect } from "@turf/line-intersect";
  6. import { geojsonEquality } from "geojson-equality-ts";
  7. function booleanOverlap(feature1, feature2) {
  8. const geom1 = getGeom(feature1);
  9. const geom2 = getGeom(feature2);
  10. const type1 = geom1.type;
  11. const type2 = geom2.type;
  12. if (type1 === "MultiPoint" && type2 !== "MultiPoint" || (type1 === "LineString" || type1 === "MultiLineString") && type2 !== "LineString" && type2 !== "MultiLineString" || (type1 === "Polygon" || type1 === "MultiPolygon") && type2 !== "Polygon" && type2 !== "MultiPolygon") {
  13. throw new Error("features must be of the same type");
  14. }
  15. if (type1 === "Point") throw new Error("Point geometry not supported");
  16. if (geojsonEquality(feature1, feature2, { precision: 6 }))
  17. return false;
  18. let overlap = 0;
  19. switch (type1) {
  20. case "MultiPoint":
  21. for (var i = 0; i < geom1.coordinates.length; i++) {
  22. for (var j = 0; j < geom2.coordinates.length; j++) {
  23. var coord1 = geom1.coordinates[i];
  24. var coord2 = geom2.coordinates[j];
  25. if (coord1[0] === coord2[0] && coord1[1] === coord2[1]) {
  26. return true;
  27. }
  28. }
  29. }
  30. return false;
  31. case "LineString":
  32. case "MultiLineString":
  33. segmentEach(feature1, (segment1) => {
  34. segmentEach(feature2, (segment2) => {
  35. if (lineOverlap(segment1, segment2).features.length) overlap++;
  36. });
  37. });
  38. break;
  39. case "Polygon":
  40. case "MultiPolygon":
  41. segmentEach(feature1, (segment1) => {
  42. segmentEach(feature2, (segment2) => {
  43. if (lineIntersect(segment1, segment2).features.length) overlap++;
  44. });
  45. });
  46. break;
  47. }
  48. return overlap > 0;
  49. }
  50. var turf_boolean_overlap_default = booleanOverlap;
  51. export {
  52. booleanOverlap,
  53. turf_boolean_overlap_default as default
  54. };
  55. //# sourceMappingURL=index.js.map