| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // index.ts
- import { segmentEach } from "@turf/meta";
- import { getGeom } from "@turf/invariant";
- import { lineOverlap } from "@turf/line-overlap";
- import { lineIntersect } from "@turf/line-intersect";
- import { geojsonEquality } from "geojson-equality-ts";
- function booleanOverlap(feature1, feature2) {
- const geom1 = getGeom(feature1);
- const geom2 = getGeom(feature2);
- const type1 = geom1.type;
- const type2 = geom2.type;
- if (type1 === "MultiPoint" && type2 !== "MultiPoint" || (type1 === "LineString" || type1 === "MultiLineString") && type2 !== "LineString" && type2 !== "MultiLineString" || (type1 === "Polygon" || type1 === "MultiPolygon") && type2 !== "Polygon" && type2 !== "MultiPolygon") {
- throw new Error("features must be of the same type");
- }
- if (type1 === "Point") throw new Error("Point geometry not supported");
- if (geojsonEquality(feature1, feature2, { precision: 6 }))
- return false;
- let overlap = 0;
- switch (type1) {
- case "MultiPoint":
- for (var i = 0; i < geom1.coordinates.length; i++) {
- for (var j = 0; j < geom2.coordinates.length; j++) {
- var coord1 = geom1.coordinates[i];
- var coord2 = geom2.coordinates[j];
- if (coord1[0] === coord2[0] && coord1[1] === coord2[1]) {
- return true;
- }
- }
- }
- return false;
- case "LineString":
- case "MultiLineString":
- segmentEach(feature1, (segment1) => {
- segmentEach(feature2, (segment2) => {
- if (lineOverlap(segment1, segment2).features.length) overlap++;
- });
- });
- break;
- case "Polygon":
- case "MultiPolygon":
- segmentEach(feature1, (segment1) => {
- segmentEach(feature2, (segment2) => {
- if (lineIntersect(segment1, segment2).features.length) overlap++;
- });
- });
- break;
- }
- return overlap > 0;
- }
- var turf_boolean_overlap_default = booleanOverlap;
- export {
- booleanOverlap,
- turf_boolean_overlap_default as default
- };
- //# sourceMappingURL=index.js.map
|