@turf/boolean-within 7.3.1 → 7.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,10 +4,9 @@
4
4
 
5
5
  ## booleanWithin
6
6
 
7
- Boolean-within returns true if the first geometry is completely within the second geometry.
8
- The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)
9
- must not intersect the exterior of the secondary (geometry b).
10
- Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.
7
+ Tests whether geometry a is contained by geometry b.
8
+ The interiors of both geometries must intersect, and the interior and boundary of geometry a must not intersect the exterior of geometry b.
9
+ booleanWithin(a, b) is equivalent to booleanContains(b, a)
11
10
 
12
11
  ### Parameters
13
12
 
@@ -51,3 +50,8 @@ Or install the all-encompassing @turf/turf module that includes all modules as f
51
50
  ```sh
52
51
  $ npm install @turf/turf
53
52
  ```
53
+
54
+
55
+ ### Diagrams
56
+
57
+ ![esri-within](diagrams/esri-within.png)
@@ -3,6 +3,8 @@ var _bbox = require('@turf/bbox');
3
3
  var _booleanpointonline = require('@turf/boolean-point-on-line');
4
4
  var _booleanpointinpolygon = require('@turf/boolean-point-in-polygon');
5
5
  var _invariant = require('@turf/invariant');
6
+ var _helpers = require('@turf/helpers');
7
+ var _linesplit = require('@turf/line-split');
6
8
  function booleanWithin(feature1, feature2) {
7
9
  var geom1 = _invariant.getGeom.call(void 0, feature1);
8
10
  var geom2 = _invariant.getGeom.call(void 0, feature2);
@@ -80,16 +82,16 @@ function isMultiPointInMultiPoint(multiPoint1, multiPoint2) {
80
82
  }
81
83
  return true;
82
84
  }
83
- function isMultiPointOnLine(multiPoint, lineString) {
85
+ function isMultiPointOnLine(multiPoint, lineString2) {
84
86
  var foundInsidePoint = false;
85
87
  for (var i = 0; i < multiPoint.coordinates.length; i++) {
86
- if (!_booleanpointonline.booleanPointOnLine.call(void 0, multiPoint.coordinates[i], lineString)) {
88
+ if (!_booleanpointonline.booleanPointOnLine.call(void 0, multiPoint.coordinates[i], lineString2)) {
87
89
  return false;
88
90
  }
89
91
  if (!foundInsidePoint) {
90
92
  foundInsidePoint = _booleanpointonline.booleanPointOnLine.call(void 0,
91
93
  multiPoint.coordinates[i],
92
- lineString,
94
+ lineString2,
93
95
  { ignoreEndVertices: true }
94
96
  );
95
97
  }
@@ -122,35 +124,46 @@ function isLineOnLine(lineString1, lineString2) {
122
124
  }
123
125
  return true;
124
126
  }
127
+ function splitLineIntoSegmentsOnPolygon(linestring, polygon) {
128
+ const coords = linestring.coordinates;
129
+ const outputSegments = [];
130
+ for (let i = 0; i < coords.length - 1; i++) {
131
+ const seg = _helpers.lineString.call(void 0, [coords[i], coords[i + 1]]);
132
+ const split = _linesplit.lineSplit.call(void 0, seg, _helpers.feature.call(void 0, polygon));
133
+ if (split.features.length === 0) {
134
+ outputSegments.push(seg);
135
+ } else {
136
+ outputSegments.push(...split.features);
137
+ }
138
+ }
139
+ return _helpers.featureCollection.call(void 0, outputSegments);
140
+ }
125
141
  function isLineInPoly(linestring, polygon) {
126
- var polyBbox = _bbox.bbox.call(void 0, polygon);
127
- var lineBbox = _bbox.bbox.call(void 0, linestring);
142
+ const polyBbox = _bbox.bbox.call(void 0, polygon);
143
+ const lineBbox = _bbox.bbox.call(void 0, linestring);
128
144
  if (!doBBoxOverlap(polyBbox, lineBbox)) {
129
145
  return false;
130
146
  }
131
- var foundInsidePoint = false;
132
- for (var i = 0; i < linestring.coordinates.length; i++) {
133
- if (!_booleanpointinpolygon.booleanPointInPolygon.call(void 0, linestring.coordinates[i], polygon)) {
147
+ for (const coord of linestring.coordinates) {
148
+ if (!_booleanpointinpolygon.booleanPointInPolygon.call(void 0, coord, polygon)) {
134
149
  return false;
135
150
  }
136
- if (!foundInsidePoint) {
137
- foundInsidePoint = _booleanpointinpolygon.booleanPointInPolygon.call(void 0,
138
- linestring.coordinates[i],
139
- polygon,
140
- { ignoreBoundary: true }
141
- );
151
+ }
152
+ let isContainedByPolygonBoundary = false;
153
+ const lineSegments = splitLineIntoSegmentsOnPolygon(linestring, polygon);
154
+ for (const lineSegment of lineSegments.features) {
155
+ const midpoint = getMidpoint(
156
+ lineSegment.geometry.coordinates[0],
157
+ lineSegment.geometry.coordinates[1]
158
+ );
159
+ if (!_booleanpointinpolygon.booleanPointInPolygon.call(void 0, midpoint, polygon)) {
160
+ return false;
142
161
  }
143
- if (!foundInsidePoint && i < linestring.coordinates.length - 1) {
144
- var midpoint = getMidpoint(
145
- linestring.coordinates[i],
146
- linestring.coordinates[i + 1]
147
- );
148
- foundInsidePoint = _booleanpointinpolygon.booleanPointInPolygon.call(void 0, midpoint, polygon, {
149
- ignoreBoundary: true
150
- });
162
+ if (!isContainedByPolygonBoundary && _booleanpointinpolygon.booleanPointInPolygon.call(void 0, midpoint, polygon, { ignoreBoundary: true })) {
163
+ isContainedByPolygonBoundary = true;
151
164
  }
152
165
  }
153
- return foundInsidePoint;
166
+ return isContainedByPolygonBoundary;
154
167
  }
155
168
  function isPolyInPoly(geometry1, geometry2) {
156
169
  var poly1Bbox = _bbox.bbox.call(void 0, geometry1);
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-boolean-within/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-boolean-within/dist/cjs/index.cjs","sourcesContent":[null,"import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Boolean-within returns true if the first geometry is completely within the second geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)\n * must not intersect the exterior of the secondary (geometry b).\n * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry\n): boolean {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\n\nfunction isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\n\nfunction isMultiPointInMultiPoint(\n multiPoint1: MultiPoint,\n multiPoint2: MultiPoint\n) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (\n compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])\n ) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\n\nfunction isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineString) {\n var foundInsidePoint = false;\n\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\n\nfunction isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return output && isInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction isLineInPoly(linestring: LineString, polygon: Polygon) {\n var polyBbox = calcBbox(polygon);\n var lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n var foundInsidePoint = false;\n\n for (var i = 0; i < linestring.coordinates.length; i++) {\n if (!booleanPointInPolygon(linestring.coordinates[i], polygon)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointInPolygon(\n linestring.coordinates[i],\n polygon,\n { ignoreBoundary: true }\n );\n }\n if (!foundInsidePoint && i < linestring.coordinates.length - 1) {\n var midpoint = getMidpoint(\n linestring.coordinates[i],\n linestring.coordinates[i + 1]\n );\n foundInsidePoint = booleanPointInPolygon(midpoint, polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return foundInsidePoint;\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Polygon} geometry1\n * @param {Polygon|MultiPolygon} geometry2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPolygon) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport { booleanWithin };\nexport default booleanWithin;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-boolean-within/dist/cjs/index.cjs","../../index.ts"],"names":["lineString"],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-boolean-within/dist/cjs/index.cjs","sourcesContent":[null,"import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\nimport { feature, featureCollection, lineString } from \"@turf/helpers\";\nimport { lineSplit } from \"@turf/line-split\";\n\n/**\n * Tests whether geometry a is contained by geometry b.\n * The interiors of both geometries must intersect, and the interior and boundary of geometry a must not intersect the exterior of geometry b.\n * booleanWithin(a, b) is equivalent to booleanContains(b, a)\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry\n): boolean {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\n\nfunction isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\n\nfunction isMultiPointInMultiPoint(\n multiPoint1: MultiPoint,\n multiPoint2: MultiPoint\n) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (\n compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])\n ) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\n\nfunction isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineString) {\n var foundInsidePoint = false;\n\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\n\nfunction isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return output && isInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction splitLineIntoSegmentsOnPolygon(\n linestring: LineString,\n polygon: Polygon\n) {\n const coords = linestring.coordinates;\n\n const outputSegments: Feature<LineString>[] = [];\n\n for (let i = 0; i < coords.length - 1; i++) {\n const seg = lineString([coords[i], coords[i + 1]]);\n const split = lineSplit(seg, feature(polygon));\n\n if (split.features.length === 0) {\n outputSegments.push(seg);\n } else {\n outputSegments.push(...split.features);\n }\n }\n\n return featureCollection(outputSegments);\n}\n\nfunction isLineInPoly(linestring: LineString, polygon: Polygon) {\n const polyBbox = calcBbox(polygon);\n const lineBbox = calcBbox(linestring);\n\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n\n for (const coord of linestring.coordinates) {\n if (!booleanPointInPolygon(coord, polygon)) {\n return false;\n }\n }\n\n let isContainedByPolygonBoundary = false;\n // split intersecting segments and verify their inclusion\n const lineSegments = splitLineIntoSegmentsOnPolygon(linestring, polygon);\n\n for (const lineSegment of lineSegments.features) {\n const midpoint = getMidpoint(\n lineSegment.geometry.coordinates[0],\n lineSegment.geometry.coordinates[1]\n );\n\n // make sure all segments do not intersect with polygon exterior\n if (!booleanPointInPolygon(midpoint, polygon)) {\n return false;\n }\n\n // make sure at least 1 segment intersects with the polygon's interior\n if (\n !isContainedByPolygonBoundary &&\n booleanPointInPolygon(midpoint, polygon, { ignoreBoundary: true })\n ) {\n isContainedByPolygonBoundary = true;\n }\n }\n\n return isContainedByPolygonBoundary;\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Polygon} geometry1\n * @param {Polygon|MultiPolygon} geometry2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPolygon) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport { booleanWithin };\nexport default booleanWithin;\n"]}
@@ -1,10 +1,9 @@
1
1
  import { Feature, Geometry } from 'geojson';
2
2
 
3
3
  /**
4
- * Boolean-within returns true if the first geometry is completely within the second geometry.
5
- * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)
6
- * must not intersect the exterior of the secondary (geometry b).
7
- * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.
4
+ * Tests whether geometry a is contained by geometry b.
5
+ * The interiors of both geometries must intersect, and the interior and boundary of geometry a must not intersect the exterior of geometry b.
6
+ * booleanWithin(a, b) is equivalent to booleanContains(b, a)
8
7
  *
9
8
  * @function
10
9
  * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry
@@ -1,10 +1,9 @@
1
1
  import { Feature, Geometry } from 'geojson';
2
2
 
3
3
  /**
4
- * Boolean-within returns true if the first geometry is completely within the second geometry.
5
- * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)
6
- * must not intersect the exterior of the secondary (geometry b).
7
- * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.
4
+ * Tests whether geometry a is contained by geometry b.
5
+ * The interiors of both geometries must intersect, and the interior and boundary of geometry a must not intersect the exterior of geometry b.
6
+ * booleanWithin(a, b) is equivalent to booleanContains(b, a)
8
7
  *
9
8
  * @function
10
9
  * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry
package/dist/esm/index.js CHANGED
@@ -3,6 +3,8 @@ import { bbox as calcBbox } from "@turf/bbox";
3
3
  import { booleanPointOnLine } from "@turf/boolean-point-on-line";
4
4
  import { booleanPointInPolygon } from "@turf/boolean-point-in-polygon";
5
5
  import { getGeom } from "@turf/invariant";
6
+ import { feature, featureCollection, lineString } from "@turf/helpers";
7
+ import { lineSplit } from "@turf/line-split";
6
8
  function booleanWithin(feature1, feature2) {
7
9
  var geom1 = getGeom(feature1);
8
10
  var geom2 = getGeom(feature2);
@@ -80,16 +82,16 @@ function isMultiPointInMultiPoint(multiPoint1, multiPoint2) {
80
82
  }
81
83
  return true;
82
84
  }
83
- function isMultiPointOnLine(multiPoint, lineString) {
85
+ function isMultiPointOnLine(multiPoint, lineString2) {
84
86
  var foundInsidePoint = false;
85
87
  for (var i = 0; i < multiPoint.coordinates.length; i++) {
86
- if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {
88
+ if (!booleanPointOnLine(multiPoint.coordinates[i], lineString2)) {
87
89
  return false;
88
90
  }
89
91
  if (!foundInsidePoint) {
90
92
  foundInsidePoint = booleanPointOnLine(
91
93
  multiPoint.coordinates[i],
92
- lineString,
94
+ lineString2,
93
95
  { ignoreEndVertices: true }
94
96
  );
95
97
  }
@@ -122,35 +124,46 @@ function isLineOnLine(lineString1, lineString2) {
122
124
  }
123
125
  return true;
124
126
  }
127
+ function splitLineIntoSegmentsOnPolygon(linestring, polygon) {
128
+ const coords = linestring.coordinates;
129
+ const outputSegments = [];
130
+ for (let i = 0; i < coords.length - 1; i++) {
131
+ const seg = lineString([coords[i], coords[i + 1]]);
132
+ const split = lineSplit(seg, feature(polygon));
133
+ if (split.features.length === 0) {
134
+ outputSegments.push(seg);
135
+ } else {
136
+ outputSegments.push(...split.features);
137
+ }
138
+ }
139
+ return featureCollection(outputSegments);
140
+ }
125
141
  function isLineInPoly(linestring, polygon) {
126
- var polyBbox = calcBbox(polygon);
127
- var lineBbox = calcBbox(linestring);
142
+ const polyBbox = calcBbox(polygon);
143
+ const lineBbox = calcBbox(linestring);
128
144
  if (!doBBoxOverlap(polyBbox, lineBbox)) {
129
145
  return false;
130
146
  }
131
- var foundInsidePoint = false;
132
- for (var i = 0; i < linestring.coordinates.length; i++) {
133
- if (!booleanPointInPolygon(linestring.coordinates[i], polygon)) {
147
+ for (const coord of linestring.coordinates) {
148
+ if (!booleanPointInPolygon(coord, polygon)) {
134
149
  return false;
135
150
  }
136
- if (!foundInsidePoint) {
137
- foundInsidePoint = booleanPointInPolygon(
138
- linestring.coordinates[i],
139
- polygon,
140
- { ignoreBoundary: true }
141
- );
151
+ }
152
+ let isContainedByPolygonBoundary = false;
153
+ const lineSegments = splitLineIntoSegmentsOnPolygon(linestring, polygon);
154
+ for (const lineSegment of lineSegments.features) {
155
+ const midpoint = getMidpoint(
156
+ lineSegment.geometry.coordinates[0],
157
+ lineSegment.geometry.coordinates[1]
158
+ );
159
+ if (!booleanPointInPolygon(midpoint, polygon)) {
160
+ return false;
142
161
  }
143
- if (!foundInsidePoint && i < linestring.coordinates.length - 1) {
144
- var midpoint = getMidpoint(
145
- linestring.coordinates[i],
146
- linestring.coordinates[i + 1]
147
- );
148
- foundInsidePoint = booleanPointInPolygon(midpoint, polygon, {
149
- ignoreBoundary: true
150
- });
162
+ if (!isContainedByPolygonBoundary && booleanPointInPolygon(midpoint, polygon, { ignoreBoundary: true })) {
163
+ isContainedByPolygonBoundary = true;
151
164
  }
152
165
  }
153
- return foundInsidePoint;
166
+ return isContainedByPolygonBoundary;
154
167
  }
155
168
  function isPolyInPoly(geometry1, geometry2) {
156
169
  var poly1Bbox = calcBbox(geometry1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../index.ts"],"sourcesContent":["import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Boolean-within returns true if the first geometry is completely within the second geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)\n * must not intersect the exterior of the secondary (geometry b).\n * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry\n): boolean {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\n\nfunction isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\n\nfunction isMultiPointInMultiPoint(\n multiPoint1: MultiPoint,\n multiPoint2: MultiPoint\n) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (\n compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])\n ) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\n\nfunction isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineString) {\n var foundInsidePoint = false;\n\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\n\nfunction isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return output && isInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction isLineInPoly(linestring: LineString, polygon: Polygon) {\n var polyBbox = calcBbox(polygon);\n var lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n var foundInsidePoint = false;\n\n for (var i = 0; i < linestring.coordinates.length; i++) {\n if (!booleanPointInPolygon(linestring.coordinates[i], polygon)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointInPolygon(\n linestring.coordinates[i],\n polygon,\n { ignoreBoundary: true }\n );\n }\n if (!foundInsidePoint && i < linestring.coordinates.length - 1) {\n var midpoint = getMidpoint(\n linestring.coordinates[i],\n linestring.coordinates[i + 1]\n );\n foundInsidePoint = booleanPointInPolygon(midpoint, polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return foundInsidePoint;\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Polygon} geometry1\n * @param {Polygon|MultiPolygon} geometry2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPolygon) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport { booleanWithin };\nexport default booleanWithin;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../index.ts"],"sourcesContent":["import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\nimport { feature, featureCollection, lineString } from \"@turf/helpers\";\nimport { lineSplit } from \"@turf/line-split\";\n\n/**\n * Tests whether geometry a is contained by geometry b.\n * The interiors of both geometries must intersect, and the interior and boundary of geometry a must not intersect the exterior of geometry b.\n * booleanWithin(a, b) is equivalent to booleanContains(b, a)\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry\n): boolean {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\n\nfunction isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\n\nfunction isMultiPointInMultiPoint(\n multiPoint1: MultiPoint,\n multiPoint2: MultiPoint\n) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (\n compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])\n ) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\n\nfunction isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineString) {\n var foundInsidePoint = false;\n\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\n\nfunction isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return output && isInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction splitLineIntoSegmentsOnPolygon(\n linestring: LineString,\n polygon: Polygon\n) {\n const coords = linestring.coordinates;\n\n const outputSegments: Feature<LineString>[] = [];\n\n for (let i = 0; i < coords.length - 1; i++) {\n const seg = lineString([coords[i], coords[i + 1]]);\n const split = lineSplit(seg, feature(polygon));\n\n if (split.features.length === 0) {\n outputSegments.push(seg);\n } else {\n outputSegments.push(...split.features);\n }\n }\n\n return featureCollection(outputSegments);\n}\n\nfunction isLineInPoly(linestring: LineString, polygon: Polygon) {\n const polyBbox = calcBbox(polygon);\n const lineBbox = calcBbox(linestring);\n\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n\n for (const coord of linestring.coordinates) {\n if (!booleanPointInPolygon(coord, polygon)) {\n return false;\n }\n }\n\n let isContainedByPolygonBoundary = false;\n // split intersecting segments and verify their inclusion\n const lineSegments = splitLineIntoSegmentsOnPolygon(linestring, polygon);\n\n for (const lineSegment of lineSegments.features) {\n const midpoint = getMidpoint(\n lineSegment.geometry.coordinates[0],\n lineSegment.geometry.coordinates[1]\n );\n\n // make sure all segments do not intersect with polygon exterior\n if (!booleanPointInPolygon(midpoint, polygon)) {\n return false;\n }\n\n // make sure at least 1 segment intersects with the polygon's interior\n if (\n !isContainedByPolygonBoundary &&\n booleanPointInPolygon(midpoint, polygon, { ignoreBoundary: true })\n ) {\n isContainedByPolygonBoundary = true;\n }\n }\n\n return isContainedByPolygonBoundary;\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Polygon} geometry1\n * @param {Polygon|MultiPolygon} geometry2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPolygon) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport { booleanWithin };\nexport default booleanWithin;\n"],"mappings":"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","names":["lineString"]}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@turf/boolean-within",
3
- "version": "7.3.1",
3
+ "version": "7.3.2",
4
4
  "description": "Determines whether the first geometry is completely within the second geometry.",
5
5
  "author": "Turf Authors",
6
6
  "contributors": [
7
- "Rowan Winsemius <@rowanwins>"
7
+ "Rowan Winsemius <@rowanwins>",
8
+ "Samuel Arbibe <@samuelarbibe>"
8
9
  ],
9
10
  "license": "MIT",
10
11
  "bugs": {
@@ -70,13 +71,14 @@
70
71
  "typescript": "^5.8.3"
71
72
  },
72
73
  "dependencies": {
73
- "@turf/bbox": "7.3.1",
74
- "@turf/boolean-point-in-polygon": "7.3.1",
75
- "@turf/boolean-point-on-line": "7.3.1",
76
- "@turf/helpers": "7.3.1",
77
- "@turf/invariant": "7.3.1",
74
+ "@turf/bbox": "7.3.2",
75
+ "@turf/boolean-point-in-polygon": "7.3.2",
76
+ "@turf/boolean-point-on-line": "7.3.2",
77
+ "@turf/helpers": "7.3.2",
78
+ "@turf/invariant": "7.3.2",
79
+ "@turf/line-split": "7.3.2",
78
80
  "@types/geojson": "^7946.0.10",
79
81
  "tslib": "^2.8.1"
80
82
  },
81
- "gitHead": "b7f1b4eafb760431e03955499d8eac9489438219"
83
+ "gitHead": "099d9915467bacf45d554be4533fa9998c4efc88"
82
84
  }