Copy disabled (too large)
Download .txt
Showing preview only (24,147K chars total). Download the full file to get everything.
Repository: Turfjs/turf
Branch: master
Commit: 6a2f56766ce6
Files: 2471
Total size: 50.9 MB
Directory structure:
gitextract_rt4_xit0/
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── ci.yml
│ ├── prerelease.yml
│ └── release.yml
├── .gitignore
├── .husky/
│ └── pre-commit
├── .monorepolint.config.mjs
├── .prettierignore
├── .prettierrc.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── docs/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── OPEN_COLLECTIVE.md
│ ├── PUBLISHING.md
│ ├── SECURITY.md
│ └── SEE_ALSO.md
├── documentation.yml
├── eslint.config.mjs
├── examples/
│ ├── browser/
│ │ └── index.html
│ ├── create-react-app/
│ │ ├── .gitignore
│ │ ├── package.json
│ │ ├── public/
│ │ │ └── index.html
│ │ └── src/
│ │ └── index.js
│ ├── es-modules/
│ │ └── index.html
│ └── es-modules-single-module/
│ └── index.html
├── lerna.json
├── nx.json
├── package.json
├── packages/
│ ├── turf/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── rollup.config.js
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-along/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── fixtures/
│ │ │ ├── dc-line.geojson
│ │ │ ├── dc-points.geojson
│ │ │ └── route.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-angle/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-area/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ └── polygon.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-bbox/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-bbox-clip/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── lineclip.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── linestring-single-line.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── polygon-crossing-hole.geojson
│ │ │ │ ├── polygon-holes.geojson
│ │ │ │ ├── polygon-point-intersection.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── linestring-single-line.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── polygon-crossing-hole.geojson
│ │ │ ├── polygon-holes.geojson
│ │ │ ├── polygon-point-intersection.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-bbox-polygon/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-bearing/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── out/
│ │ │ └── results.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-bezier-spline/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── spline.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── bezierIn.json
│ │ │ │ ├── issue-#1063.json
│ │ │ │ └── simple.json
│ │ │ └── out/
│ │ │ ├── bezierIn.json
│ │ │ ├── issue-#1063.json
│ │ │ └── simple.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-clockwise/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ └── counter-clockwise-line.geojson
│ │ │ └── true/
│ │ │ └── clockwise-line.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-concave/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── 3vertices.geojson
│ │ │ │ ├── diamond.geojson
│ │ │ │ └── square.geojson
│ │ │ └── true/
│ │ │ ├── polygon.geojson
│ │ │ └── polygon2.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-contains/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── LineString/
│ │ │ │ │ └── LineIsNotContainedByLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── MultiPointsIsNotContainedByLine.geojson
│ │ │ │ │ │ └── MultiPointsOnLineEndsIsNotContainedByLine.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── MultiPointIsNotContainedByMultiPoint.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── MultiPointAllOnBoundaryIsNotContainedByPolygon.geojson
│ │ │ │ │ └── MultiPointIsNotContainedByPolygon.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── MultiPolygonIsNotContainedByPolygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── PointIsNotContainedByLine.geojson
│ │ │ │ │ │ ├── PointIsNotContainedByLineBecauseOnEnd.geojson
│ │ │ │ │ │ └── PointOnEndIsContainedByLinestring.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── PointIsNotContainedBYMultiPoint.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── PointIsNotContainedByPolygon.geojson
│ │ │ │ │ └── PointOnPolygonBoundary.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineIsNotContainedByPolygon.geojson
│ │ │ │ │ ├── LineIsNotContainedByPolygonBoundary.geojson
│ │ │ │ │ ├── LineIsNotFullyContainedByPolygon.geojson
│ │ │ │ │ └── issue-#1201-false.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── PolygonIsNotContainedByMultipolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── Polygon-Polygon.geojson
│ │ │ │ └── Polygon-Polygon2.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ └── LineString/
│ │ │ │ ├── LineIsContainedByLine.geojson
│ │ │ │ └── LinesExactlySame.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultipointsIsContainedByLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── MultiPointsContainedByMultiPoints.geojson
│ │ │ │ │ └── MultiPointsEqual.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPointIsContainedByPolygonBoundary.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPolygonIsContainedByPolygon.geojson
│ │ │ ├── Point/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── PointIsContainedByLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── PointIsContainedByMultiPoint.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── PointInsidePolygonBoundary.geojson
│ │ │ └── Polygon/
│ │ │ ├── LineString/
│ │ │ │ ├── LineIsContainedByPolygon.geojson
│ │ │ │ ├── LineIsContainedByPolygonWithNoInternalVertices.geojson
│ │ │ │ ├── LineIsContainedByPolygonWithSegmentOnBoundary.geojson
│ │ │ │ └── LineIsFullyContainedByPolygon.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── PolygonIsContainedByMultipolygon.geojson
│ │ │ └── Polygon/
│ │ │ ├── PolygonExactSameShape.geojson
│ │ │ └── PolygonIsContainedByPolygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-crosses/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── LineDoesNotCrossLine.geojson
│ │ │ │ │ │ ├── LineOverlapsLine.geojson
│ │ │ │ │ │ ├── LineTouchesLineBetweenVertices.geojson
│ │ │ │ │ │ ├── LineTouchesLineOnEndVertex.geojson
│ │ │ │ │ │ └── LineTouchesLineOnInternalVertex.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── LineDoesNotCrossPolygon.geojson
│ │ │ │ └── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── MultiPointNotCrossLine.geojson
│ │ │ │ │ └── MultiPointNotCrossLineEnd.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPointNotCrossPolygon.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineCrossesLineBetweenVertices.geojson
│ │ │ │ │ ├── LineCrossesLineOnEndVertex.geojson
│ │ │ │ │ ├── LineCrossesLineOnInternalVertex.geojson
│ │ │ │ │ ├── issue-1901-horizontal.geojson
│ │ │ │ │ ├── issue-1901-vertical.geojson
│ │ │ │ │ ├── issue-2967-args-reversed.geojson
│ │ │ │ │ └── issue-2967.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineCrossesPolygon.geojson
│ │ │ │ └── LineCrossesPolygonPartial.geojson
│ │ │ └── MultiPoint/
│ │ │ ├── LineString/
│ │ │ │ └── MultiPointsCrossLine.geojson
│ │ │ └── Polygon/
│ │ │ └── MultiPointsCrossPolygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-disjoint/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── LineString-LineString.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ ├── LineString-Point-1.geojson
│ │ │ │ │ │ └── LineString-Point-2.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── LineString-In-Polygon.geojson
│ │ │ │ │ └── LineString-Polygon.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── MultiPoint-LineString.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── MultiPoint-Polygon.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── MultiPolygon-Polygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── Point-LineString-1.geojson
│ │ │ │ │ │ ├── Point-LineString-2.geojson
│ │ │ │ │ │ ├── Point-LineString-3.geojson
│ │ │ │ │ │ └── Point-LineString-4.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── Point-MultiPoint.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ └── Point-Point.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── Point-Polygon-1.geojson
│ │ │ │ │ └── Point-Polygon-2.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── Polygon-Containing-Linestring.geojson
│ │ │ │ │ └── Polygon-LineString.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── Polygon-MultiPolygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── Polygon-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── Large-Inside-Small.geojson
│ │ │ │ ├── Polygon-Polygon.geojson
│ │ │ │ ├── Small-Inside-Large.geojson
│ │ │ │ └── issue-1216.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── LineString-LineString.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── LineString-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── LineString-Polygon.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultiPoint-LineString.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultiPoint-MultiPoint.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── MultiPoint-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPoint-Polygon.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPolygon-Polygon.geojson
│ │ │ ├── Point/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── Point-LineString.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── Point-Multipoint.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── Point-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── Point-Polygon.geojson
│ │ │ └── Polygon/
│ │ │ ├── LineString/
│ │ │ │ └── Polygon-LineString.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── Polygon-MultiPolygon.geojson
│ │ │ ├── Point/
│ │ │ │ └── Polygon-Point.geojson
│ │ │ └── Polygon/
│ │ │ └── Polygon-Polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-equal/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── linear-rings.geojson
│ │ │ │ ├── lines.geojson
│ │ │ │ ├── multipoints.geojson
│ │ │ │ ├── points.geojson
│ │ │ │ ├── polygons.geojson
│ │ │ │ ├── precision-default.geojson
│ │ │ │ └── precision-options.geojson
│ │ │ └── true/
│ │ │ ├── different-initials-poly.geojson
│ │ │ ├── linear-rings.geojson
│ │ │ ├── lines-extra-vertices.geojson
│ │ │ ├── lines-reverse.geojson
│ │ │ ├── lines.geojson
│ │ │ ├── multipoints.geojson
│ │ │ ├── points.geojson
│ │ │ ├── polygons.geojson
│ │ │ ├── precision-default.geojson
│ │ │ ├── precision-options.geojson
│ │ │ ├── reverse-lines.geojson
│ │ │ └── reverse-polygons.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-intersects/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── LineString-LineString.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ └── LineString-Point.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── LineString-Polygon.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── MultiPoint-LineString.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ └── MultiPoint-Point.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── MultiPoint-Polygon.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── MultiPolygon-Polygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── Point-LineString.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── Point-Multipoint.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ └── Point-Point.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ └── Point-Polygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── Polygon-LineString.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── Polygon-MultiPolygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── Polygon-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── Polygon-Polygon.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── LineString-LineString.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString-Point-1.geojson
│ │ │ │ │ └── LineString-Point-2.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineString-In-Polygon.geojson
│ │ │ │ └── LineString-Polygon.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultiPoint-LineString.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultiPoint-MultiPoint.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPoint-Polygon.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPolygon-Polygon.geojson
│ │ │ ├── Point/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── Point-LineString-1.geojson
│ │ │ │ │ ├── Point-LineString-2.geojson
│ │ │ │ │ ├── Point-LineString-3.geojson
│ │ │ │ │ └── Point-LineString-4.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── Point-MultiPoint.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── Point-Point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── Point-Polygon-1.geojson
│ │ │ │ └── Point-Polygon-2.geojson
│ │ │ └── Polygon/
│ │ │ ├── LineString/
│ │ │ │ ├── Polygon-Containing-Linestring.geojson
│ │ │ │ └── Polygon-LineString.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── Polygon-MultiPolygon.geojson
│ │ │ ├── Point/
│ │ │ │ └── Polygon-Point.geojson
│ │ │ └── Polygon/
│ │ │ ├── Large-Inside-Small.geojson
│ │ │ ├── Polygon-Polygon.geojson
│ │ │ ├── Small-Inside-Large.geojson
│ │ │ └── issue-1216.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-overlap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── equal-linear-rings.geojson
│ │ │ │ ├── equal-lines.geojson
│ │ │ │ ├── equal-multipoints.geojson
│ │ │ │ ├── equal-polygons.geojson
│ │ │ │ ├── linear-rings.geojson
│ │ │ │ ├── lines.geojson
│ │ │ │ ├── multipoints.geojson
│ │ │ │ ├── polygon-with-hole-polygon.geojson
│ │ │ │ └── polygons.geojson
│ │ │ └── true/
│ │ │ ├── linear-rings.geojson
│ │ │ ├── lines.geojson
│ │ │ ├── multipoints.geojson
│ │ │ ├── polygon-with-hole-polygon.geojson
│ │ │ ├── polygons.geojson
│ │ │ ├── simple-lines.geojson
│ │ │ └── single-multipoints.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-parallel/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── line1.geojson
│ │ │ │ └── line2.geojson
│ │ │ └── true/
│ │ │ ├── city-line.geojson
│ │ │ ├── fiji.geojson
│ │ │ ├── line1.geojson
│ │ │ ├── line3-reverse.geojson
│ │ │ ├── line3.geojson
│ │ │ ├── opposites.geojson
│ │ │ ├── resolute.geojson
│ │ │ ├── segment1.geojson
│ │ │ ├── segment2.geojson
│ │ │ ├── segment3.geojson
│ │ │ ├── verticals.geojson
│ │ │ └── verticals3d.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-point-in-polygon/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── in/
│ │ │ ├── multipoly-with-hole.geojson
│ │ │ └── poly-with-hole.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-point-on-line/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineWithOnly1SegmentIgnoreBoundary.geojson
│ │ │ │ ├── LineWithOnly1SegmentIgnoreBoundaryEnd.geojson
│ │ │ │ ├── PointIsOnLineButFailsWithSmallEpsilonValue.geojson
│ │ │ │ ├── PointIsOnLineButFailsWithoutEpsilonForBackwardsCompatibility.geojson
│ │ │ │ ├── PointOnEndFailsWhenIgnoreEndpoints.geojson
│ │ │ │ ├── PointOnStartFailsWhenIgnoreEndpoints.geojson
│ │ │ │ └── notOnLine.geojson
│ │ │ └── true/
│ │ │ ├── LineWithOnly1Segment.geojson
│ │ │ ├── LineWithOnly1SegmentOnStart.geojson
│ │ │ ├── PointOnFirstSegment.geojson
│ │ │ ├── PointOnLastSegment.geojson
│ │ │ ├── PointOnLineEnd.geojson
│ │ │ ├── PointOnLineMidVertice.geojson
│ │ │ ├── PointOnLineMidpoint.geojson
│ │ │ ├── PointOnLineStart.geojson
│ │ │ └── PointOnLineWithEpsilon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-touches/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── LinesExactSame.geojson
│ │ │ │ │ │ └── LivesOverlap.geojson
│ │ │ │ │ ├── MultiLineString/
│ │ │ │ │ │ ├── LineStringOverlapsMultiLinestring.geojson
│ │ │ │ │ │ └── LineStringSameAsMultiLinestring.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ ├── LineStringDoesNotTouchMP.geojson
│ │ │ │ │ │ └── LineStringTouchesMultiPointButInternal.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ └── LineDoesNotTouchMultiPoly.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── LineCrossesPolygon.geojson
│ │ │ │ │ ├── LineDoesNotTouch.geojson
│ │ │ │ │ └── LineWIthinPolygon.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── MultiLineStringOverlapsLine.geojson
│ │ │ │ │ │ └── MultiLineStringSameAsLine.geojson
│ │ │ │ │ ├── MultiLineString/
│ │ │ │ │ │ ├── MultiLineStringsOverlap.geojson
│ │ │ │ │ │ └── MultiLineStringsSame.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ ├── MpTouchesInternalMultiline.geojson
│ │ │ │ │ │ └── MultiPointNotTouchMultiline.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ └── MultiLineInsideMultipoly.geojson
│ │ │ │ │ ├── Point/
│ │ │ │ │ │ ├── PointNotTouchMultiLinestring.geojson
│ │ │ │ │ │ └── PointTouchesMidLineString.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── MultiLineInsidePoly.geojson
│ │ │ │ │ └── MultiLineNotTouchPoly.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── MultiPointTouchesInsideLine.geojson
│ │ │ │ │ │ └── MultipointDoesNotTouchLine.geojson
│ │ │ │ │ ├── MultiLineString/
│ │ │ │ │ │ ├── MpDoesNotTouchMultiLine.geojson
│ │ │ │ │ │ └── MpTouchesInternalMultiLine.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ ├── MultiPointDoesNotTouchMultipolygon
│ │ │ │ │ │ └── multipoint-inside-multipolygon.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── MultiPointInsidePolygon.geojson
│ │ │ │ │ └── MultiPointNoTouchPolygon.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── MultiPolyNotTouchLineString.geojson
│ │ │ │ │ ├── MultiLineString/
│ │ │ │ │ │ └── MultiPolyOverlapsMultiLine.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── MultiPolyNotTouchMultiPoint.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ ├── MultiPolysDoNotTouch.geojson
│ │ │ │ │ │ └── MultiPolysOverlap.geojson
│ │ │ │ │ └── Point/
│ │ │ │ │ └── MultiPolyNotTouchPoint.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── PointIsNotTouchLine.geojson
│ │ │ │ │ │ └── PointOnMidLinestring.geojson
│ │ │ │ │ ├── MultiLineString/
│ │ │ │ │ │ ├── MpNotTouchMidLineString.geojson
│ │ │ │ │ │ └── MpOnMidLineString.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ └── PointNotTouchMultipolygon.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── PointDoesNotTouchPolygon.geojson
│ │ │ │ │ └── PointInsidePolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── PolyDoesNotTouchLine.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ ├── PolyNotTouchMultiLine.geojson
│ │ │ │ │ └── PolyOverlapMultiLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── PolygonNoTouchMultiPoint.geojson
│ │ │ │ │ └── PolygonOverlapsMultiPoint.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── PolyNotTouchMultipoly.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── PolygonDoesNotTouchPoint.geojson
│ │ │ │ │ └── PolygonOverlapsPoint.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── PolygonsDontTouch.geojson
│ │ │ │ └── PolygonsOverlap.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── LineTouchesEndpoint.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ ├── LineStringTouchesEnd.geojson
│ │ │ │ │ └── LineStringTouchesStart.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultipointTouchesLine.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ ├── LineTouchesMultiPoly.geojson
│ │ │ │ │ └── LineTouchesSecondMultiPoly.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── LineTouchesPolygon.geojson
│ │ │ ├── MultiLineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultiLineTouchesLine.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ └── MultiLineTouchesMultiLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultiLineTouchesMultiPoint.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── MultiLineTouchesPoint.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiLineTouchesPolygon.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultipointTouchesLine.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ ├── MpTouchesEndMultiLine.geojson
│ │ │ │ │ └── MpTouchesSecondMultiLine.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── multipoint-touches-multipolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPointIsWithinPolygon.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ └── MultiLineTouchesMultiPoly.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultiPolyTouchesMultiPoint.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── MultiPolyTouchesMultiPoly.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── MpTouchesPoint.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── MultiPolyTouchesPoly.geojson
│ │ │ ├── Point/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── PointOnEndLine.geojson
│ │ │ │ │ └── PointOnStartLine.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ ├── MpOnEndLine.geojson
│ │ │ │ │ └── MpOnStartLine.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ ├── PointTouchesMultipolygon.geojson
│ │ │ │ │ └── PointTouchesMultipolygonHole.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── PointOnEdgePolygon.geojson
│ │ │ │ ├── PointOnHole.geojson
│ │ │ │ └── PointOnVerticePolygon.geojson
│ │ │ └── Polygon/
│ │ │ ├── LineString/
│ │ │ │ └── PolygonTouchesLines.geojson
│ │ │ ├── MultiLineString/
│ │ │ │ └── PolygonTouchesMultiline.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ └── PolygonTouchesMultiPoint.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── PolyTouchMultiPolys.geojson
│ │ │ ├── Point/
│ │ │ │ ├── PolygonTouchesPoint.geojson
│ │ │ │ └── PolygonTouchesPointVertice.geojson
│ │ │ └── Polygon/
│ │ │ ├── PolygonTouchesEdges.geojson
│ │ │ └── PolygonsTouchVertices.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-boolean-valid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── multipoint.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ ├── multipoly-with-2-vertices-touching.geojson
│ │ │ │ │ ├── multipolygons-overlap.geojson
│ │ │ │ │ └── not-enough-coords.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ └── point.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── not-closing-ring.geojson
│ │ │ │ ├── not-enough-coords.geojson
│ │ │ │ ├── polygon-with-hole-2-vertices-touching.geojson
│ │ │ │ ├── polygon-with-puncture.geojson
│ │ │ │ └── polygon-with-spike.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ └── linestring.geojson
│ │ │ ├── MultiLineString/
│ │ │ │ └── multilinestring.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── multipoint-with-z.geojson
│ │ │ │ └── multipoint.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ ├── multipolygon-touch.geojson
│ │ │ │ ├── multipolygon-with-hole.geojson
│ │ │ │ └── multipolygon.geojson
│ │ │ ├── Point/
│ │ │ │ ├── point-with-z.geojson
│ │ │ │ └── point.geojson
│ │ │ └── Polygon/
│ │ │ ├── polygon-internal-hole.geojson
│ │ │ ├── polygon-with-hole-1-vertice-touching.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-boolean-within/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── false/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ └── LineIsNotWithinLine.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── LineIsNotFullyWithinPolygon.geojson
│ │ │ │ │ ├── LineIsNotWIthinPolygon.geojson
│ │ │ │ │ └── LineIsNotWIthinPolygonBoundary.geojson
│ │ │ │ ├── MultiLineString/
│ │ │ │ │ └── MultiPolygon/
│ │ │ │ │ └── skip-multilinestring-not-within-multipolygon.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── MultiPointsIsNotWIthinLine.geojson
│ │ │ │ │ │ └── MultiPointsOnLineEndsIsNotWIthinLine.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── MultiPointIsNotWithinMultiPoint.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ └── multipoint-not-within-multipolygon.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── MultiPointAllOnBoundaryIsNotWithinPolygon.geojson
│ │ │ │ │ └── MultiPointIsNotWithinPolygon.geojson
│ │ │ │ ├── Point/
│ │ │ │ │ ├── LineString/
│ │ │ │ │ │ ├── PointIsNotWithinLine.geojson
│ │ │ │ │ │ ├── PointIsNotWithinLineBecauseOnEnd.geojson
│ │ │ │ │ │ └── PointOnEndIsWithinLinestring.geojson
│ │ │ │ │ ├── MultiPoint/
│ │ │ │ │ │ └── PointIsNotWithinMultiPoint.geojson
│ │ │ │ │ ├── MultiPolygon/
│ │ │ │ │ │ └── point-not-within-multipolygon.geojson
│ │ │ │ │ └── Polygon/
│ │ │ │ │ ├── PointIsNotWithinPolygon.geojson
│ │ │ │ │ └── PointOnPolygonBoundary.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── polygon-not-within-multipolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── Polygon-Polygon.geojson
│ │ │ └── true/
│ │ │ ├── LineString/
│ │ │ │ ├── LineString/
│ │ │ │ │ ├── LineIsWithinLine.geojson
│ │ │ │ │ └── LinesExactSame.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── LineIsContainedByPolygon.geojson
│ │ │ │ ├── LineIsContainedByPolygonWithNoInternalVertices.geojson
│ │ │ │ ├── LineIsContainedByPolygonWithSegmentOnBoundary.geojson
│ │ │ │ └── LineIsFullyContainedByPolygon.geojson
│ │ │ ├── MultiLineString/
│ │ │ │ └── MultiPolygon/
│ │ │ │ └── skip-multilinestring-within-multipolygon.geojson
│ │ │ ├── MultiPoint/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── MultipointsIsWithinLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── MultiPointsWithinMultiPoints.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── multipoint-within-multipolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ ├── MultiPointIsWithinPolygon.geojson
│ │ │ │ └── MultiPointSingleIsWithinPolygon.geojson
│ │ │ ├── MultiPolygon/
│ │ │ │ └── MultiPolygon/
│ │ │ │ └── skip-multipolygon-within-multipolygon.geojson
│ │ │ ├── Point/
│ │ │ │ ├── LineString/
│ │ │ │ │ └── PointIsWithinLine.geojson
│ │ │ │ ├── MultiPoint/
│ │ │ │ │ └── PointIsWithinMultiPoint.geojson
│ │ │ │ ├── MultiPolygon/
│ │ │ │ │ └── point-within-multipolygon.geojson
│ │ │ │ └── Polygon/
│ │ │ │ └── PointIsWithinPolygon.geojson
│ │ │ └── Polygon/
│ │ │ ├── MultiPolygon/
│ │ │ │ └── polygon-within-multipolygon.geojson
│ │ │ └── Polygon/
│ │ │ ├── PolygonIsWIthinPolygon.geojson
│ │ │ └── PolygonsExactSameShape.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-buffer/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection-points.geojson
│ │ │ │ ├── geometry-collection-points.geojson
│ │ │ │ ├── issue-#783.geojson
│ │ │ │ ├── issue-#801-Ecuador.geojson
│ │ │ │ ├── issue-#801.geojson
│ │ │ │ ├── issue-#815.geojson
│ │ │ │ ├── issue-#900.geojson
│ │ │ │ ├── issue-#916.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-point.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── negative-buffer.geojson
│ │ │ │ ├── north-latitude-points.geojson
│ │ │ │ ├── northern-polygon.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ └── polygon-with-holes.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection-points.geojson
│ │ │ ├── geometry-collection-points.geojson
│ │ │ ├── issue-#783.geojson
│ │ │ ├── issue-#801-Ecuador.geojson
│ │ │ ├── issue-#801.geojson
│ │ │ ├── issue-#815.geojson
│ │ │ ├── issue-#900.geojson
│ │ │ ├── issue-#916.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── multi-point.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── negative-buffer.geojson
│ │ │ ├── north-latitude-points.geojson
│ │ │ ├── northern-polygon.geojson
│ │ │ ├── point.geojson
│ │ │ └── polygon-with-holes.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-center/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── imbalanced-polygon.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── points-with-weights.geojson
│ │ │ │ ├── polygon-without-weights.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection.geojson
│ │ │ ├── imbalanced-polygon.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── point.geojson
│ │ │ ├── points-with-weights.geojson
│ │ │ ├── polygon-without-weights.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-center-mean/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection-negative-weights.geojson
│ │ │ │ ├── feature-collection-weight.geojson
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── imbalanced-polygon.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── points-with-weights.geojson
│ │ │ │ ├── polygon-with-weights.geojson
│ │ │ │ ├── polygon-without-weights.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection-negative-weights.geojson
│ │ │ ├── feature-collection-weight.geojson
│ │ │ ├── feature-collection.geojson
│ │ │ ├── imbalanced-polygon.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── point.geojson
│ │ │ ├── points-with-weights.geojson
│ │ │ ├── polygon-with-weights.geojson
│ │ │ ├── polygon-without-weights.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-center-median/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── brazil-states-weighted.json
│ │ │ │ ├── brazil-states.json
│ │ │ │ ├── burt-barber-rigby-problem-unweighted.json
│ │ │ │ ├── burt-barber-rigby-problem.json
│ │ │ │ ├── kuhn-kuenne-ukraine-problem.json
│ │ │ │ ├── lines.json
│ │ │ │ ├── square.json
│ │ │ │ ├── squares-weighted.json
│ │ │ │ ├── squares.json
│ │ │ │ ├── steiners-problem-bad-weights.json
│ │ │ │ ├── steiners-problem-low-tolerance.json
│ │ │ │ └── steiners-problem.json
│ │ │ └── out/
│ │ │ ├── brazil-states-weighted.json
│ │ │ ├── brazil-states.json
│ │ │ ├── burt-barber-rigby-problem-unweighted.json
│ │ │ ├── burt-barber-rigby-problem.json
│ │ │ ├── kuhn-kuenne-ukraine-problem.json
│ │ │ ├── lines.json
│ │ │ ├── square.json
│ │ │ ├── squares-weighted.json
│ │ │ ├── squares.json
│ │ │ ├── steiners-problem-bad-weights.json
│ │ │ ├── steiners-problem-low-tolerance.json
│ │ │ └── steiners-problem.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-center-of-mass/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── imbalanced-polygon.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection.geojson
│ │ │ ├── imbalanced-polygon.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── point.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-centroid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── imbalanced-polygon.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection.geojson
│ │ │ ├── imbalanced-polygon.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── point.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-circle/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── circle1.geojson
│ │ │ └── out/
│ │ │ └── circle1.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-clean-coords/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── clean-segment.geojson
│ │ │ │ ├── closed-linestring.geojson
│ │ │ │ ├── geometry.geojson
│ │ │ │ ├── line-3-coords.geojson
│ │ │ │ ├── multiline.geojson
│ │ │ │ ├── multipoint.geojson
│ │ │ │ ├── multipolygon.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── polygon-with-hole.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ ├── segment.geojson
│ │ │ │ ├── simple-line.geojson
│ │ │ │ ├── triangle.geojson
│ │ │ │ └── triplicate-issue1255.geojson
│ │ │ └── out/
│ │ │ ├── clean-segment.geojson
│ │ │ ├── closed-linestring.geojson
│ │ │ ├── geometry.geojson
│ │ │ ├── line-3-coords.geojson
│ │ │ ├── multiline.geojson
│ │ │ ├── multipoint.geojson
│ │ │ ├── multipolygon.geojson
│ │ │ ├── point.geojson
│ │ │ ├── polygon-with-hole.geojson
│ │ │ ├── polygon.geojson
│ │ │ ├── segment.geojson
│ │ │ ├── simple-line.geojson
│ │ │ ├── triangle.geojson
│ │ │ └── triplicate-issue1255.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-clone/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-clusters/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-clusters-dbscan/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── fiji.geojson
│ │ │ │ ├── many-points.geojson
│ │ │ │ ├── noise.geojson
│ │ │ │ ├── points-with-properties.geojson
│ │ │ │ ├── points1.geojson
│ │ │ │ └── points2.geojson
│ │ │ └── out/
│ │ │ ├── fiji.geojson
│ │ │ ├── many-points.geojson
│ │ │ ├── noise.geojson
│ │ │ ├── points-with-properties.geojson
│ │ │ ├── points1.geojson
│ │ │ └── points2.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-clusters-kmeans/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── fiji.geojson
│ │ │ │ ├── many-points.geojson
│ │ │ │ ├── points-with-properties.geojson
│ │ │ │ ├── points1.geojson
│ │ │ │ └── points2.geojson
│ │ │ └── out/
│ │ │ ├── fiji.geojson
│ │ │ ├── many-points.geojson
│ │ │ ├── points-with-properties.geojson
│ │ │ ├── points1.geojson
│ │ │ └── points2.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-collect/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-combine/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-concave/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── turf-dissolve.ts
│ │ │ ├── turf-line-dissolve.ts
│ │ │ └── turf-polygon-dissolve.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── concave-hull.geojson
│ │ │ │ ├── fiji.geojson
│ │ │ │ ├── hole.geojson
│ │ │ │ ├── issue-333.geojson
│ │ │ │ ├── pts1.geojson
│ │ │ │ ├── pts2.geojson
│ │ │ │ ├── pts3.geojson
│ │ │ │ └── support-null-geometry.geojson
│ │ │ └── out/
│ │ │ ├── concave-hull.geojson
│ │ │ ├── fiji.geojson
│ │ │ ├── hole.geojson
│ │ │ ├── issue-333.geojson
│ │ │ ├── pts1.geojson
│ │ │ ├── pts2.geojson
│ │ │ ├── pts3.geojson
│ │ │ └── support-null-geometry.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-convex/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── elevation1.geojson
│ │ │ │ ├── elevation2.geojson
│ │ │ │ ├── elevation3.geojson
│ │ │ │ ├── elevation4.geojson
│ │ │ │ └── elevation5.geojson
│ │ │ └── out/
│ │ │ ├── elevation1.geojson
│ │ │ ├── elevation2.geojson
│ │ │ ├── elevation3.geojson
│ │ │ ├── elevation4.geojson
│ │ │ └── elevation5.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-destination/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── point-0-with-elevation.geojson
│ │ │ │ ├── point-0.geojson
│ │ │ │ ├── point-180.geojson
│ │ │ │ ├── point-90.geojson
│ │ │ │ ├── point-way-far-away-km.geojson
│ │ │ │ └── point-way-far-away-miles.geojson
│ │ │ └── out/
│ │ │ ├── point-0-with-elevation.geojson
│ │ │ ├── point-0.geojson
│ │ │ ├── point-180.geojson
│ │ │ ├── point-90.geojson
│ │ │ ├── point-way-far-away-km.geojson
│ │ │ └── point-way-far-away-miles.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-difference/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── clip-polygons.geojson
│ │ │ │ ├── completely-overlapped.geojson
│ │ │ │ ├── create-hole.geojson
│ │ │ │ ├── issue-#721-inverse.geojson
│ │ │ │ ├── issue-#721.geojson
│ │ │ │ ├── multi-polygon-input.geojson
│ │ │ │ ├── multi-polygon-target.geojson
│ │ │ │ ├── skip-martinez-issue-#35.geojson
│ │ │ │ └── split-polygon.geojson
│ │ │ └── out/
│ │ │ ├── clip-polygons.geojson
│ │ │ ├── completely-overlapped.geojson
│ │ │ ├── create-hole.geojson
│ │ │ ├── issue-#721-inverse.geojson
│ │ │ ├── issue-#721.geojson
│ │ │ ├── jsts/
│ │ │ │ ├── clip-polygons.geojson
│ │ │ │ ├── completely-overlapped.geojson
│ │ │ │ ├── create-hole.geojson
│ │ │ │ ├── issue-#721-inverse.geojson
│ │ │ │ ├── issue-#721.geojson
│ │ │ │ ├── multi-polygon-input.geojson
│ │ │ │ ├── multi-polygon-target.geojson
│ │ │ │ └── split-polygon.geojson
│ │ │ ├── multi-polygon-input.geojson
│ │ │ ├── multi-polygon-target.geojson
│ │ │ └── split-polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-directional-mean/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── bus_route_gps.json
│ │ │ │ └── bus_route_utm.json
│ │ │ └── out/
│ │ │ ├── bus_route_gps.json
│ │ │ ├── bus_route_gps1.json
│ │ │ ├── bus_route_gps2.json
│ │ │ ├── bus_route_utm1.json
│ │ │ └── bus_route_utm2.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-dissolve/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── hexagons-issue#742.geojson
│ │ │ │ ├── issue-1208.geojson
│ │ │ │ ├── issue-1237.geojson
│ │ │ │ ├── polysByProperty.geojson
│ │ │ │ ├── polysWithoutProperty.geojson
│ │ │ │ └── simplified-issue.geojson
│ │ │ └── out/
│ │ │ ├── hexagons-issue#742.geojson
│ │ │ ├── issue-1208.geojson
│ │ │ ├── issue-1237.geojson
│ │ │ ├── polysByProperty.geojson
│ │ │ ├── polysWithoutProperty.geojson
│ │ │ └── simplified-issue.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-distance/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── points.geojson
│ │ │ └── out/
│ │ │ └── points.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-distance-weight/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── in/
│ │ │ ├── columbus.json
│ │ │ └── point.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-ellipse/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── anti-meridian-degrees.json
│ │ │ │ ├── anti-meridian.json
│ │ │ │ ├── northern-latitudes-degrees.json
│ │ │ │ ├── northern-latitudes.json
│ │ │ │ ├── rotation-degrees.json
│ │ │ │ ├── rotation.json
│ │ │ │ ├── simple-degrees.json
│ │ │ │ ├── simple-with-elevation.json
│ │ │ │ └── simple.json
│ │ │ └── out/
│ │ │ ├── anti-meridian-degrees.json
│ │ │ ├── anti-meridian.json
│ │ │ ├── northern-latitudes-degrees.json
│ │ │ ├── northern-latitudes.json
│ │ │ ├── rotation-degrees.json
│ │ │ ├── rotation.json
│ │ │ ├── simple-degrees.json
│ │ │ ├── simple-with-elevation.json
│ │ │ └── simple.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-envelope/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── in/
│ │ │ └── feature-collection.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-explode/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── geometrycollection-0-0.json
│ │ │ │ ├── geometrycollection-xyz-0-6.json
│ │ │ │ ├── multilinestring-0-5.json
│ │ │ │ ├── multilinestring-xyz-0-11.json
│ │ │ │ ├── multipoint-0-3.json
│ │ │ │ ├── multipoint-xyz-0-9.json
│ │ │ │ ├── multipolygon-0-4.json
│ │ │ │ ├── multipolygon-xyz-0-10.json
│ │ │ │ ├── one-1-0.json
│ │ │ │ ├── one-2-0.json
│ │ │ │ ├── point-0-2.json
│ │ │ │ ├── point-xyz-0-8.json
│ │ │ │ ├── polygon-0-1.json
│ │ │ │ ├── polygon-with-properties.json
│ │ │ │ └── polygon-xyz-0-7.json
│ │ │ └── out/
│ │ │ ├── geometrycollection-0-0.json
│ │ │ ├── geometrycollection-xyz-0-6.json
│ │ │ ├── multilinestring-0-5.json
│ │ │ ├── multilinestring-xyz-0-11.json
│ │ │ ├── multipoint-0-3.json
│ │ │ ├── multipoint-xyz-0-9.json
│ │ │ ├── multipolygon-0-4.json
│ │ │ ├── multipolygon-xyz-0-10.json
│ │ │ ├── one-1-0.json
│ │ │ ├── one-2-0.json
│ │ │ ├── point-0-2.json
│ │ │ ├── point-xyz-0-8.json
│ │ │ ├── polygon-0-1.json
│ │ │ ├── polygon-with-properties.json
│ │ │ └── polygon-xyz-0-7.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-flatten/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── FeatureCollection.geojson
│ │ │ │ ├── GeometryCollection.geojson
│ │ │ │ ├── GeometryObject.geojson
│ │ │ │ ├── MultiLineString.geojson
│ │ │ │ ├── MultiPoint.geojson
│ │ │ │ ├── MultiPolygon.geojson
│ │ │ │ └── Polygon.geojson
│ │ │ └── out/
│ │ │ ├── FeatureCollection.geojson
│ │ │ ├── GeometryCollection.geojson
│ │ │ ├── GeometryObject.geojson
│ │ │ ├── MultiLineString.geojson
│ │ │ ├── MultiPoint.geojson
│ │ │ ├── MultiPolygon.geojson
│ │ │ └── Polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-flip/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection-points.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── point-with-elevation.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection-points.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── point-with-elevation.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-geojson-rbush/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── linestrings.geojson
│ │ │ │ ├── points.geojson
│ │ │ │ └── polygons.geojson
│ │ │ └── out/
│ │ │ ├── all.linestrings.geojson
│ │ │ ├── all.points.geojson
│ │ │ ├── all.polygons.geojson
│ │ │ ├── search.linestrings.geojson
│ │ │ ├── search.points.geojson
│ │ │ └── search.polygons.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-great-circle/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── basic.geojson
│ │ │ └── out/
│ │ │ └── basic.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-helpers/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README_UNITS.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── geojson.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-hex-grid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── bbox1-triangles.json
│ │ │ │ ├── bbox1.json
│ │ │ │ ├── big-bbox.json
│ │ │ │ ├── fiji-10-miles.json
│ │ │ │ ├── london-20-miles.json
│ │ │ │ ├── piedemont-mask.json
│ │ │ │ ├── properties.json
│ │ │ │ └── resolute.json
│ │ │ └── out/
│ │ │ ├── bbox1-triangles.geojson
│ │ │ ├── bbox1.geojson
│ │ │ ├── big-bbox.geojson
│ │ │ ├── fiji-10-miles.geojson
│ │ │ ├── london-20-miles.geojson
│ │ │ ├── piedemont-mask.geojson
│ │ │ ├── properties.geojson
│ │ │ └── resolute.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-interpolate/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── data-1km-bbox.geojson
│ │ │ │ ├── data-1km.geojson
│ │ │ │ ├── data-500m-bbox.geojson
│ │ │ │ ├── data-500m.geojson
│ │ │ │ ├── data-weight-2.geojson
│ │ │ │ ├── hex-zValue-bbox.geojson
│ │ │ │ ├── hex-zValue.geojson
│ │ │ │ ├── points-random.geojson
│ │ │ │ ├── points1-weight-3.geojson
│ │ │ │ ├── points1.geojson
│ │ │ │ └── triangle-zValue.geojson
│ │ │ └── out/
│ │ │ ├── data-1km-bbox.geojson
│ │ │ ├── data-1km.geojson
│ │ │ ├── data-500m-bbox.geojson
│ │ │ ├── data-500m.geojson
│ │ │ ├── data-weight-2.geojson
│ │ │ ├── hex-zValue-bbox.geojson
│ │ │ ├── hex-zValue.geojson
│ │ │ ├── points-random.geojson
│ │ │ ├── points1-weight-3.geojson
│ │ │ ├── points1.geojson
│ │ │ └── triangle-zValue.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-intersect/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── Intersect1.geojson
│ │ │ │ ├── Intersect2.geojson
│ │ │ │ ├── armenia.geojson
│ │ │ │ ├── infinite-loop-2705.geojson
│ │ │ │ ├── issue-1004.geojson
│ │ │ │ ├── issue-1394.geojson
│ │ │ │ ├── issue-412.geojson
│ │ │ │ ├── issue-702.geojson
│ │ │ │ ├── issue-820.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── missing-islands-2084.geojson
│ │ │ │ ├── multilinestring.geojson
│ │ │ │ ├── multipoint.geojson
│ │ │ │ ├── multipolygon-input.geojson
│ │ │ │ ├── no-overlap.geojson
│ │ │ │ ├── output-multipolygon.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── skip-issue-1132-line.geojson
│ │ │ │ ├── skip-issue-1132-point.geojson
│ │ │ │ ├── unable-to-complete-output-ring-2048-1.geojson
│ │ │ │ └── unable-to-complete-output-ring-2048-2.geojson
│ │ │ └── out/
│ │ │ ├── Intersect1.geojson
│ │ │ ├── Intersect2.geojson
│ │ │ ├── armenia.geojson
│ │ │ ├── issue-1004.geojson
│ │ │ ├── issue-1132-line.geojson
│ │ │ ├── issue-1394.geojson
│ │ │ ├── issue-412.geojson
│ │ │ ├── issue-702.geojson
│ │ │ ├── issue-820.geojson
│ │ │ ├── jsts/
│ │ │ │ ├── Intersect1.geojson
│ │ │ │ ├── Intersect2.geojson
│ │ │ │ ├── armenia.geojson
│ │ │ │ ├── issue-1004.geojson
│ │ │ │ ├── issue-1132-line.geojson
│ │ │ │ ├── issue-1132-point.geojson
│ │ │ │ ├── issue-412.geojson
│ │ │ │ ├── issue-820.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── multilinestring.geojson
│ │ │ │ ├── multipoint.geojson
│ │ │ │ ├── no-overlap.geojson
│ │ │ │ └── point.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── multilinestring.geojson
│ │ │ ├── multipoint.geojson
│ │ │ ├── multipolygon-input.geojson
│ │ │ ├── no-overlap.geojson
│ │ │ ├── output-multipolygon.geojson
│ │ │ └── point.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-invariant/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-isobands/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── grid-to-matrix.ts
│ │ │ └── matrix-to-grid.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── 1084.json
│ │ │ │ ├── 2956.json
│ │ │ │ ├── bigMatrix.json
│ │ │ │ ├── matrix1.json
│ │ │ │ ├── matrix2.json
│ │ │ │ └── pointGrid.geojson
│ │ │ └── out/
│ │ │ ├── 1084.geojson
│ │ │ ├── 2956.geojson
│ │ │ ├── bigMatrix.geojson
│ │ │ ├── matrix1.geojson
│ │ │ ├── matrix2.geojson
│ │ │ └── pointGrid.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-isolines/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── grid-to-matrix.ts
│ │ │ └── matrix-to-grid.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── bigMatrix.json
│ │ │ │ ├── matrix1.json
│ │ │ │ ├── matrix2.json
│ │ │ │ └── pointGrid.geojson
│ │ │ └── out/
│ │ │ ├── bigMatrix.geojson
│ │ │ ├── matrix1.geojson
│ │ │ ├── matrix2.geojson
│ │ │ └── pointGrid.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-kinks/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── sweepline-intersections-export.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── hourglass.geojson
│ │ │ │ ├── issue-2627.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── open-hourglass.geojson
│ │ │ │ ├── switzerlandKinked.geojson
│ │ │ │ └── triple.geojson
│ │ │ └── out/
│ │ │ ├── hourglass.geojson
│ │ │ ├── issue-2627.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── open-hourglass.geojson
│ │ │ ├── switzerlandKinked.geojson
│ │ │ └── triple.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-length/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ ├── route1.geojson
│ │ │ │ └── route2.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection.json
│ │ │ ├── multi-linestring.json
│ │ │ ├── multi-polygon.json
│ │ │ ├── polygon.json
│ │ │ ├── route1.json
│ │ │ └── route2.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-arc/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── line-arc-full-360.geojson
│ │ │ │ ├── line-arc-greater-360.geojson
│ │ │ │ ├── line-arc-one-step.geojson
│ │ │ │ ├── line-arc-zero-steps.geojson
│ │ │ │ ├── line-arc1.geojson
│ │ │ │ ├── line-arc2.geojson
│ │ │ │ ├── line-arc3.geojson
│ │ │ │ ├── line-arc4.geojson
│ │ │ │ ├── line-arc5.geojson
│ │ │ │ ├── line-arc6.geojson
│ │ │ │ └── line-arc7.geojson
│ │ │ └── out/
│ │ │ ├── line-arc-full-360.geojson
│ │ │ ├── line-arc-greater-360.geojson
│ │ │ ├── line-arc-one-step.geojson
│ │ │ ├── line-arc-zero-steps.geojson
│ │ │ ├── line-arc1.geojson
│ │ │ ├── line-arc2.geojson
│ │ │ ├── line-arc3.geojson
│ │ │ ├── line-arc4.geojson
│ │ │ ├── line-arc5.geojson
│ │ │ ├── line-arc6.geojson
│ │ │ └── line-arc7.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-line-chunk/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── FeatureCollection.geojson
│ │ │ │ ├── GeometryCollection.geojson
│ │ │ │ ├── LineString.geojson
│ │ │ │ └── MultiLineString.geojson
│ │ │ └── out/
│ │ │ ├── FeatureCollection.longer.geojson
│ │ │ ├── FeatureCollection.reverse.geojson
│ │ │ ├── FeatureCollection.shorter.geojson
│ │ │ ├── GeometryCollection.longer.geojson
│ │ │ ├── GeometryCollection.reverse.geojson
│ │ │ ├── GeometryCollection.shorter.geojson
│ │ │ ├── LineString.longer.geojson
│ │ │ ├── LineString.reverse.geojson
│ │ │ ├── LineString.shorter.geojson
│ │ │ ├── MultiLineString.longer.geojson
│ │ │ ├── MultiLineString.reverse.geojson
│ │ │ └── MultiLineString.shorter.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-line-intersect/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── sweepline-intersections-export.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── 2-vertex-segment.geojson
│ │ │ │ ├── double-intersect.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── polygons-with-holes.geojson
│ │ │ │ ├── same-coordinates.geojson
│ │ │ │ ├── self-intersecting-line.geojson
│ │ │ │ ├── self-intersecting-multiline.geojson
│ │ │ │ ├── self-intersecting-multipoly.geojson
│ │ │ │ └── self-intersecting-poly.geojson
│ │ │ └── out/
│ │ │ ├── 2-vertex-segment.geojson
│ │ │ ├── double-intersect.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── polygons-with-holes.geojson
│ │ │ ├── same-coordinates.geojson
│ │ │ ├── self-intersecting-line.geojson
│ │ │ ├── self-intersecting-multiline.geojson
│ │ │ ├── self-intersecting-multipoly.geojson
│ │ │ └── self-intersecting-poly.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-offset/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── intersection.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── line-concave.geojson
│ │ │ │ ├── line-horizontal.geojson
│ │ │ │ ├── linestring-long.geojson
│ │ │ │ ├── linestring-same-start-end.geojson
│ │ │ │ ├── linestring-single-segment-only.geojson
│ │ │ │ ├── linestring-straight.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ └── northern-line.geojson
│ │ │ ├── out/
│ │ │ │ ├── line-concave.geojson
│ │ │ │ ├── line-horizontal.geojson
│ │ │ │ ├── linestring-long.geojson
│ │ │ │ ├── linestring-same-start-end.geojson
│ │ │ │ ├── linestring-single-segment-only.geojson
│ │ │ │ ├── linestring-straight.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ └── northern-line.geojson
│ │ │ └── types.tst.ts
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-overlap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── boolean-line-overlap.geojson
│ │ │ │ ├── issue-#901-simplified.geojson
│ │ │ │ ├── issue-#901.geojson
│ │ │ │ ├── polygons.geojson
│ │ │ │ ├── simple1.geojson
│ │ │ │ ├── simple2.geojson
│ │ │ │ └── simple3.geojson
│ │ │ └── out/
│ │ │ ├── boolean-line-overlap.geojson
│ │ │ ├── issue-#901-simplified.geojson
│ │ │ ├── issue-#901.geojson
│ │ │ ├── polygons.geojson
│ │ │ ├── simple1.geojson
│ │ │ ├── simple2.geojson
│ │ │ └── simple3.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-line-segment/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── 2-vertex-segment.geojson
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── geometry-collection.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── polygon-with-holes.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── 2-vertex-segment.geojson
│ │ │ ├── feature-collection.geojson
│ │ │ ├── geometry-collection.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── polygon-with-holes.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-slice/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── avoid-duplicated-end-points.geojson
│ │ │ │ ├── line1.geojson
│ │ │ │ ├── line2.geojson
│ │ │ │ ├── route1.geojson
│ │ │ │ ├── route2.geojson
│ │ │ │ └── vertical.geojson
│ │ │ └── out/
│ │ │ ├── avoid-duplicated-end-points.geojson
│ │ │ ├── line1.geojson
│ │ │ ├── line2.geojson
│ │ │ ├── route1.geojson
│ │ │ ├── route2.geojson
│ │ │ └── vertical.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-slice-along/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── fixtures/
│ │ │ ├── line1.geojson
│ │ │ ├── route1.geojson
│ │ │ └── route2.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-split/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── issue-#1075-1.geojson
│ │ │ │ ├── issue-#1075-2.geojson
│ │ │ │ ├── issue-#1075-3.geojson
│ │ │ │ ├── issue-#1232.geojson
│ │ │ │ ├── issue-#852.geojson
│ │ │ │ ├── linestrings.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── multiPoint-on-line-1.geojson
│ │ │ │ ├── multiPoint-on-line-2.geojson
│ │ │ │ ├── point-on-line-1.geojson
│ │ │ │ ├── point-on-line-2.geojson
│ │ │ │ ├── point-on-line-3.geojson
│ │ │ │ ├── polygon-with-holes.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── issue-#1075-1.geojson
│ │ │ ├── issue-#1075-2.geojson
│ │ │ ├── issue-#1075-3.geojson
│ │ │ ├── issue-#1232.geojson
│ │ │ ├── issue-#852.geojson
│ │ │ ├── linestrings.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── multiPoint-on-line-1.geojson
│ │ │ ├── multiPoint-on-line-2.geojson
│ │ │ ├── point-on-line-1.geojson
│ │ │ ├── point-on-line-2.geojson
│ │ │ ├── point-on-line-3.geojson
│ │ │ ├── polygon-with-holes.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-line-to-polygon/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── collection-linestring.geojson
│ │ │ │ ├── geometry-linestring.geojson
│ │ │ │ ├── linestring-incomplete.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── linestrings-to-multipolygons.geojson
│ │ │ │ ├── multi-linestring-incomplete.geojson
│ │ │ │ ├── multi-linestring-nested.geojson
│ │ │ │ ├── multi-linestring-nested2.geojson
│ │ │ │ ├── multi-linestring-outer-ring-middle-position.geojson
│ │ │ │ ├── multi-linestring-with-hole.geojson
│ │ │ │ ├── multi-linestrings-nested.geojson
│ │ │ │ ├── multi-linestrings-outer-doughnut.geojson
│ │ │ │ └── multi-linestrings-with-holes.geojson
│ │ │ └── out/
│ │ │ ├── collection-linestring.geojson
│ │ │ ├── geometry-linestring.geojson
│ │ │ ├── linestring-incomplete.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── linestrings-to-multipolygons.geojson
│ │ │ ├── multi-linestring-incomplete.geojson
│ │ │ ├── multi-linestring-nested.geojson
│ │ │ ├── multi-linestring-nested2.geojson
│ │ │ ├── multi-linestring-outer-ring-middle-position.geojson
│ │ │ ├── multi-linestring-with-hole.geojson
│ │ │ ├── multi-linestrings-nested.geojson
│ │ │ ├── multi-linestrings-outer-doughnut.geojson
│ │ │ └── multi-linestrings-with-holes.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-mask/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── basic.geojson
│ │ │ │ ├── mask-outside.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ └── overlapping.geojson
│ │ │ └── out/
│ │ │ ├── basic.geojson
│ │ │ ├── mask-outside.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ └── overlapping.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-meta/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-midpoint/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-moran-index/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── in/
│ │ │ ├── columbus.json
│ │ │ └── point.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-nearest-neighbor-analysis/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── brazil-states-bbox.json
│ │ │ │ ├── brazil-states-brazil-itself-as-study-area.json
│ │ │ │ ├── random-large-study-area.json
│ │ │ │ ├── random-outlier.json
│ │ │ │ ├── random.json
│ │ │ │ └── squares.json
│ │ │ └── out/
│ │ │ ├── brazil-states-bbox.json
│ │ │ ├── brazil-states-brazil-itself-as-study-area.json
│ │ │ ├── random-large-study-area.json
│ │ │ ├── random-outlier.json
│ │ │ ├── random.json
│ │ │ └── squares.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-nearest-point/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── points.json
│ │ │ └── out/
│ │ │ └── points.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-nearest-point-on-line/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── line-northern-latitude-#344.geojson
│ │ │ │ ├── line1.geojson
│ │ │ │ ├── multiLine1.geojson
│ │ │ │ ├── multiLine2.geojson
│ │ │ │ ├── multiLine3.geojson
│ │ │ │ ├── route1.geojson
│ │ │ │ └── route2.geojson
│ │ │ └── out/
│ │ │ ├── expectedLocation - points behind first point.json
│ │ │ ├── expectedLocation - points in front of last point.json
│ │ │ ├── expectedLocation - points on joints.json
│ │ │ ├── expectedLocation - points on top of line.json
│ │ │ ├── line-northern-latitude-#344.geojson
│ │ │ ├── line1.geojson
│ │ │ ├── multiLine1.geojson
│ │ │ ├── multiLine2.geojson
│ │ │ ├── multiLine3.geojson
│ │ │ ├── route1.geojson
│ │ │ └── route2.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-nearest-point-to-line/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── fiji.geojson
│ │ │ │ ├── on-line.geojson
│ │ │ │ ├── one.geojson
│ │ │ │ ├── resolute.geojson
│ │ │ │ ├── segment.geojson
│ │ │ │ └── two.geojson
│ │ │ └── out/
│ │ │ ├── fiji.geojson
│ │ │ ├── on-line.geojson
│ │ │ ├── one.geojson
│ │ │ ├── resolute.geojson
│ │ │ ├── segment.geojson
│ │ │ └── two.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-planepoint/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ └── in/
│ │ │ └── triangle.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-point-grid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── big-bbox.json
│ │ │ │ ├── fiji-10-miles.json
│ │ │ │ ├── london-20-miles.json
│ │ │ │ ├── piedemont-mask.json
│ │ │ │ ├── properties.json
│ │ │ │ └── resolute.json
│ │ │ └── out/
│ │ │ ├── big-bbox.geojson
│ │ │ ├── fiji-10-miles.geojson
│ │ │ ├── london-20-miles.geojson
│ │ │ ├── piedemont-mask.geojson
│ │ │ ├── properties.geojson
│ │ │ └── resolute.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-point-on-feature/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── lines.json
│ │ │ │ ├── multiline.json
│ │ │ │ ├── multipoint.json
│ │ │ │ ├── multipolygon.json
│ │ │ │ ├── polygon-in-center.json
│ │ │ │ └── polygons.json
│ │ │ └── out/
│ │ │ ├── lines.json
│ │ │ ├── multiline.json
│ │ │ ├── multipoint.json
│ │ │ ├── multipolygon.json
│ │ │ ├── polygon-in-center.json
│ │ │ └── polygons.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-point-to-line-distance/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── city-line1.geojson
│ │ │ │ ├── city-line2.geojson
│ │ │ │ ├── city-segment-inside1.geojson
│ │ │ │ ├── city-segment-inside2.geojson
│ │ │ │ ├── city-segment-inside3.geojson
│ │ │ │ ├── city-segment-obtuse1.geojson
│ │ │ │ ├── city-segment-obtuse2.geojson
│ │ │ │ ├── city-segment-projected1.geojson
│ │ │ │ ├── city-segment-projected2.geojson
│ │ │ │ ├── issue-1156.geojson
│ │ │ │ ├── line-fiji.geojson
│ │ │ │ ├── line-resolute-bay.geojson
│ │ │ │ ├── line1.geojson
│ │ │ │ ├── line2.geojson
│ │ │ │ ├── segment-fiji.geojson
│ │ │ │ ├── segment1.geojson
│ │ │ │ ├── segment1a.geojson
│ │ │ │ ├── segment2.geojson
│ │ │ │ ├── segment3.geojson
│ │ │ │ └── segment4.geojson
│ │ │ └── out/
│ │ │ ├── city-line1.geojson
│ │ │ ├── city-line2.geojson
│ │ │ ├── city-segment-inside1.geojson
│ │ │ ├── city-segment-inside2.geojson
│ │ │ ├── city-segment-inside3.geojson
│ │ │ ├── city-segment-obtuse1.geojson
│ │ │ ├── city-segment-obtuse2.geojson
│ │ │ ├── city-segment-projected1.geojson
│ │ │ ├── city-segment-projected2.geojson
│ │ │ ├── distances.json
│ │ │ ├── issue-1156.geojson
│ │ │ ├── line-fiji.geojson
│ │ │ ├── line-resolute-bay.geojson
│ │ │ ├── line1.geojson
│ │ │ ├── line2.geojson
│ │ │ ├── segment-fiji.geojson
│ │ │ ├── segment1.geojson
│ │ │ ├── segment1a.geojson
│ │ │ ├── segment2.geojson
│ │ │ ├── segment3.geojson
│ │ │ └── segment4.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-point-to-polygon-distance/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── test_fixtures/
│ │ │ ├── issue_2824.geojson
│ │ │ ├── long-lines-poly.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ └── simple-polygon.geojson
│ │ └── tsconfig.json
│ ├── turf-points-within-polygon/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-polygon-smooth/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── close.json
│ │ │ │ ├── geometry.json
│ │ │ │ ├── multipolygon.json
│ │ │ │ ├── multipolygonWithHole.json
│ │ │ │ ├── polygon.json
│ │ │ │ └── withHole.json
│ │ │ └── out/
│ │ │ ├── close.json
│ │ │ ├── geometry.json
│ │ │ ├── multipolygon.json
│ │ │ ├── multipolygonWithHole.json
│ │ │ ├── polygon.json
│ │ │ └── withHole.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-polygon-tangents/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── concave.geojson
│ │ │ │ ├── high.geojson
│ │ │ │ ├── issue#1032.geojson
│ │ │ │ ├── issue#1050.geojson
│ │ │ │ ├── issue#785.geojson
│ │ │ │ ├── multipolygon.geojson
│ │ │ │ ├── polygonWithHole.geojson
│ │ │ │ └── square.geojson
│ │ │ └── out/
│ │ │ ├── concave.geojson
│ │ │ ├── high.geojson
│ │ │ ├── issue#1032.geojson
│ │ │ ├── issue#1050.geojson
│ │ │ ├── issue#785.geojson
│ │ │ ├── multipolygon.geojson
│ │ │ ├── polygonWithHole.geojson
│ │ │ └── square.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-polygon-to-line/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── geometry-polygon.geojson
│ │ │ │ ├── multi-polygon-outer-doughnut.geojson
│ │ │ │ ├── multi-polygon-with-holes.geojson
│ │ │ │ ├── multi-polygon.geojson
│ │ │ │ ├── polygon-with-hole.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── geometry-polygon.geojson
│ │ │ ├── multi-polygon-outer-doughnut.geojson
│ │ │ ├── multi-polygon-with-holes.geojson
│ │ │ ├── multi-polygon.geojson
│ │ │ ├── polygon-with-hole.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-polygonize/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── Edge.ts
│ │ │ ├── EdgeRing.ts
│ │ │ ├── Graph.ts
│ │ │ ├── Node.ts
│ │ │ └── util.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── complex.geojson
│ │ │ │ ├── cutedge.geojson
│ │ │ │ ├── dangle.geojson
│ │ │ │ ├── kinked-linestring.geojson
│ │ │ │ ├── linestrings.geojson
│ │ │ │ ├── multi-linestring.geojson
│ │ │ │ └── two-polygons.geojson
│ │ │ └── out/
│ │ │ ├── complex.geojson
│ │ │ ├── cutedge.geojson
│ │ │ ├── dangle.geojson
│ │ │ ├── kinked-linestring.geojson
│ │ │ ├── linestrings.geojson
│ │ │ ├── multi-linestring.geojson
│ │ │ └── two-polygons.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-projection/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── mercator/
│ │ │ │ ├── featureCollection.geojson
│ │ │ │ ├── fiji.geojson
│ │ │ │ ├── geometry.geojson
│ │ │ │ ├── line.geojson
│ │ │ │ ├── multiLine.geojson
│ │ │ │ ├── multiPolygon.geojson
│ │ │ │ ├── passed-180th-meridian.geojson
│ │ │ │ ├── passed-180th-meridian2.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ └── polygon.geojson
│ │ │ ├── out/
│ │ │ │ ├── mercator-featureCollection.geojson
│ │ │ │ ├── mercator-fiji.geojson
│ │ │ │ ├── mercator-geometry.geojson
│ │ │ │ ├── mercator-multiLine.geojson
│ │ │ │ ├── mercator-multiPolygon.geojson
│ │ │ │ ├── mercator-passed-180th-meridian.geojson
│ │ │ │ ├── mercator-passed-180th-meridian2.geojson
│ │ │ │ ├── mercator-point.geojson
│ │ │ │ ├── mercator-polygon.geojson
│ │ │ │ ├── wgs84-featureCollection.geojson
│ │ │ │ ├── wgs84-fiji.geojson
│ │ │ │ ├── wgs84-geometry.geojson
│ │ │ │ ├── wgs84-line.geojson
│ │ │ │ ├── wgs84-multiLine.geojson
│ │ │ │ ├── wgs84-multiPolygon.geojson
│ │ │ │ ├── wgs84-passed-180th-meridian.geojson
│ │ │ │ ├── wgs84-passed-180th-meridian2.geojson
│ │ │ │ ├── wgs84-point.geojson
│ │ │ │ └── wgs84-polygon.geojson
│ │ │ └── wgs84/
│ │ │ ├── featureCollection.geojson
│ │ │ ├── fiji.geojson
│ │ │ ├── geometry.geojson
│ │ │ ├── multiLine.geojson
│ │ │ ├── multiPolygon.geojson
│ │ │ ├── passed-180th-meridian.geojson
│ │ │ ├── passed-180th-meridian2.geojson
│ │ │ ├── point.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-quadrat-analysis/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── futian_bbox.json
│ │ │ │ ├── futian_grid.json
│ │ │ │ ├── futian_random_point.json
│ │ │ │ └── shenzhen_bbox.json
│ │ │ ├── out/
│ │ │ │ ├── bigBox.json
│ │ │ │ ├── randomPoint.json
│ │ │ │ ├── smallBox.json
│ │ │ │ ├── smallGrid.json
│ │ │ │ └── uniformPoint.json
│ │ │ └── randomPointSet.good.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-random/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-rectangle-grid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── 10x10-1degree.json
│ │ │ │ ├── australia-mask.json
│ │ │ │ ├── big-bbox-500x100-miles.json
│ │ │ │ ├── fiji-10x5-miles.json
│ │ │ │ ├── global-grid.json
│ │ │ │ └── victoria-20x100-km.json
│ │ │ └── out/
│ │ │ ├── 10x10-1degree.geojson
│ │ │ ├── australia-mask.geojson
│ │ │ ├── big-bbox-500x100-miles.geojson
│ │ │ ├── fiji-10x5-miles.geojson
│ │ │ ├── global-grid.geojson
│ │ │ └── victoria-20x100-km.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-rewind/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection.geojson
│ │ │ │ ├── geometry-polygon-counter-clockwise.geojson
│ │ │ │ ├── line-clockwise.geojson
│ │ │ │ ├── line-counter-clockwise.geojson
│ │ │ │ ├── polygon-clockwise.geojson
│ │ │ │ └── polygon-counter-clockwise.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection.geojson
│ │ │ ├── geometry-polygon-counter-clockwise.geojson
│ │ │ ├── line-clockwise.geojson
│ │ │ ├── line-counter-clockwise.geojson
│ │ │ ├── polygon-clockwise.geojson
│ │ │ └── polygon-counter-clockwise.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-rhumb-bearing/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ └── pair1.geojson
│ │ │ └── out/
│ │ │ ├── pair1.geojson
│ │ │ └── pair1.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-rhumb-destination/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── fiji-east-west-539-lng.geojson
│ │ │ │ ├── fiji-east-west.geojson
│ │ │ │ ├── fiji-west-east.geojson
│ │ │ │ ├── point-0.geojson
│ │ │ │ ├── point-180.geojson
│ │ │ │ ├── point-90.geojson
│ │ │ │ └── point-way-far-away.geojson
│ │ │ └── out/
│ │ │ ├── fiji-east-west-539-lng.geojson
│ │ │ ├── fiji-east-west.geojson
│ │ │ ├── fiji-west-east.geojson
│ │ │ ├── point-0.geojson
│ │ │ ├── point-180.geojson
│ │ │ ├── point-90.geojson
│ │ │ └── point-way-far-away.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-rhumb-distance/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── fiji-539-lng.geojson
│ │ │ │ ├── points-fiji.geojson
│ │ │ │ ├── points1.geojson
│ │ │ │ └── points2.geojson
│ │ │ └── out/
│ │ │ ├── fiji-539-lng.json
│ │ │ ├── points-fiji.json
│ │ │ ├── points1.json
│ │ │ └── points2.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-sample/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-sector/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── pacman.geojson
│ │ │ │ ├── sector-full-360.geojson
│ │ │ │ ├── sector-greater-360.geojson
│ │ │ │ ├── sector1.geojson
│ │ │ │ ├── sector2.geojson
│ │ │ │ ├── sector3.geojson
│ │ │ │ ├── sector4.geojson
│ │ │ │ ├── sector5.geojson
│ │ │ │ └── sector6.geojson
│ │ │ └── out/
│ │ │ ├── pacman.geojson
│ │ │ ├── sector-full-360.geojson
│ │ │ ├── sector-greater-360.geojson
│ │ │ ├── sector1.geojson
│ │ │ ├── sector2.geojson
│ │ │ ├── sector3.geojson
│ │ │ ├── sector4.geojson
│ │ │ ├── sector5.geojson
│ │ │ └── sector6.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-shortest-path/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── javascript-astar.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── bermuda-triangle.json
│ │ │ │ ├── farmland.json
│ │ │ │ ├── multiple-obstacles.json
│ │ │ │ └── simple.json
│ │ │ └── out/
│ │ │ ├── bermuda-triangle.json
│ │ │ ├── farmland.json
│ │ │ ├── multiple-obstacles.json
│ │ │ └── simple.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-simplify/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ └── simplify.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── argentina.geojson
│ │ │ │ ├── featurecollection.geojson
│ │ │ │ ├── fiji-hiQ.geojson
│ │ │ │ ├── geometrycollection.geojson
│ │ │ │ ├── issue-#1144.geojson
│ │ │ │ ├── linestring.geojson
│ │ │ │ ├── multilinestring.geojson
│ │ │ │ ├── multipoint.geojson
│ │ │ │ ├── multipolygon.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── poly-issue#555-5.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ └── simple-polygon.geojson
│ │ │ └── out/
│ │ │ ├── argentina.geojson
│ │ │ ├── featurecollection.geojson
│ │ │ ├── fiji-hiQ.geojson
│ │ │ ├── geometrycollection.geojson
│ │ │ ├── issue-#1144.geojson
│ │ │ ├── linestring.geojson
│ │ │ ├── multilinestring.geojson
│ │ │ ├── multipoint.geojson
│ │ │ ├── multipolygon.geojson
│ │ │ ├── point.geojson
│ │ │ ├── poly-issue#555-5.geojson
│ │ │ ├── polygon.geojson
│ │ │ └── simple-polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-square/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-square-grid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── big-bbox.json
│ │ │ │ ├── fiji-10-miles.json
│ │ │ │ ├── issue-1215.geojson
│ │ │ │ ├── london-20-miles.json
│ │ │ │ ├── piedemont-mask.json
│ │ │ │ ├── properties.json
│ │ │ │ └── resolute.json
│ │ │ └── out/
│ │ │ ├── big-bbox.geojson
│ │ │ ├── fiji-10-miles.geojson
│ │ │ ├── issue-1215.geojson
│ │ │ ├── london-20-miles.geojson
│ │ │ ├── piedemont-mask.geojson
│ │ │ ├── properties.geojson
│ │ │ └── resolute.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-standard-deviational-ellipse/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── mta-stations-unweighted.json
│ │ │ │ └── mta-stations-weighted.json
│ │ │ └── out/
│ │ │ ├── mta-stations-unweighted.json
│ │ │ └── mta-stations-weighted.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-tag/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── tagMultiPolygons.geojson
│ │ │ ├── tagMultiPolygonsPoints.geojson
│ │ │ ├── tagPoints.geojson
│ │ │ └── tagPolygons.geojson
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-tesselate/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── earcut.d.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test.ts
│ │ └── tsconfig.json
│ ├── turf-tin/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── Points.json
│ │ │ ├── Tin-z.json
│ │ │ └── Tin.json
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-transform-rotate/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── line.geojson
│ │ │ │ ├── multiLine.geojson
│ │ │ │ ├── multiPoint.geojson
│ │ │ │ ├── multiPolygon.geojson
│ │ │ │ ├── no-rotation.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── polygon-fiji.geojson
│ │ │ │ ├── polygon-resolute-bay.geojson
│ │ │ │ ├── polygon-with-hole.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ └── z-coord.geojson
│ │ │ └── out/
│ │ │ ├── line.geojson
│ │ │ ├── multiLine.geojson
│ │ │ ├── multiPoint.geojson
│ │ │ ├── multiPolygon.geojson
│ │ │ ├── no-rotation.geojson
│ │ │ ├── point.geojson
│ │ │ ├── polygon-fiji.geojson
│ │ │ ├── polygon-resolute-bay.geojson
│ │ │ ├── polygon-with-hole.geojson
│ │ │ ├── polygon.geojson
│ │ │ └── z-coord.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-transform-scale/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── feature-collection-polygon.geojson
│ │ │ │ ├── issue-#1059.geojson
│ │ │ │ ├── line.geojson
│ │ │ │ ├── multiLine.geojson
│ │ │ │ ├── multiPoint.geojson
│ │ │ │ ├── multiPolygon.geojson
│ │ │ │ ├── no-scale.geojson
│ │ │ │ ├── origin-inside-bbox.geojson
│ │ │ │ ├── origin-inside-feature.geojson
│ │ │ │ ├── origin-outside-bbox.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── poly-double.geojson
│ │ │ │ ├── poly-half.geojson
│ │ │ │ ├── polygon-fiji.geojson
│ │ │ │ ├── polygon-resolute-bay.geojson
│ │ │ │ ├── polygon-with-hole.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ └── z-scaling.geojson
│ │ │ └── out/
│ │ │ ├── feature-collection-polygon.geojson
│ │ │ ├── issue-#1059.geojson
│ │ │ ├── issue-#895.geojson
│ │ │ ├── line.geojson
│ │ │ ├── multiLine.geojson
│ │ │ ├── multiPoint.geojson
│ │ │ ├── multiPolygon.geojson
│ │ │ ├── no-scale.geojson
│ │ │ ├── origin-inside-bbox.geojson
│ │ │ ├── origin-inside-feature.geojson
│ │ │ ├── origin-outside-bbox.geojson
│ │ │ ├── point.geojson
│ │ │ ├── poly-double.geojson
│ │ │ ├── poly-half.geojson
│ │ │ ├── polygon-fiji.geojson
│ │ │ ├── polygon-resolute-bay.geojson
│ │ │ ├── polygon-with-hole.geojson
│ │ │ ├── polygon.geojson
│ │ │ └── z-scaling.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-transform-translate/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── line.geojson
│ │ │ │ ├── multiLine.geojson
│ │ │ │ ├── multiPoint.geojson
│ │ │ │ ├── multiPolygon.geojson
│ │ │ │ ├── no-motion.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── polygon-fiji.geojson
│ │ │ │ ├── polygon-resolute-bay.geojson
│ │ │ │ ├── polygon-with-hole.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ └── z-translation.geojson
│ │ │ └── out/
│ │ │ ├── line.geojson
│ │ │ ├── multiLine.geojson
│ │ │ ├── multiPoint.geojson
│ │ │ ├── multiPolygon.geojson
│ │ │ ├── no-motion.geojson
│ │ │ ├── point.geojson
│ │ │ ├── polygon-fiji.geojson
│ │ │ ├── polygon-resolute-bay.geojson
│ │ │ ├── polygon-with-hole.geojson
│ │ │ ├── polygon.geojson
│ │ │ └── z-translation.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-triangle-grid/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── big-bbox.json
│ │ │ │ ├── fiji-10-miles.json
│ │ │ │ ├── london-20-miles.json
│ │ │ │ ├── piedemont-mask.json
│ │ │ │ ├── properties.json
│ │ │ │ └── resolute.json
│ │ │ └── out/
│ │ │ ├── big-bbox.geojson
│ │ │ ├── fiji-10-miles.geojson
│ │ │ ├── london-20-miles.geojson
│ │ │ ├── piedemont-mask.geojson
│ │ │ ├── properties.geojson
│ │ │ └── resolute.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-truncate/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── geometry-collection.geojson
│ │ │ │ ├── linestring-geometry.geojson
│ │ │ │ ├── point-elevation.geojson
│ │ │ │ ├── point-geometry.geojson
│ │ │ │ ├── point.geojson
│ │ │ │ ├── points.geojson
│ │ │ │ ├── polygon.geojson
│ │ │ │ └── polygons.geojson
│ │ │ └── out/
│ │ │ ├── geometry-collection.geojson
│ │ │ ├── linestring-geometry.geojson
│ │ │ ├── point-elevation.geojson
│ │ │ ├── point-geometry.geojson
│ │ │ ├── point.geojson
│ │ │ ├── points.geojson
│ │ │ ├── polygon.geojson
│ │ │ └── polygons.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-union/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── maximum-callstack-size-exceeded-2317.geojson
│ │ │ │ ├── not-overlapping.geojson
│ │ │ │ ├── unable-to-complete-output-ring-1983-1.geojson
│ │ │ │ ├── unable-to-complete-output-ring-1983-2.geojson
│ │ │ │ ├── unable-to-find-segment-2258-1.geojson
│ │ │ │ ├── unable-to-find-segment-2258-2.geojson
│ │ │ │ ├── union1.geojson
│ │ │ │ ├── union2.geojson
│ │ │ │ ├── union3.geojson
│ │ │ │ └── union4.geojson
│ │ │ └── out/
│ │ │ ├── jsts/
│ │ │ │ ├── not-overlapping.geojson
│ │ │ │ ├── union1.geojson
│ │ │ │ ├── union2.geojson
│ │ │ │ └── union3.geojson
│ │ │ ├── not-overlapping.geojson
│ │ │ ├── union1.geojson
│ │ │ ├── union2.geojson
│ │ │ ├── union3.geojson
│ │ │ └── union4.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ ├── turf-unkink-polygon/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bench.ts
│ │ ├── index.ts
│ │ ├── lib/
│ │ │ ├── geojson-polygon-self-intersections.ts
│ │ │ └── simplepolygon.ts
│ │ ├── package.json
│ │ ├── test/
│ │ │ ├── in/
│ │ │ │ ├── complex.geojson
│ │ │ │ ├── hourglass.geojson
│ │ │ │ ├── hourglassFeatureCollection.geojson
│ │ │ │ ├── hourglassFeatureCollectionMultiPolygon.geojson
│ │ │ │ ├── hourglassMultiPolygon.geojson
│ │ │ │ ├── issue-#1094.geojson
│ │ │ │ ├── polygon-with-holes.geojson
│ │ │ │ └── polygon.geojson
│ │ │ └── out/
│ │ │ ├── complex.geojson
│ │ │ ├── hourglass.geojson
│ │ │ ├── hourglassFeatureCollection.geojson
│ │ │ ├── hourglassFeatureCollectionMultiPolygon.geojson
│ │ │ ├── hourglassMultiPolygon.geojson
│ │ │ ├── issue-#1094.geojson
│ │ │ ├── polygon-with-holes.geojson
│ │ │ └── polygon.geojson
│ │ ├── test.ts
│ │ ├── tsconfig.json
│ │ └── types.ts
│ └── turf-voronoi/
│ ├── LICENSE
│ ├── README.md
│ ├── bench.ts
│ ├── index.ts
│ ├── package.json
│ ├── test/
│ │ ├── in/
│ │ │ ├── ninepoints.json
│ │ │ ├── simple.json
│ │ │ ├── with-properties.json
│ │ │ └── world.json
│ │ └── out/
│ │ ├── ninepoints.json
│ │ ├── simple.json
│ │ ├── with-properties.json
│ │ └── world.json
│ ├── test.ts
│ └── tsconfig.json
├── pnpm-workspace.yaml
├── releases/
│ ├── 4.1.0.md
│ ├── 4.2.0.md
│ ├── 4.3.0.md
│ ├── 4.4.0.md
│ ├── 4.5.0.md
│ ├── 4.6.0.md
│ ├── 4.7.0.md
│ ├── 5.0.0.md
│ ├── 5.1.0.md
│ └── 5.2.0.md
├── scripts/
│ ├── check-dependencies.js
│ ├── generate-readmes.mts
│ └── postfix.md
├── tsconfig.shared.json
└── tsup.config.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
Please provide the following when reporting an issue:
- [ ] Description of the problem, and how it differs from what you expected.
- [ ] Version of Turf you are using, and of any other relevant software.
- [ ] GeoJSON data as a [gist file](https://gist.github.com/) or [geojson.io](https://geojson.io/) (filename extension must be `.geojson`). Simple reproducible examples are preferrable.
- [ ] Snippet of source code for complex examples using [jsfiddle](https://jsfiddle.net/).
- [ ] Confirmation this issue hasn't already been reported, or is resolved and just hasn't been released yet.
<!-- Love turf? Please consider supporting our collective:
👉 https://opencollective.com/turf/donate -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Please provide the following when creating a PR:
- [ ] Meaningful title, including the name of the package being modified.
- [ ] Summary of the changes.
- [ ] Heads up if this is a breaking change.
- [ ] Any issues this [resolves](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests).
- [ ] Inclusion of your details in the `contributors` field of `package.json` - you've earned it! 👏
- [ ] Confirmation you've read the steps for [preparing a pull request](https://github.com/Turfjs/turf/blob/master/docs/CONTRIBUTING.md#preparing-a-pull-request).
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI build
on:
push:
branches:
- master
- support/6.x
pull_request:
branches:
- master
- support/6.x
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x, 22.x, 24.x]
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
- name: Install pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # 4.1.0
with:
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # 4.3.0
with:
cache: "pnpm"
node-version: ${{ matrix.node-version }}
- run: pnpm install --frozen-lockfile
- run: git diff --exit-code
- run: pnpm test
================================================
FILE: .github/workflows/prerelease.yml
================================================
name: prerelease
on:
push:
branches: [master]
jobs:
build:
strategy:
fail-fast: true
matrix:
node:
- 18
platform:
- ubuntu-latest
name: "${{matrix.platform}} / Node.js ${{ matrix.node }}"
runs-on: ${{matrix.platform}}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # 4.1.0
with:
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # 4.3.0
with:
node-version: ${{ matrix.node-version }}
registry-url: "https://registry.npmjs.org"
cache: "pnpm"
- run: npm whoami
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: pnpm install --frozen-lockfile
- run: pnpm test
- name: run publish
run: lerna publish minor --canary --include-merged-tags --force-publish --dist-tag prerelease --ignore-scripts true --yes
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Publish release
on:
push:
tags:
- "v*.*.*"
permissions:
id-token: write
contents: write
jobs:
build:
environment: release
strategy:
fail-fast: true
matrix:
node:
- 20
platform:
- ubuntu-latest
name: "${{matrix.platform}} / Node.js ${{ matrix.node }}"
runs-on: ${{matrix.platform}}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # 4.1.0
with:
run_install: false
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # 4.3.0
with:
node-version: ${{ matrix.node-version }}
registry-url: "https://registry.npmjs.org"
cache: "pnpm"
- run: npm whoami
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- run: pnpm install --frozen-lockfile
- run: pnpm test
- name: run publish
run: lerna publish from-package --ignore-scripts true --yes
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Create Github Release
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # 2.2.1
with:
make_latest: true
generate_release_notes: true
draft: true
================================================
FILE: .gitignore
================================================
.rpt2_cache
packages/*/dist
main.js
main.es.js
main.mjs
main.min.js
index.mjs
*.min.js
*.es5.js
.esm-cache
package-lock.json
env
.nyc_output
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
.idea/*
types.js
.DS_Store
types.d.ts
pids
logs
results
npm-debug.log*
node_modules
.vscode
.nx/
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md
================================================
FILE: .husky/pre-commit
================================================
pnpm lint-staged
================================================
FILE: .monorepolint.config.mjs
================================================
// @ts-check
import * as path from "node:path";
import { existsSync } from "node:fs";
import * as fs from "node:fs/promises";
import {
alphabeticalDependencies,
alphabeticalScripts,
packageOrder,
packageEntry,
packageScript,
requireDependency,
REMOVE,
} from "@monorepolint/rules";
const TS_PACKAGES = []; // projects that use typescript to build
const JS_PACKAGES = []; // projects that use javascript/rollup to build
const MAIN_PACKAGE = "@turf/turf";
const TAPE_PACKAGES = []; // projects that have tape tests
const TYPES_PACKAGES = []; // projects that have types tests
const TSTYCHE_PACKAGES = []; // projects that use tstyche for type tests.
const BENCH_PACKAGES = []; // projects that have benchmarks
// iterate all the packages and figure out what buckets everything falls into
const packagesPath = path.join(process.cwd(), "packages");
for (const pk of await fs.readdir(packagesPath)) {
if (pk === "turf") {
continue;
}
const name = JSON.parse(
await fs.readFile(path.join(packagesPath, pk, "package.json"), "utf8")
).name;
if (existsSync(path.join(packagesPath, pk, "index.ts"))) {
TS_PACKAGES.push(name);
} else {
JS_PACKAGES.push(name);
}
if (existsSync(path.join(pk, "test.js"))) {
TAPE_PACKAGES.push(name);
}
if (existsSync(path.join(packagesPath, pk, "types.ts"))) {
TYPES_PACKAGES.push(name);
}
if (existsSync(path.join(packagesPath, pk, "test/types.tst.ts"))) {
TSTYCHE_PACKAGES.push(name);
}
}
const TS_TAPE_PACKAGES = TAPE_PACKAGES.filter(
(pkg) => -1 !== TS_PACKAGES.indexOf(pkg)
);
const JS_TAPE_PACKAGES = TAPE_PACKAGES.filter(
(pkg) => -1 !== JS_PACKAGES.indexOf(pkg)
);
export default {
rules: [
packageOrder({
options: {
order: [
"name",
"version",
"private",
"description",
"author",
"contributors",
"license",
"bugs",
"homepage",
"repository",
"funding",
"publishConfig",
"keywords",
"type",
"main",
"module",
"types",
"exports",
"browser",
"sideEffects",
"files",
"scripts",
"husky",
"lint-staged",
"packageManager",
"devDependencies",
"dependencies",
],
},
includeWorkspaceRoot: true,
}),
alphabeticalDependencies({ includeWorkspaceRoot: true }),
alphabeticalScripts({ includeWorkspaceRoot: true }),
packageEntry({
options: {
entries: {
type: "module",
main: "dist/cjs/index.cjs",
module: "dist/esm/index.js",
types: "dist/esm/index.d.ts",
sideEffects: false,
publishConfig: {
access: "public",
},
// @turf/turf is commonly consumed through CDNs, moving this output file is a breaking change for anyone
// who has a hardcoded reference to this specific file, instead of letting the CDN pick the path.
// Example of a URL that will break: https://unpkg.com/@turf/turf/dist/turf.min.js
// Example of a URL that will keep working: https://unpkg.com/@turf/turf
browser: "turf.min.js",
files: ["dist", "turf.min.js"],
exports: {
"./package.json": "./package.json",
".": {
import: {
types: "./dist/esm/index.d.ts",
default: "./dist/esm/index.js",
},
require: {
types: "./dist/cjs/index.d.cts",
default: "./dist/cjs/index.cjs",
},
},
},
},
},
includePackages: [MAIN_PACKAGE],
}),
packageEntry({
options: {
entries: {
type: "module",
main: "dist/cjs/index.cjs",
module: "dist/esm/index.js",
types: "dist/esm/index.d.ts",
sideEffects: false,
publishConfig: {
access: "public",
},
exports: {
"./package.json": "./package.json",
".": {
import: {
types: "./dist/esm/index.d.ts",
default: "./dist/esm/index.js",
},
require: {
types: "./dist/cjs/index.d.cts",
default: "./dist/cjs/index.cjs",
},
},
},
},
},
includePackages: [...TS_PACKAGES, ...JS_PACKAGES],
}),
packageEntry({
options: {
entries: {
files: ["dist"],
},
},
includePackages: [...TS_PACKAGES, ...JS_PACKAGES],
}),
packageEntry({
options: {
entries: {
funding: "https://opencollective.com/turf",
},
},
}),
packageScript({
options: {
scripts: {
docs: REMOVE,
test: "pnpm run /test:.*/",
},
},
excludePackages: [MAIN_PACKAGE],
}),
packageScript({
options: {
scripts: {
build: "tsup --config ../../tsup.config.ts",
},
},
includePackages: [...TS_PACKAGES, ...JS_PACKAGES],
}),
packageScript({
options: {
scripts: {
build:
"tsup --config ../../tsup.config.ts && rollup -c rollup.config.js",
},
},
includePackages: [MAIN_PACKAGE],
}),
packageScript({
options: {
scripts: {
bench: "tsx bench.ts",
"test:tape": "tsx test.ts",
},
},
includePackages: [...TS_TAPE_PACKAGES, ...JS_TAPE_PACKAGES],
}),
packageScript({
options: {
scripts: {
"test:types":
"tsc --esModuleInterop --module node16 --moduleResolution node16 --noEmit --strict types.ts",
},
},
includePackages: TYPES_PACKAGES,
}),
packageScript({
options: {
scripts: {
"test:types": "tstyche",
},
},
includePackages: TSTYCHE_PACKAGES,
}),
requireDependency({
options: {
devDependencies: {
benchmark: "^2.1.4",
glob: REMOVE,
tape: "^5.9.0",
tsup: "^8.4.0",
tsx: "^4.19.4",
},
},
includePackages: [...TS_PACKAGES, ...JS_PACKAGES],
}),
requireDependency({
options: {
dependencies: {
tslib: "^2.8.1",
},
devDependencies: {
"@types/benchmark": "^2.1.5",
"@types/tape": "^5.8.1",
typescript: "^5.8.3",
},
},
includePackages: TS_PACKAGES,
}),
requireDependency({
options: {
devDependencies: {
tstyche: "^6.2.0",
},
},
includePackages: TSTYCHE_PACKAGES,
}),
requireDependency({
options: {
dependencies: {
"@types/geojson": "^7946.0.10",
},
},
includePackages: [MAIN_PACKAGE, ...TS_PACKAGES, ...JS_PACKAGES],
}),
],
};
================================================
FILE: .prettierignore
================================================
dist
*.md
node_modules
# is actually output
packages/turf/turf.min.js
packages/turf/test.example.js
pnpm-lock.yaml
/.nx/cache
/.nx/workspace-data
================================================
FILE: .prettierrc.json
================================================
{
"trailingComma": "es5",
"overrides": [
{
"files": "*.{geojson,json}",
"options": {
"printWidth": 90
}
}
]
}
================================================
FILE: CHANGELOG.md
================================================
Changelog is no longer maintained. See Turf Github [releases](https://github.com/Turfjs/turf/releases)
# 7.0.0
## ⚠️ Breaking
- Move to @types/geojson package instead of declaring our own. Typescript consumers of Turf will need to import from @types/geojson. (#2158)
- Move distribution JS to target ES2017 (#2237)
- Please change to using named exports instead of default exports from the various packages
- [`@turf/helpers`](helpers) Correct the conversion factor for degrees (#2177)
- [`@turf/helpers`](helpers) polygon() will now throw if the first and last coordinates are not the same (#2173)
- [`@turf/helpers`](helpers) Separate AreaUnits into its own type (#2393)
- [`@turf/area`](area) Fix earth radius to use WGS84 median earth radius (#2166)
- [`@turf/turf`](turf) Remove re-exports for turf 4.x compatability (#2183)
- [`@turf/rectangle-grid`](rectangle-grid) Fix correctness for large areas (#2106)
- [`@turf/square-grid](square-grid) Fix correctness for large areas (#2106)
- [`@turf/union`](union) Accept FeatureCollection for multiple inputs (#2247)
- [`@turf/difference`](difference) Accept FeatureCollection for multiple inputs (#2247)
- [`@turf/intersect`](intersect) Accept FeatureCollection for multiple inputs (#2247)
- [`@turf/buffer`](buffer) Add undefined return for when the geometry is invalid (#2613)
## 🏅 New Features/Enhancements
- [`@turf/kinks`](kinks) Move to sweepline-intersections library for performance (#1896)
- [`@turf/buffer](buffer) Reduce bundle size by moving from turf-jsts to @turf/jsts (#2217)
- [`@turf/boolean-equal`](boolean-equal) Add option for precision (#2231)
- [`@turf/boolean-point-in-polygon`](boolean-point-in-polygon) Move to point-in-polygon-hao library for performance and correctness (#1893)
- [`@turf/line-intersect`][line-intersect] Move to sweepline-intersections library for performance (#2033)
- [`@turf/boolean-contains`](boolean-contains) Add multipolygon support (#2338)
- [`@turf/nearest-point`](nearest-point) Add unit option (#2415)
- [`@turf/voronoi`](voronoi) Retain properties from points (#1450)
## 🐛 Bug Fixes
- [`@turf/polygon-smooth`](polygon-smooth) Options argument is now actually optional (#2149)
- [`@turf/polygon-smooth`](polygon-smooth) Fix crashes with polygons containing multiple holes (#2323)
- [`@turf/line-arc`](line-arc) Ensure all points are generated when the first and last points are the same (#2142)
- [`@turf/clone`](clone) Fix cloning of features with null geometries (#2316)
- [`@turf/dissolve`](dissolve) Now correctly depends on @turf/flatten (#2345)
- [`@turf/clean-coords`](clean-coords) Allow 3 coordinate closed LineStrings (#2178)
- [`@turf/helpers`](helpers) Add alternate spellings for Units: millimetres, centimetres, metres, kilometres (#2168)
- [`@turf/ellipse`](ellipse) Add pivot and angle options to typescript (#2174)
- [`@turf/quadrat-analysis`](quadrat-analysis) Fix test flake (#2182)
- [`@turf/bbox`](bbox) Use input bbox instead of computing it (#2171)
- [`@turf/transform-scale`](transform-scale) Removes invalid bbox when scaling (#2171)
- [`@turf/invariant`](invariant) getCoord now shallow clones its result to prevent accidental mutations (#2167)
- [`@turf/line-overlap`](line-overlap) Identify multiple overlaps on a single segment (#2134)
- [`@turf/transform-scale`](transform-scale) Fix factor to allow only numbers >= 0 (#2169)
- [`@turf/voronoi`](voronoi) Make options optional (#2195)
- [`@turf/boolean-within`](boolean-within) Fix multipoint checks (#2216)
- [`@turf/points-within-polygon`](points-within-polygon) Fix dropped properties on MultiPoint results (#2227)
- [`@turf/random`](random) Throws error on invalid bbox inputs (#2172)
- [`@turf/boolean-parallel`](boolean-parallel) Lines with 180 degree angle between them are also considered parallel (#2475)
- [`@turf/unkink-polygon`](unkink-polygon) Fix a maximum call stack size exceeded error with very large polygons (#2504)
- [`@turf/line-arc`](line-arc) Number of arc segments generated wasn't related to steps value passed in (#2524)
- [`@turf/boolean-equal`](boolean-equal) Replace geojson-equality with new implementation (#2531)
- [`@turf/boolean-overlap`](boolean-overlap) Replace geojson-equality with new implementation (#2531)
- [`@turf/boolean-within`](boolean-within) Now correctly checks that the final point is contained (#2599)
## 📖 Documentation
- [`@turf/bbox`][bbox] Improve documentation (#2153)
- [`@turf/great-circle`][great-circle] Add license for arc.js (#2175)
- [`@turf/boolean-crosses`](boolean-crosses) Document OpenGIS Simple Feature Spec requirement (#2184)
- [`@turf/turf-clone`](clone) Now has more useful Typescript inference (#2239)
- [`@turf/centroid`](centroid) Improve docs (#2213)
- [`@turf/buffer`](buffer) Clean up Typescript types (#2188)
- [`@turf/polygon-smooth`](polygon-smooth) Clean up a typo (#2293)
- [`@turf/nearest-point-on-line`](nearest-point-on-line) Clean up typescript types (#2296)
- [`@turf/boolean-touches`](boolean-touches) Add boolean-touches to docs (#2431)
- [`@turf/boolean-equal`](boolean-equal) Improve docs (#2412)
- Remove Bower references (#2146)
- Fix typo in README (#2313)
- Lots of cleanup for CONTRIBUTING, README, and RELEASING (#2186)
- Fix docs generation (#2279)
- Add a link to turf_dart (#2286)
## 🔔 Misc
- [`@turf/turf](turf) Add booleanIntersects typescript export (#2157)
- [`@turf/turf](turf) Add booleanTouches export (#2170)
- [`@turf/turf](turf) Add booleanConcave export (#2265)
- [`@turf/simplify`](simplify) Clean up internals for less object churn (#2561)
- [`@turf/helpers](helpers) Make isObject a little more accurate (#2176)
- Migrate from geojsonhint to @placemark/check-geojson (#2571)
- Add custom types entry point to exports, required by Typescript for node16, nodenext and bundler module resolution strategies (#2400, #2452)
- types.ts tests are now run in strict mode (#2363)
- Uses tslib now for smaller bundles (#2165)
- Remove object-assign dependency from all packages (#2241)
- Lots of dependencies have been upgraded
# 6.5.0
## 🏅 New Features/Enhancements
- [`@turf/points-with-polygon`](points-with-polygon) Add MultiPoint support
(PR https://github.com/Turfjs/turf/pull/2137 - Author @twelch)
## 🐛 Bug Fixes
- [`@turf/dissolve`](dissolve) Complete rewrite of the dissolve module to resolve many bugs
(PR https://github.com/Turfjs/turf/pull/2110 - Author @rowanwins)
- [`@turf/mask`](mask) Complete rewrite of the mask module to resolve many bugs
(PR https://github.com/Turfjs/turf/pull/2130 - Author @rowanwins)
- [`@turf/boolean-valid`](boolean-valid) Add missing dependency to
(PR https://github.com/Turfjs/turf/pull/2094 - Author @rycgar)
## 📖 Documentation
- [`@turf/boolean-overlap`](boolean-overlap) Improve clarity
(PR https://github.com/Turfjs/turf/pull/2133 - Author @patrickbrett)
## 🔔 Misc
- Enable TS Strict Mode
(PR https://github.com/Turfjs/turf/pull/2126 - Author @mfedderly)
# 6.4.0
## 🏅 New Features/Enhancements
- [`@turf/boolean-point-on-line`](boolean-point-on-line) Added an `epislon` option to help in floating point comparison.
(PR https://github.com/Turfjs/turf/pull/2051 - Author @okcoker)
## 🐛 Bug Fixes
- [`@turf/line-slice-along`](line-slice-along) Fixed a bug where the offset distance equal to the length of the line
(PR https://github.com/Turfjs/turf/pull/2030 - Author @EricPKerr)
- [`@turf/helpers`](helpers) Fixed the conversion ratio for converting meters to yards and vice-versa
(PR https://github.com/Turfjs/turf/pull/2046 - Author @anotherhale)
- [`@turf/center-median`](center-median) Fixed a missing TS type import
(PR https://github.com/Turfjs/turf/pull/2044 - Author @Seairth)
- [`@turf/bezier-spline](bezier-spline) Fix a bug ensuring the spline result reaches the end of the input
(PR https://github.com/Turfjs/turf/pull/2090 - Author @the-nemz)
## 📖 Documentation
- [`@turf/transform-rotate`](transform-rotate) and [`@turf/ellipse`](ellipse)) Improve documentation for angle parameter
(PR https://github.com/Turfjs/turf/pull/2016 - Author @pasieronen)
- [`@turf/line-chunk`](line-chunk) Fix an invalid anchor
(PR https://github.com/Turfjs/turf/pull/2071 - Author @GraxMonzo)
- [`@turf/distance`](distance) Enhance distance doco so supported inputs are clearer
(PR https://github.com/Turfjs/turf/pull/2032 - Author @rowanwins)
## 🔔 Misc
- [`@turf/concave`](concave) Replace deprecated topojson dependency
(PR https://github.com/Turfjs/turf/pull/2037 - Author @elliots)
- Work towards enabling TS Strict Mode
(PR https://github.com/Turfjs/turf/pull/2053 - Author @mfedderly)
# 6.3.0
### Fix issues importing Turf for react-native, webpack 5, and other bundlers
(PR https://github.com/Turfjs/turf/pull/2004 - Author r0b0t3d)
(PR https://github.com/Turfjs/turf/pull/2011 - Author mfedderly)
### [`@turf/turf`][turf] expose @turf/boolean-intersect
(PR https://github.com/Turfjs/turf/pull/2007 - Author rowanwins)
# 6.2.0
After a bit of hiatus, TurfJS is resuming releases.
## ⭐️ Major Updates
- ES Modules available for all packages
- Tree shaking should significantly reduce import size of @turf/turf
- Better support for ESM modules (PR https://github.com/Turfjs/turf/pull/1942 - Author @diachedelic)
- Clean-up of test and benchmark running to make publishing easier
- Enforce styling using Prettier
- Enable ESLint and get rid of unused variables
- Upgrade rollup for more correct javascript module builds
- Only include ES5 code
## 🚀 New Modules
### [`@turf/boolean-touches`][boolean-touches]
Determines if two features touch but do not intersect
### [`@turf/boolean-valid`][boolean-valid]
Checks if the geometry is a valid according to the OGC Simple Feature Specification
### [`@turf/quadrat-analysis`][quadrat-analysis]
Performs a quadrat analysis on a set of points
### [`@turf/rectangle-grid`][rectangle-grid]
Creates a grid of rectangles from a bounding box
### [`@turf/voroni`][voronoi]
Typescript types for the options parameter have been fixed
(PR https://github.com/Turfjs/turf/pull/1424 - Author @stevage)
### [`@turf/points-within-polygon`][points-within-polygon]
Typescript types around the Feature's Properties will now be preserved.
(PR https://github.com/Turfjs/turf/pull/1761 - Author @rugheid)
### [`@turf/rewind`][rewind]
Typescript types for the 'reverse' option are now correct. Previously it was misnamed as 'reversed'.
(PR https://github.com/Turfjs/turf/pull/1786 - Author @jonnycornwell)
### [`@turf/difference`][difference]
No longer publishes an .mjs file.
### [`@turf/meta`][meta]
No longer publishes an .mjs file.
### [`@turf/tag`][tag]
Add MultiPolygon support.
(PR https://github.com/Turfjs/turf/pull/1996 - Author bryceroney)
## 🐛 Bug Fixes
- [`@turf/centroid`](centroid) Don't visit first point twice when calculating centroid
(PR https://github.com/Turfjs/turf/pull/1894 - Author @rowanwins)
- [`@turf/transform-translate`](transform-translate) Better handling of negative distances
(PR https://github.com/Turfjs/turf/pull/1895 - Author @rowanwins)
- [`@turf/union`](union), [`@turf/difference`](difference), [`@turf/intersect`](intersect) Use polygon-clipping library to fix correctness issues
(PR https://github.com/Turfjs/turf/pull/1916 - Authors @mbullington, @ngottlieb)
- [`@turf/buffer`](buffer) Change default number of steps to 8, and actually support the steps option
(PR https://github.com/Turfjs/turf/pull/1931 - Author stevenchanin)
- [`@turf/buffer`](buffer) Fix projection issues that produce undersized buffers at non-equatorial latitudes
(PR https://github.com/Turfjs/turf/pull/1956 - Author dyakovlev)
- [`@turf/helpers`](helpers) Add runtime checks to point() method, fixing an API break
(PR https://github.com/Turfjs/turf/pull/1964)
## 🏅 New Features/Enhancements
- [`@turf/boolean-overlap`](boolean-overlap) Better performance for MultiPoint geometries
(PR https://github.com/Turfjs/turf/pull/1910 - Author @mfedderly)
- [`@turf/helpers`](helpers) Add hectares to convertArea
(PR https://github.com/Turfjs/turf/pull/1943 - Author @DanielJDufour)
- [`@turf/great-circle`](great-circle) Update Typescript types to support MultiLineString input
(PR https://github.com/Turfjs/turf/pull/1928 - Author kronick)
## 📖 Documentation
- [`@turf/square-grid`](square-grid) Clarify inputs
(PR https://github.com/Turfjs/turf/pull/1885 - Author @raphael-leger)
- [`@turf/greater-circle`](greater-circle) Clarify properties option example
(PR https://github.com/Turfjs/turf/pull/1888 - Author @chris-catignani)
## ⚠️ Breaking Change
- [`@turf/line-to-polygon`](line-to-polygon) no longer modifies its input unless the mutate option is true
(PR https://github.com/Turfjs/turf/pull/1879 - Author @MortenBirk)
- [`@turf/unkink-polygon`](unkink-polygon) remove Number.prototype.modulo override
(PR https://github.com/Turfjs/turf/pull/1978)
# 5.0.0 🎉
## ⭐️ Major Updates
- TurfJS now supports ES Modules ([Related PR's](https://github.com/Turfjs/turf/pulls?q=is%3Apr+modules+is%3Aclosed+label%3Aes-module))
- Optional parameters are now defined as an `Object`.
## 🚀 New Modules
### [`@turf/voronoi`][voronoi]
Takes a FeatureCollection of points, and a bounding box, and returns a FeatureCollection of Voronoi polygons.
(PR https://github.com/Turfjs/turf/pull/1043 - Author @stevage)
### [`@turf/shortest-path`][shortest-path]
Returns the shortest path from start to end without colliding with any feature in obstacles
(PR https://github.com/Turfjs/turf/pull/956 - Author @stebogit)
### [`@turf/boolean-parallel`][boolean-parallel]
Boolean-Parallel returns True if each segment of `line1` is parallel to the correspondent segment of `line2`
(PR https://github.com/Turfjs/turf/pull/941 - Author @stebogit)
### [`@turf/nearest-point-on-line`][nearest-point-on-line]
Takes a {@link Point} and a {@link LineString} and calculates the closest Point on the (Multi)LineString.
(PR https://github.com/Turfjs/turf/pull/939 - Author @stebogit)
## 🏅 New Features/Enhancements
- Updates [`@turf/unkink-polygon`][unkink-polygon] testing & added `flattenEach` instead of using `flatten`.
(PR https://github.com/Turfjs/turf/pull/889)
- Add multi-geomtry support to [`@turf/line-split`](line-split)
(PR https://github.com/Turfjs/turf/pull/1078)
- Improve [`@turf/meta`](meta) `lineEach` method to provide properties, id and bbox
(PR https://github.com/Turfjs/turf/pull/1010)
## 🐛 Bug Fixes
- Fixes [`@turf/helpers`](helpers) earth radius variable
(PR https://github.com/Turfjs/turf/pull/1012)
- Fixes [`@turf/polygon-tangents`](polygon-tangents) bug
(PR https://github.com/Turfjs/turf/pull/1058)
- Fixes [`@turf/line-chunk`](line-chunk) bug when the number of segments is integer
(PR https://github.com/Turfjs/turf/pull/1046)
- Fixes `segmentEach` and `segmentReduce` methods in [`@turf/meta`](meta) to ensure something is returned
(PR https://github.com/Turfjs/turf/pull/968)
## ⚠️ Breaking Change
- Optional parameters are now defined as an `Object`:
**Before**
```js
var from = [-75.343, 39.984];
var to = [-75.534, 39.123];
var units = 'miles';
var distance = turf.distance(from, to, units);
```
**After**
```js
var from = [-75.343, 39.984];
var to = [-75.534, 39.123];
var options = {units: 'miles'};
var distance = turf.distance(from, to, options);
```
- Reworked `@turf/random` PR https://github.com/Turfjs/turf/issues/994
- Deprecate `@turf/idw` Issue https://github.com/Turfjs/turf/issues/887
- Reworked Grid modules `@turf/point-grid/hex/square/triangle` PR https://github.com/Turfjs/turf/pull/1029
- Renamed Modules/Methods
- [x] `@turf/inside` => `@turf/boolean-point-in-polygon` https://github.com/Turfjs/turf/issues/860#issuecomment-317216235
- [x] `@turf/within` => `@turf/points-within-polygon` https://github.com/Turfjs/turf/issues/860#issuecomment-317216235
- [x] [`@turf/bezier`](https://github.com/Turfjs/turf/blob/master/packages/turf-bezier/index.js) => `@turf/bezier-spline` Issue https://github.com/Turfjs/turf/issues/661
- [x] [`@turf/nearest`](https://github.com/Turfjs/turf/blob/master/packages/turf-nearest/index.js) => `@turf/nearest-point` https://github.com/Turfjs/turf/pull/858#issuecomment-317197295
- [x] [`@turf/point-on-line`](https://github.com/Turfjs/turf/blob/master/packages/turf-point-on-line/index.js) => `@turf/nearest-point-on-line` https://github.com/Turfjs/turf/pull/858#issuecomment-317197295
- [x] [`@turf/lineDistance`](https://github.com/Turfjs/turf/blob/master/packages/turf-line-distance/index.js) => `@turf/length` https://github.com/Turfjs/turf/issues/860#issuecomment-317229869
- [x] [`@turf/helpers`](https://github.com/Turfjs/turf/blob/master/packages/turf-helpers/index.js)
- [x] `radians2degrees` => `radiansToDegrees`
- [x] `degrees2radians` => `degreesToRadians`
- [x] `distanceToDegrees` => `lengthToDegrees`
- [x] `distanceToRadians` => `lengthToRadians`
- [x] `radiansToDistance` => `radiansToLength`
- [x] `bearingToAngle` => `bearingToAzimuth`
- [x] `convertDistance` => `convertLength`
# 4.7.0
## 🚀 New Modules
### [`@turf/projection`][projection]
- **toMercator**: Converts a WGS84 GeoJSON object into Mercator (EPSG:900913) projection
- **toWgs84**: Converts a Mercator (EPSG:900913) GeoJSON object into WGS84 projection
(PR https://github.com/Turfjs/turf/pull/927 - Author @stebogit)
### [`@turf/point-to-line-distance`][point-to-line-distance]
Returns the minimum distance between a {@link Point} and a {@link LineString}, being the distance from a line the minimum distance between the point and any segment of the `LineString`.
(PR https://github.com/Turfjs/turf/pull/925 - Author @stebogit)
### [`@turf/boolean-within`][boolean-within]
Boolean-within returns true if the first geometry is completely within the second geometry. The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a) must not intersect the exterior of the secondary (geometry b). Boolean-within returns the exact opposite result of the [`@turf/boolean-contains`][boolean-contains].
(PR https://github.com/Turfjs/turf/pull/924 - Author @rowanwins)
## 🏅 New Features/Enhancements
- Updates [`@turf/unkink-polygon`][unkink-polygon] testing & added `flattenEach` instead of using `flatten`.
(PR https://github.com/Turfjs/turf/pull/889)
- [`@turf/concave`][concave] refactoring, replacing [`@turf/union`][union] with `geojson-dissolve` to increase speed and added support to `null` geometries
(PR https://github.com/Turfjs/turf/pull/907 - Contributor @stebogit @DenisCarriere)
- Adds doc note on [`@turf/polygonize`][polygonize] about "Edges must be correctly noded"
(PR https://github.com/Turfjs/turf/pull/898 - Contributor @stebogit @NickCis)
- Adds support to foreign Members to [`@turf/clone`][clone]
(PR https://github.com/Turfjs/turf/pull/904 - Contributor @DenisCarriere)
- Extends support of any `GeoJSON` to [`@turf/simplify`][simplify]
(PR https://github.com/Turfjs/turf/pull/903 - Contributor @DenisCarriere @stebogit)
- Adds new `isNumber` function and improves type checking for few [`@turf/helpers`][helpers] methods
(PR https://github.com/Turfjs/turf/pull/920 - Contributor @DenisCarriere @stebogit)
- Adds throw errors to invalid `MultiPolygons` for [`@turf/simplify`][simplify]
(PR https://github.com/Turfjs/turf/pull/922 - Contributor @DenisCarriere)
## 🐛 Bug Fixes
- Fixes [`@turf/bbox-clip`](bbox-clip) point intersection handling, adding sanity-checks the lineclip output
(PR https://github.com/Turfjs/turf/pull/886)
- Fixes [`@turf/line-split`][line-split] endpoint case handling applying [`@turf/truncate`][truncate] on `splitter`
(PR https://github.com/Turfjs/turf/pull/892 and https://github.com/Turfjs/turf/pull/855 - Contributor @stebogit)
- Fixes [`@turf/intersect`][intersect] throwing "uncaught exception", adding [`@turf/truncate`][truncate] to inputs and returning `Feature<null>` if no geometry
(PR https://github.com/Turfjs/turf/pull/890 - Contributor @stebogit @vicvolk)
- Fixes [`@turf/hex-grid`][hex-grid] not properly cloning the last ring vertex
(PR https://github.com/Turfjs/turf/pull/897 - Contributor @stebogit @DenisCarriere)
- Fixes [`@turf/boolean-disjoint`][boolean-disjoint] incorrect behaviour where a poly was completely contained within another poly
(PR https://github.com/Turfjs/turf/pull/908 - Contributor @rowanwins)
- Fixes [`@turf/simplify`][simplify] process pending on particular geometries, applying [`@turf/clean-coords`][clean-coords] to input.
(PR https://github.com/Turfjs/turf/pull/903 - Contributor @stebogit @DenisCarriere)
- Fixes `boolean` properties not being translated with [`@turf/clone`][clone]
(PR https://github.com/Turfjs/turf/pull/909 - Contributor @DenisCarriere)
- Fixes [`@turf/boolean-contains`][boolean-contains] incorrect output when checking two polygons
(PR https://github.com/Turfjs/turf/pull/923 - Contributor @rowanwins @DenisCarriere)
# 4.6.0
## 🚀 New Modules
- [`@turf/clean-coords`](https://github.com/Turfjs/turf/tree/master/packages/turf-clean-coords) Removes redundant coordinates from any GeoJSON Geometry.
(PR https://github.com/Turfjs/turf/pull/875 - Author @stebogit)
- [`@turf/interpolate`](https://github.com/Turfjs/turf/tree/master/packages/turf-interpolate) Takes a set of points and estimates their 'property' values on a grid using the [Inverse Distance Weighting (IDW) method.](https://en.wikipedia.org/wiki/Inverse_distance_weighting).
(PR https://github.com/Turfjs/turf/pull/832 - Author @stebogit)
- [`@turf/clusters-dbscan`](https://github.com/Turfjs/turf/tree/master/packages/turf-clusters-dbscan) Takes a set of Points and partition them into clusters according to [DBSCAN's](https://en.wikipedia.org/wiki/DBSCAN) data clustering algorithm.
(PR https://github.com/Turfjs/turf/pull/812 and https://github.com/Turfjs/turf/pull/851 - Author @DenisCarriere)
> special mention to [this incredibly instructive and fun interactive map](https://github.com/DenisCarriere/turf-example-clusters-dbscan) by @DenisCarriere 😎👏
- [`@turf/clusters`](https://github.com/Turfjs/turf/tree/master/packages/turf-clusters) Provides `getCluster`, `clusterEach`, and `clusterReduce` functions.
(PR https://github.com/Turfjs/turf/pull/847 - Author @DenisCarriere)
- [`@turf/boolean-point-on-line`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-point-on-line) Returns true if a point is on a line. Accepts a optional parameter to ignore the start and end vertices of the linestring.
(PR https://github.com/Turfjs/turf/pull/858 - Author @rowanwins)
- [`@turf/boolean-overlap`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-overlap) Takes two features and returns true or false whether or not they overlap, i.e. whether any pair of edges on the two polygons intersect. If there
are any edge intersections, the polygons overlap.
(PR https://github.com/Turfjs/turf/pull/856 and https://github.com/Turfjs/turf/pull/868 - Author @stebogit @tcql)
- [`@turf/boolean-equal`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-equal) Determine whether two geometries of the same type have identical X,Y coordinate values.
(PR https://github.com/Turfjs/turf/pull/869 - Author @stebogit @tcql)
## 🏅 New Features/Enhancements
- Sets `centered` param default to `true` in [`@turf/point-grid`](https://github.com/Turfjs/turf/tree/master/packages/turf-point-grid)
(PR https://github.com/Turfjs/turf/pull/836 - Contributor @stebogit)
- Adds `MultiLineString` support for [`@turf/point-on-line`](https://github.com/Turfjs/turf/tree/master/packages/turf-point-on-line)
(PR https://github.com/Turfjs/turf/pull/838 - Contributor @stebogit)
- Renames `@turf/clusters` => `@turf/clusters-kmeans`, plus adds deprecated warning message to `@turf/clusters@4.5.2`
(See Issue https://github.com/Turfjs/turf/issues/845)
- Changes output type of `@turf/clusters-kmeans`
(See Issue https://github.com/Turfjs/turf/issues/850 - Contributor @DenisCarriere)
- Adds `segmentEach` and `segmentReduce` functions to `@turf/meta`
(See Issue https://github.com/Turfjs/turf/issues/850 - Contributor @DenisCarriere)
- Adds tests and linting on JSDoc in TurfJS core from `turf-www`; see Issue https://github.com/Turfjs/turf/issues/859
(PR https://github.com/Turfjs/turf/issues/857 + https://github.com/Turfjs/turf/issues/864 + https://github.com/Turfjs/turf/issues/870 - Contributor @DenisCarriere @stebogit)
- Introduces `null` Geometry support across TurfJS modules (See Issue https://github.com/Turfjs/turf/issues/853)
(PR https://github.com/Turfjs/turf/issues/866 - Contributor @DenisCarriere)
- Includes feature(Sub)Index in `coordEach`/`coordReduce` (@turf/meta) 🎉
(PR https://github.com/Turfjs/turf/issues/872 - Contributor @DenisCarriere)
- Adds `bbox` and `id` params plus `geometry` method to `@turf/helpers`
(PR https://github.com/Turfjs/turf/issues/877 - Contributor @DenisCarriere)
## 🐛 Bug Fixes
- Applies `@turf/truncate` to [`@turf/line-split`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-split)
`splitter` input to avoid approximation errors. Fixed #852
(PR https://github.com/Turfjs/turf/pull/855)
- Fixes `@turf-mask` error (See Issue https://github.com/Turfjs/turf/issues/837)
(PR https://github.com/Turfjs/turf/pull/865 - Contributor @thiagoxvo)
- Fixes `create-new-module` script error on `LICENSE` file creation (See Issue https://github.com/Turfjs/turf/issues/861)
(commit [df6986e](https://github.com/Turfjs/turf/commit/df6986ec0a5c353babb60836ec97c21923913e79))
- Fixes `@turf/isobands` error on `commonProperties` (See Issue https://github.com/Turfjs/turf/issues/831)
(commit [1663f07](https://github.com/Turfjs/turf/commit/1663f077c075c8902dbeff4acf68b1c8e0151853))
# 4.5.0
## 🚀 New Modules
- [`@turf/clusters`](https://github.com/Turfjs/turf/tree/master/packages/turf-clusters) Takes a set of points and partition them into clusters using the [k-means clustering](https://en.wikipedia.org/wiki/K-means_clustering) algorithm.
(PR https://github.com/Turfjs/turf/pull/787 - Author @stebogit )
- [`@turf/boolean-disjoint`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-disjoint) Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an empty set.
(PR https://github.com/Turfjs/turf/pull/805 - Author @rowanwins)
- [`@turf/boolean-contains`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-contains) Boolean-contains returns True if the second geometry is completely contained by the first geometry. The interiors of both geometries must intersect and, the interior and boundary of the secondary (geometry b) must not intersect the exterior of the primary (geometry a). Boolean-contains returns the exact opposite result of the `@turf/boolean-within`.
(PR https://github.com/Turfjs/turf/pull/797 - Author @rowanwins)
- [`@turf/boolean-crosses`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-crosses) Boolean-Crosses returns True if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.
Boolean-Crosses returns t (TRUE) for only multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, and linestring/multipolygon comparisons.
(PR https://github.com/Turfjs/turf/pull/796 - Author @rowanwins)
- [`@turf/boolean-clockwise`](https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-clockwise) Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.
(PR https://github.com/Turfjs/turf/pull/789 - Authors @morganherlocker @stebogit)
- [`@turf/clone`](https://github.com/Turfjs/turf/tree/master/packages/turf-clone) Prevents GeoJSON coordinates from being mutated, similar to `JSON.parse(JSON.stringify(geojson))`.
Only cloning the coordinates can be 3x-20x faster than the **parse + stringify** approach.
(PR https://github.com/Turfjs/turf/pull/824 - Author @DenisCarriere)
## 🏅 New Features/Enhancements
- [`convertArea`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers#convertarea) Converts a area to the requested unit. (PR https://github.com/Turfjs/turf/pull/821 - Author @wnordmann)
- Adds mask option to `@turf/point-grid` (PR https://github.com/Turfjs/turf/pull/791)
- New @turf/isolines based on MarchingSquares.js (PR https://github.com/Turfjs/turf/pull/781)
- Use ES6 modules / Add module.js to @turf/turf (PR https://github.com/Turfjs/turf/pull/793)
- Create-new-module script (PR https://github.com/Turfjs/turf/pull/823)
## 🐛 Bug Fixes
- Buffer - Drop circle buffer operation (PR https://github.com/Turfjs/turf/pull/786)
- Fixes `@turf/idw` bad property name #774 (PR https://github.com/Turfjs/turf/pull/800)
- Fix for @turf/polygon-tangents - Resolves #785 (PR https://github.com/Turfjs/turf/pull/792)
# 4.4.0
## 🚀 New Modules
- [`@turf/line-offset`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-offset)
Adds a new lineOffset module as per this issue. Basically takes an input line and returns a new line offset by the distance. (PR https://github.com/Turfjs/turf/pull/729 - Author @rowanwins)
- [`@turf/polygonize`](https://github.com/Turfjs/turf/tree/master/packages/turf-polygonize)
Polygonizes (Multi)LineString(s) into Polygons. Implementation of GEOSPolygonize function (geos::operation::polygonize::Polygonizer). (PR https://github.com/Turfjs/turf/pull/767 - Author @NickCis)
- [`@turf/transform-rotate`](https://github.com/Turfjs/turf/tree/master/packages/turf-transform-rotate)
Rotates any geojson Feature or Geometry of a specified angle, around its centroid or a given pivot point; all rotations follow the right-hand rule. (Issue https://github.com/Turfjs/turf/issues/747 - Author @stebogit)
- [`@turf/transform-translate`](https://github.com/Turfjs/turf/tree/master/packages/turf-transform-translate)
Moves any geojson Feature or Geometry of a specified distance along a Rhumb Line on the provided direction angle. (Issue https://github.com/Turfjs/turf/issues/747 - Author @stebogit)
- [`@turf/transform-scale`](https://github.com/Turfjs/turf/tree/master/packages/turf-transform-scale)
Scale a GeoJSON from a given point by a factor of scaling (ex: factor=2 would make the GeoJSON 200% larger). If a FeatureCollection is provided, the origin point will be calculated based on each individual Feature. (Issue https://github.com/Turfjs/turf/issues/747 - Author @stebogit)
## 🏅 New Features
- Support z-coordinate as input for [`@turf/turf-tin`](https://github.com/Turfjs/turf/tree/master/packages/turf-tin) (PR https://github.com/Turfjs/turf/pull/772)
- Adds properties parameter to [`@turf/centroid`](https://github.com/Turfjs/turf/tree/master/packages/turf-centroid) and [`@turf/center`](https://github.com/Turfjs/turf/tree/master/packages/turf-center) (PR https://github.com/Turfjs/turf/pull/769)
- Include Yarn.lock for all modules & Lerna uses Yarn (Issue https://github.com/Turfjs/turf/issues/704, https://github.com/Turfjs/turf/issues/765, PR https://github.com/Turfjs/turf/pull/766)
- Use `Tap` at root which enables code coverage reports (Issue https://github.com/Turfjs/turf/issues/328 & PR https://github.com/Turfjs/turf/pull/762)
- Support z-coordinate as input for [`@turf/pointplane`](https://github.com/Turfjs/turf/tree/master/packages/turf-planepoint) (PR https://github.com/Turfjs/turf/pull/754)
- Add core tests - file management & package.json rules (PR https://github.com/Turfjs/turf/pull/749 & https://github.com/Turfjs/turf/pull/756)
## 🐛 Bug Fixes
- Website http://turfjs.org is back up and running (Issue https://github.com/Turfjs/turf/issues/777)
- [`@turf/rhumb-destination`](https://github.com/Turfjs/turf/tree/master/packages/turf-planepoint) issue at 180th meridian (Issue https://github.com/Turfjs/turf/issues/770 & PR https://github.com/Turfjs/turf/pull/771)
- Getting too large numbers for Longitude (Issue https://github.com/Turfjs/turf/issues/758 & PR https://github.com/Turfjs/turf/pull/763)
- Throw error if FeatureCollection not array #751 (PR https://github.com/Turfjs/turf/pull/760)
- Change default param coordinates to 3 @turf/truncate (PR https://github.com/Turfjs/turf/pull/757)
- along returns a point that is not found by [`@turf/point-on-line`](https://github.com/Turfjs/turf/tree/master/packages/turf-point-on-line) (Issue https://github.com/Turfjs/turf/issues/691)
- Fix location of intersect point for [`@turf/point-on-line`](https://github.com/Turfjs/turf/tree/master/packages/turf-point-on-line). (PR https://github.com/Turfjs/turf/pull/750)
- Handle empty geometries as undefined [`@turf/buffer`](https://github.com/Turfjs/turf/tree/master/packages/turf-buffer) (PR https://github.com/Turfjs/turf/pull/746)
# 4.3.0
## 🚀 New Modules
- [Rhumb Line](https://en.wikipedia.org/wiki/Rhumb_line) Modules (https://github.com/Turfjs/turf/pull/728)
- [`@turf/rhumb-bearing`](https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-bearing)
- [`@turf/rhumb-distance`](https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-distance)
- [`@turf/rhumb-destination`](https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-destination)
- [`@turf/polygon-tangents`](https://github.com/Turfjs/turf/tree/master/packages/turf-polygon-tangents) Finds the tangents of a (Multi)Polygon from a Point. (https://github.com/Turfjs/turf/pull/708)
- [`@turf/rewind`](https://github.com/Turfjs/turf/tree/master/packages/turf-rewind) Rewind LineString or Polygon outer ring ~clockwise~ counter-clockwise and inner rings ~counterclockwise~ clockwise (https://github.com/Turfjs/turf/pull/700 & https://github.com/Turfjs/turf/issues/66)
- [`@turf/isobands`](https://github.com/Turfjs/turf/tree/master/packages/turf-isobands) - Takes a grid FeatureCollection of Point features with z-values and an array of value breaks and generates filled contour isobands. (https://github.com/Turfjs/turf/pull/619)
## 🏅 New Features
- New function [convertDistance](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers#convertdistance) to [`@turf/helpers`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers) (https://github.com/Turfjs/turf/pull/732)
- Add ignoreBoundary param [`@turf/inside`](https://github.com/Turfjs/turf/tree/master/packages/turf-inside) (https://github.com/Turfjs/turf/pull/706)
- Add [flattenEach](https://github.com/Turfjs/turf/tree/master/packages/turf-meta#flatteneach)/[flattenReduce](https://github.com/Turfjs/turf/tree/master/packages/turf-meta#flattenreduce) to [`@turf/meta`](https://github.com/Turfjs/turf/tree/master/packages/turf-meta). (https://github.com/Turfjs/turf/pull/712 & https://github.com/Turfjs/turf/issues/692)
- New Feature [`getGeom`](https://github.com/Turfjs/turf/tree/master/packages/turf-invariant#getgeom) & [`getGeomType`](https://github.com/Turfjs/turf/tree/master/packages/turf-invariant#getgeomtype) in [`@turf/invariant`](https://github.com/Turfjs/turf/tree/master/packages/turf-invariant) (https://github.com/Turfjs/turf/pull/720)
- Adds [`round()`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers#round), [`radians2degrees()`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers#radians2degrees) and [`degrees2radians()`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers#degrees2radians) to [`turf-helpers`](https://github.com/Turfjs/turf/tree/master/packages/turf-helpers)
(https://github.com/Turfjs/turf/pull/715)
- **⭐️ New** Add FeatureCollection & GeometryCollection support to [`@turf/rewind`](https://github.com/Turfjs/turf/tree/master/packages/turf-rewind) (https://github.com/Turfjs/turf/pull/741)
## 🐛 Bug Fixes
- Fix [`@turf/circle`](https://github.com/Turfjs/turf/tree/master/packages/turf-circle) translate properties (https://github.com/Turfjs/turf/pull/717)
- Apply equidistance [`@turf/buffer`](https://github.com/Turfjs/turf/tree/master/packages/turf-buffer) to polygons (https://github.com/Turfjs/turf/issues/660 & https://github.com/Turfjs/turf/pull/718)
- Fix jsts empty (Multi)Polygon error [`@turf/difference`](https://github.com/Turfjs/turf/tree/master/packages/turf-difference) (https://github.com/Turfjs/turf/pull/725)
- Support Geometry Objects & Collection (https://github.com/Turfjs/turf/issues/710)
- [`@turf/line-intersect`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-intersect) (https://github.com/Turfjs/turf/pull/731)
- [`@turf/line-chunk`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-chunk) (https://github.com/Turfjs/turf/pull/726)
- [`@turf/line-segment`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-segment) (https://github.com/Turfjs/turf/pull/727 & https://github.com/Turfjs/turf/pull/711)
- [`@turf/line-overlap`](https://github.com/Turfjs/turf/tree/master/packages/turf-line-overlap) (https://github.com/Turfjs/turf/pull/711)
- **New** Reverse winding - Polygon CCW & Polygon CW [`@turf/rewind`](https://github.com/Turfjs/turf/tree/master/packages/turf-rewind) (https://github.com/Turfjs/turf/pull/741)
- **⭐️ New** Fix Feature GeometryCollection to [`@turf/buffer`](https://github.com/Turfjs/turf/tree/master/packages/turf-buffer) (https://github.com/Turfjs/turf/pull/739)
- **⭐️ New** Re-enable negative `radius` to [`@turf/buffer`](https://github.com/Turfjs/turf/tree/master/packages/turf-buffer) (https://github.com/Turfjs/turf/pull/736)
# 4.2.0
## New Modules
- [`@turf/sector`](https://github.com/Turfjs/turf/pull/653)
- [`@turf/linestring-to-polygon`](https://github.com/Turfjs/turf/pull/672)
## Enhancements
- [Add mutate param to `@turf/flip`](https://github.com/Turfjs/turf/issues/693)
- [Add Geometry & GeometryCollection support to `@turf/truncate`](https://github.com/Turfjs/turf/pull/677)
- [`@turf/inside` performance increase](https://github.com/Turfjs/turf/pull/675)
- [Add properties param to `@turf/circle`](https://github.com/Turfjs/turf/pull/668)
- [Added `bearingToAngle` method to turf-helpers](https://github.com/Turfjs/turf/pull/663)
## Bug Fixes
- [Fix `@turf/buffer` points in high latitudes](https://github.com/Turfjs/turf/pull/667)
- [lineIntersect returns the same point several times](https://github.com/Turfjs/turf/issues/688)
- [`@turf/flip` incorrect if z-elevation is present](https://github.com/Turfjs/turf/issues/669)
## Changes
- [Change output types `@turf/polygon-to-linestring`](https://github.com/Turfjs/turf/pull/686)
## Documentation
- [Update JSDocs examples](https://github.com/Turfjs/turf/pull/670/files)
- [Include many more AddToMap to modules](https://github.com/Turfjs/turf/pull/664)
# 4.1.0
## New Modules
- [`@turf/line-arc`](https://github.com/Turfjs/turf/pull/657)
- [`@turf/polygon-to-linestring`](https://github.com/Turfjs/turf/pull/646)
- [`@turf/bbox-clip`](https://github.com/Turfjs/turf/pull/652)
- [`@turf/line-overlap`](https://github.com/Turfjs/turf/pull/640)
## Enhancements
- added centered param to point-grid (PR: https://github.com/Turfjs/turf/pull/650)
- Single `module.export` helpers, invariant & meta (Commit: https://github.com/Turfjs/turf/commit/9cebb2100cf545fec49488c80140909ab54358b5)
## Bug Fixes
- Turf.invariant fails on string value as coordinate (PR: https://github.com/Turfjs/turf/pull/643)
- Handle precision=0 turf-truncate (PR: https://github.com/Turfjs/turf/pull/641)
- Added `radiansToDistance`, `distanceToRadians` & `distanceToDegrees` to Turf core library from `@turf/helpers`. (Commit: https://github.com/Turfjs/turf/commit/a88d77a3e7f76860b3c138a716da8b603a407c8e)
- Removed process.hrtime in `@turf/polygon-unkink`(issue: https://github.com/mclaeysb/simplepolygon/issues/5)
# 3.6.4
Typescript definitions `index.d.ts` added to all the packages.
# 3.0.11
Fix turf-line-slice bug with vertical linestrings.
# 3.0.1
This is a big change in Turf! 3.0.0 is a release that targets the development
cycle of Turf, letting us work on it more and release more often.
**Monorepo**
Turf 3.x and forward is a **monorepo** project. We publish lots of little modules
as usual, but there's one repo - turfjs/turf - that contains all the code
and the issues for the Turf source code. We use [lerna](https://lernajs.io/)
to link these packages together and make sure they work.
Why? We already had internal turf modules, like `turf-meta`, and development
was harder and harder - we had a bunch of custom scripts to do releases and
tests, and these were just written for Turf. Lerna is from the very popular
and very well-maintained [babel](http://www.babeljs.io) project, and it
works really well, and reduces maintainer sadness.
**Simplicity**
Turf grew a bunch of modules that weren't totally necessary, or were
expressing only a line or two of JavaScript. We want to make things easier,
but these modules didn't make code more expressive and they hid complexity
where it didn't need to be hidden. Turf 3.x focuses on the core
functionalities we need, making sure they're tested and performant.
turf-erase has been renamed turf-difference to make its name more similar to the equivalents in other libraries.
Removed modules: merge, sum, min, max, average, median, variance, deviation, filter, remove, jenks, quantile.
See the upgrade guide below for replacements.
**Upgrading from v2**
**If you were using turf-merge**
turf-merge repeatedly called turf-union on an array of polygons. Here's
how to implement the same thing without the special module
```js
var clone = require('clone');
var union = require('turf-union');
function merge(polygons) {
var merged = clone(polygons.features[0]), features = polygons.features;
for (var i = 0, len = features.length; i < len; i++) {
var poly = features[i];
if (poly.geometry) merged = union(merged, poly);
}
return merged;
}
```
An alternative method that merges pairs of features recursively.
With large numbers and similar complexity of input geometries this can speed up run time by factor 10.
Choose depending on your use case.
```js
var union = require('turf-union');
function mergeBin(polygons) {
var features = polygons.features;
do {
var merged = [], len = features.length;
for (var i = 0; i < len-1; i += 2) {
merged.push(turf.union(features[i], features[i+1]));
}
if (len % 2 !== 0) {
merged.push(features[len-1]);
}
features = merged;
} while(features.length > 1);
return features[0];
}
```
**If you were using turf-sum, min, max, average, median, variance, deviation**
The `turf-collect` method provides the core of these statistical methods
and lets you bring your own statistical library, like `simple-statistics`,
`science.js`, or others.
For example, here's how to find the median of matched values with simple-statistics.
Finding other statistics, like variance, mean, and so on simply use other methods
from the statistics library.
```js
var ss = require('simple-statistics');
var turf = require('@turf/turf');
var poly1 = turf.polygon([[[0,0],[10,0],[10,10],[0,10],[0,0]]]);
var poly2 = turf.polygon([[[10,0],[20,10],[20,20],[20,0],[10,0]]]);
var polyFC = turf.featureCollection([poly1, poly2]);
var pt1 = turf.point([5,5], {population: 200});
var pt2 = turf.point([1,3], {population: 600});
var pt3 = turf.point([14,2], {population: 100});
var pt4 = turf.point([13,1], {population: 200});
var pt5 = turf.point([19,7], {population: 300});
var ptFC = turf.featureCollection([pt1, pt2, pt3, pt4, pt5]);
// collects values from matching points into an array called 'values'
var collected = turf.collect(polyFC, ptFC, 'population', 'values');
// finds the median of those values.
collected.features.forEach(function (feature) {
feature.properties.median = ss.median(feature.properties.values);
});
console.log(JSON.stringify(collected, null, 2));
```
**If you were using turf-filter, turf-remove**
These modules were thin wrappers around native JavaScript methods: use
[Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) instead:
```js
var filteredFeatures = features.filter(function(feature) {
return feature.properties.value > 10;
});
```
**If you were using turf-jenks, turf-quantile**
Use Array.map to get values, and then bring your own statistical calculation,
like simple-statistics or science.js.
```js
var values = features.map(function(feature) {
return feature.properties.value;
});
```
**If you were using turf-extent**
turf-extent's name was changed to turf-bbox. It is functionally the same.
```js
turf.bbox(poly) // [minx, miny, maxx, maxy]
```
# 2.0.0
* turf-grid renamed turf-point-grid (turf.grid => turf.pointGrid)
* turf-hex renamed turf-hex-grid (turf.hex => turf.hexGrid)
* turf-hex-grid now has a required `unit` parameter
* remove turf-isobands; use turf-isolines instead
* added turf-square-grid (turf.squareGrid)
* added turf-triangle-grid (turf.triangleGrid)
* constrain turf-point-grid to the bbox
# 1.4.0
* update all module dependencies to master
* add support for features in turf.intersection
* fix issues with turf.polygon coordinate wrapping inconsistencies
* add `unit` parameter to turf.concave
# 1.3.5
* harmonize turf-tin dependency tree
# 1.3.4
* fixes bug in turf-along
# 1.3.3
* added turf-line-slice for segmenting LineStrings with Points
* turf-point-on-line for calculating the closest Point from a Point to a LineString
# 1.3.2
* [tin ~7x faster](https://github.com/Turfjs/turf-tin/commit/595f732435b3b7bd977cdbe996bce60cbfc490e7)
* Fix mutability issues with `flip`, `erase`: data passed to Turf should
never be changed in place.
* added turf-line-distance for geodesic measuring of LineStrings
* added turf-along for calculating a the location of a Point x distance along a LineString
* added turf-area for calculating the area of a given feature
[along]: https://github.com/Turfjs/turf/tree/master/packages/turf-along
[area]: https://github.com/Turfjs/turf/tree/master/packages/turf-area
[bbox]: https://github.com/Turfjs/turf/tree/master/packages/turf-bbox
[bbox-clip]: https://github.com/Turfjs/turf/tree/master/packages/turf-bbox-clip
[bbox-polygon]: https://github.com/Turfjs/turf/tree/master/packages/turf-bbox-polygon
[bearing]: https://github.com/Turfjs/turf/tree/master/packages/turf-bearing
[bezier-spline]: https://github.com/Turfjs/turf/tree/master/packages/turf-bezier-spline
[boolean-clockwise]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-clockwise
[boolean-contains]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-contains
[boolean-crosses]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-crosses
[boolean-disjoint]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-disjoint
[boolean-equal]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-equal
[boolean-overlap]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-overlap
[boolean-parallel]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-parallel
[boolean-point-in-polygon]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-point-in-polygon
[boolean-point-on-line]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-point-on-line
[boolean-within]: https://github.com/Turfjs/turf/tree/master/packages/turf-boolean-within
[buffer]: https://github.com/Turfjs/turf/tree/master/packages/turf-buffer
[center]: https://github.com/Turfjs/turf/tree/master/packages/turf-center
[center-of-mass]: https://github.com/Turfjs/turf/tree/master/packages/turf-center-of-mass
[centroid]: https://github.com/Turfjs/turf/tree/master/packages/turf-centroid
[circle]: https://github.com/Turfjs/turf/tree/master/packages/turf-circle
[clean-coords]: https://github.com/Turfjs/turf/tree/master/packages/turf-clean-coords
[clone]: https://github.com/Turfjs/turf/tree/master/packages/turf-clone
[clusters]: https://github.com/Turfjs/turf/tree/master/packages/turf-clusters
[clusters-dbscan]: https://github.com/Turfjs/turf/tree/master/packages/turf-clusters-dbscan
[clusters-kmeans]: https://github.com/Turfjs/turf/tree/master/packages/turf-clusters-kmeans
[collect]: https://github.com/Turfjs/turf/tree/master/packages/turf-collect
[combine]: https://github.com/Turfjs/turf/tree/master/packages/turf-combine
[concave]: https://github.com/Turfjs/turf/tree/master/packages/turf-concave
[convex]: https://github.com/Turfjs/turf/tree/master/packages/turf-convex
[destination]: https://github.com/Turfjs/turf/tree/master/packages/turf-destination
[difference]: https://github.com/Turfjs/turf/tree/master/packages/turf-difference
[dissolve]: https://github.com/Turfjs/turf/tree/master/packages/turf-dissolve
[distance]: https://github.com/Turfjs/turf/tree/master/packages/turf-distance
[envelope]: https://github.com/Turfjs/turf/tree/master/packages/turf-envelope
[explode]: https://github.com/Turfjs/turf/tree/master/packages/turf-explode
[flatten]: https://github.com/Turfjs/turf/tree/master/packages/turf-flatten
[flip]: https://github.com/Turfjs/turf/tree/master/packages/turf-flip
[great-circle]: https://github.com/Turfjs/turf/tree/master/packages/turf-great-circle
[helpers]: https://github.com/Turfjs/turf/tree/master/packages/turf-helpers
[hex-grid]: https://github.com/Turfjs/turf/tree/master/packages/turf-hex-grid
[interpolate]: https://github.com/Turfjs/turf/tree/master/packages/turf-interpolate
[intersect]: https://github.com/Turfjs/turf/tree/master/packages/turf-intersect
[invariant]: https://github.com/Turfjs/turf/tree/master/packages/turf-invariant
[isobands]: https://github.com/Turfjs/turf/tree/master/packages/turf-isobands
[isolines]: https://github.com/Turfjs/turf/tree/master/packages/turf-isolines
[kinks]: https://github.com/Turfjs/turf/tree/master/packages/turf-kinks
[length]: https://github.com/Turfjs/turf/tree/master/packages/turf-length
[line-arc]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-arc
[line-chunk]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-chunk
[line-intersect]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-intersect
[line-offset]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-offset
[line-overlap]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-overlap
[line-segment]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-segment
[line-slice]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-slice
[line-slice-along]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-slice-along
[line-split]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-split
[line-to-polygon]: https://github.com/Turfjs/turf/tree/master/packages/turf-line-to-polygon
[mask]: https://github.com/Turfjs/turf/tree/master/packages/turf-mask
[meta]: https://github.com/Turfjs/turf/tree/master/packages/turf-meta
[midpoint]: https://github.com/Turfjs/turf/tree/master/packages/turf-midpoint
[nearest-point]: https://github.com/Turfjs/turf/tree/master/packages/turf-nearest-point
[nearest-point-on-line]: https://github.com/Turfjs/turf/tree/master/packages/turf-nearest-point-on-line
[nearest-point-to-line]: https://github.com/Turfjs/turf/tree/master/packages/turf-nearest-point-to-line
[planepoint]: https://github.com/Turfjs/turf/tree/master/packages/turf-planepoint
[point-grid]: https://github.com/Turfjs/turf/tree/master/packages/turf-point-grid
[point-on-feature]: https://github.com/Turfjs/turf/tree/master/packages/turf-point-on-feature
[point-to-line-distance]: https://github.com/Turfjs/turf/tree/master/packages/turf-point-to-line-distance
[points-within-polygon]: https://github.com/Turfjs/turf/tree/master/packages/turf-points-within-polygon
[polygon-tangents]: https://github.com/Turfjs/turf/tree/master/packages/turf-polygon-tangents
[polygon-to-line]: https://github.com/Turfjs/turf/tree/master/packages/turf-polygon-to-line
[polygonize]: https://github.com/Turfjs/turf/tree/master/packages/turf-polygonize
[projection]: https://github.com/Turfjs/turf/tree/master/packages/turf-projection
[random]: https://github.com/Turfjs/turf/tree/master/packages/turf-random
[rewind]: https://github.com/Turfjs/turf/tree/master/packages/turf-rewind
[rhumb-bearing]: https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-bearing
[rhumb-destination]: https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-destination
[rhumb-distance]: https://github.com/Turfjs/turf/tree/master/packages/turf-rhumb-distance
[sample]: https://github.com/Turfjs/turf/tree/master/packages/turf-sample
[sector]: https://github.com/Turfjs/turf/tree/master/packages/turf-sector
[shortest-path]: https://github.com/Turfjs/turf/tree/master/packages/turf-shortest-path
[simplify]: https://github.com/Turfjs/turf/tree/master/packages/turf-simplify
[square]: https://github.com/Turfjs/turf/tree/master/packages/turf-square
[square-grid]: https://github.com/Turfjs/turf/tree/master/packages/turf-square-grid
[tag]: https://github.com/Turfjs/turf/tree/master/packages/turf-tag
[tesselate]: https://github.com/Turfjs/turf/tree/master/packages/turf-tesselate
[tin]: https://github.com/Turfjs/turf/tree/master/packages/turf-tin
[transform-rotate]: https://github.com/Turfjs/turf/tree/master/packages/turf-transform-rotate
[transform-scale]: https://github.com/Turfjs/turf/tree/master/packages/turf-transform-scale
[transform-translate]: https://github.com/Turfjs/turf/tree/master/packages/turf-transform-translate
[triangle-grid]: https://github.com/Turfjs/turf/tree/master/packages/turf-triangle-grid
[truncate]: https://github.com/Turfjs/turf/tree/master/packages/turf-truncate
[union]: https://github.com/Turfjs/turf/tree/master/packages/turf-union
[unkink-polygon]: https://github.com/Turfjs/turf/tree/master/packages/turf-unkink-polygon
[voronoi]: https://github.com/Turfjs/turf/tree/master/packages/turf-voronoi
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2019 Morgan Herlocker
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================

======
[](https://github.com/Turfjs/turf/actions/workflows/ci.yml/badge.svg)
[![Version Badge][npm-img]][npm-url]
[![Gitter chat][gitter-img]][gitter-url]
[![Backers on Open Collective][oc-backer-badge]](#backers)
[![Sponsors on Open Collective][oc-sponsor-badge]](#sponsors) [](https://coveralls.io/github/Turfjs/turf)
[npm-img]: https://img.shields.io/npm/v/@turf/turf.svg
[npm-url]: https://www.npmjs.com/package/@turf/turf
[gitter-img]: https://badges.gitter.im/Turfjs/turf.svg
[gitter-url]: https://gitter.im/Turfjs/turf
[oc-backer-badge]: https://opencollective.com/turf/backers/badge.svg
[oc-sponsor-badge]: https://opencollective.com/turf/sponsors/badge.svg
***A modular geospatial engine written in JavaScript***
[Turf](https://turfjs.org) is a [JavaScript library](https://en.wikipedia.org/wiki/JavaScript_library) for [spatial analysis](https://en.wikipedia.org/wiki/Spatial_analysis). It includes traditional spatial operations, helper functions for creating [GeoJSON](https://geojson.org) data, and data classification and statistics tools. Turf can be added to your website as a client-side module, or you can [run Turf server-side](https://www.npmjs.com/package/@turf/turf) with [Node.js](https://nodejs.org/) (see below).
## Getting Started
Read our [getting started guide](https://turfjs.org/docs/getting-started) to begin working with Turf.
Or explore the Turf API and examples at [turfjs.org](https://turfjs.org/).
## Runtime support
Turf is currently published to work with any reasonably modern Javascript runtime.
Node is a first class citizen, and we recommend using an [Active or Maintenance LTS](https://nodejs.org/en/about/previous-releases) release.
Other runtimes, such as Deno or Bun, are not officially supported. We would be very interested to hear your experiences though.
## Browser support
Turf uses Babel to transpile to a JavaScript version usable by most
modern browsers. Any browser that matches the following criteria as defined by [Browserslist](https://github.com/browserslist/browserslist):
[> 0.25%, last 2 versions, fully supports es5, not dead](https://browsersl.ist/#q=%3E+0.25%25%2C+last+2+versions%2C+fully+supports+es5%2C+not+dead)
## Contributors
This project exists thanks to all the people who contribute. If you are interested in helping, check out the [Contributing Guide](docs/CONTRIBUTING.md).
<a href="https://github.com/Turfjs/turf/graphs/contributors"><img src="https://opencollective.com/turf/contributors.svg?width=890&button=false" /></a>
## Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/turf#backer)]
<a href="https://opencollective.com/turf#backers" target="_blank"><img src="https://opencollective.com/turf/backers.svg?width=890"></a>
## Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/turf#sponsor)]
<a href="https://opencollective.com/turf/sponsor/0/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/1/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/2/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/3/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/4/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/5/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/6/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/7/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/8/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/9/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/9/avatar.svg"></a>
================================================
FILE: docs/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[@morganherlocker](https://github.com/morganherlocker) or [@tmcw](https://github.com/tmcw).
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: docs/CONTRIBUTING.md
================================================
# Contributing to Turf
## Getting Started
One of the most important things you can do is report bugs. Please reference [how to report a bug](https://macwright.com/sites/polite.technology/reportabug) and when opening an [issue](https://github.com/Turfjs/turf/issues), follow the template.
To propose an enhancement for Turf, it's usually best to [start a discussion](https://github.com/Turfjs/turf/discussions) to work through the requirements. Unless you know exactly what you need! In which case [open an issue](https://github.com/Turfjs/turf/issues) to request it.
To make a code contribution, follow the steps for [how to contribute](#how-to-contribute).
## Architecture
- GeoJSON is the lingua franca of Turf. It should be used as the data structure for anything that can be represented as geography.
- Turf is broken into many submodules, or packages. These are found in the `packages` directory prefixed with "turf-".
- Turf packages are small, generally containing a single exported function.
- Many Turf packages depend on other lower level Turf packages.
## How to contribute
The best way for a new contributor to help with Turf is to find an open issue, fix it, and then share that back to the project via a pull request (PR). A maintainer will review your PR and get it merged with the rest of the code.
Here is a great article on how to fork a repo, and start contributing to Turf.
If you'd like to become a core contributor, just start making contributions, and inquire.
### Local Setup
Once you've cloned a Turf repository, and have a terminal open and currenty in the top-level turf directory. Run the following:
- `git checkout master` (if not already)
- `corepack enable pnpm`
- enable pnpm as a package manager. Requires Node 16+. Alternatively just `npm install -g pnpm`.
- `pnpm install`
- install dependencies and build packages
- `pnpm test`
- run all tests and linters
You're now ready to contribute.
<details>
<summary>Structure of a Turf package</summary>
<br>
Turf packages all live under the `packages` directory. For example `packages/turf-area`. Here's how they are structured.
```
turf-<PACKAGE NAME>
│ index.ts
│ bench.ts
│ test.ts
│ package.json
│ README.md
│ LICENSE
│
└───test
│
├───in
│ points.geojson
│
└───out
points.geojson
```
* `index.ts` - This file contains the definition of the function including [TypeScript](https://www.typescriptlang.org/) types, function implementation, the embedded [JSDocs](http://usejsdoc.org) documentation, and finally the single exported function that the package provides.
* `bench.ts` - This file uses [Benchmark](https://benchmarkjs.com/) to establish benchmark performance tests for your function.
* `test.ts` - This file includes your [tape](https://github.com/substack/tape)
unit tests. Tests can either be traditional code based tests, or tests that pull in data files and compare inputs to outputs (see below).
* `package.json` - The [node](http://nodejs.org) metadata container file.
Packages imported in `index.ts` should be listed here under `dependencies`,
and packages used in `test.ts` or `bench.ts` should be listed under
`devDependencies`.
* `README.md` - This README is generated _automatically_ by running `pnpm run
docs`. **DO NOT edit this file**.
* `LICENCE` - Like the README, this file should not be edited.
* `test/` - This directory holds the GeoJSON files that provide data for
dynamic tests. Input data in `./test/in`, and expected output data in `./test/out`.
</details>
<details>
<summary>Development tips</summary>
<br>
Work in a feature branch when possible
- `git checkout -b my-feature`
- Create it right away off of master.
- This allows you to keep your local master branch clean and in sync with the official remote. This will ease your ability to keep your local repo up to date with changes other people have made while you work on your feature.
As you make code changes
- Regularly run `pnpm test` in whatever package you are working in to avoid unintended bugs.
- Occasionally run `pnpm test` at the top-level directory to run test for all packages, to make sure you haven't introduced a problem that affects another package.
</details>
## Preparing a pull request
A simple, complete pull request is more likely to get merged.
<details>
<summary>But I don't know how</summary>
<br>
If you don't know how to make a solid PR, submit a draft PR and ask for feedback. Take on any feedback to improve the PR ready. There may be multiple rounds of feedback. While this seems tedious it greatly reduces the risk of someone else
having to revisit the same code any time soon.
</details>
### Pull Request Checklist
- Briefly summarize the need and solution. Link to the issue it's resolving if exists.
- Add tests. Even for bug fixes. A simple test case that reproduces the issue and demonstrates it's fixed.
- Update JSDoc comments if the function signature changes or docs need improvement (See for example `packages/turf-area/index.ts`)
- Run a full `npm test` at root level, confirming no cross-package issues. If you don't catch this now, the Github CI will.
### Guidelines
- Feel free to [ask](#getting-started) if a feature/enhancement is needed/wanted before doing the work.
- Keep pull requests small and focused.
- Avoid large dependencies at all costs.
- Make sure that your code can run in the browser (ie: don't make calls to external services, don't hit the filesystem, etc.).
### Documentation
The package README.md files and https://turfjs.org API docs are auto-generated from JSDoc comments in each packages' source file.
As a contributor, all you need to do is keep the JSDoc comments up to date, and the rest is automated. For example if you change a top-level Turf functions signature (params, return type) or just want to improve the descriptiveness of the docs.
JSDoc comments are found in the top-level index file for each package (for example `packages/turf-area/index.ts`). Look for the `@name`, `@params`, `@returns`, `@example` tags.
## Code Style
We have lots of tooling dedicated to ensuring consistent code. We use [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/), and [ESLint](https://eslint.org/) to help us deliver quality code. These are checked by the build system and should be enforced at commit time by [Husky](https://typicode.github.io/husky/#/).
Most packages are written in TypeScript, while a few plain Javascript still linger. You can generally use modern Javascript when modifying Turf itself as all exported code is transpiled to (currently es2017).
Code for consumption by browsers is transpiled by Babel as described in the README.
Making sure that the monorepo packages can be managed at scale, we use [Monorepolint](https://github.com/monorepolint/monorepolint) to programmatically ensure the individual packages remain consistent.
## Documentation
- API docs for each turf package are extracted from JSDoc comments in the source code into the top-level README.md files. README's are automatically updated on commit via a pre-commit hook.
Should you want to generate new README files manually, use `pnpm run docs`:
- **inside a package:** will generate the docs for that package.
- **from root folder:** will generate docs for all package.
### Documentation - Examples
**Builds docs for all packages**
```bash
$ cd ./turf
$ pnpm run docs
> @ docs /Users/mac/Github/turf
> node ./scripts/generate-readmes.mts
Building Docs: @turf/along
Building Docs: @turf/area
Building Docs: @turf/bbox-clip
Building Docs: @turf/bbox-polygon
Building Docs: @turf/bbox
Building Docs: @turf/bearing
Building Docs: @turf/bezier-spline
Building Docs: @turf/boolean-clockwise
....
```
Note: This should be automatically executed with a pre-commit hook when necessary
### Public website
The [turfjs.org](https://turfjs.org/) website is managed in a [separate repo](https://github.com/Turfjs/turf-www) with its own [contributing guide](https://github.com/Turfjs/turf-www/blob/master/CONTRIBUTING.md).
## Other Dependencies
- Turf uses [pnpm](https://pnpm.io/) and [lerna](https://lernajs.io/) during the testing, packaging and publishing process.
- Lerna will be automatically installed when you run `pnpm install` in the root directory.
- Pnpm will need to be installed on your computer, installers are available via the pnpm website. When using [corepack](https://nodejs.org/api/corepack.html), this is automatically installed when running `pnpm`.
## Financial contributions
We also welcome financial contributions in full transparency on our [open collective](https://opencollective.com/turf).
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
## Credits
### Contributors
Thank you to all the people who have already contributed to turf!
<a href="graphs/contributors"><img src="https://opencollective.com/turf/contributors.svg?width=890" /></a>
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/turf#backer)]
<a href="https://opencollective.com/turf#backers" target="_blank"><img src="https://opencollective.com/turf/backers.svg?width=890"></a>
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/turf#sponsor))
<a href="https://opencollective.com/turf/sponsor/0/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/1/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/2/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/3/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/4/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/5/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/6/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/7/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/8/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/turf/sponsor/9/website" target="_blank"><img src="https://opencollective.com/turf/sponsor/9/avatar.svg"></a>
================================================
FILE: docs/OPEN_COLLECTIVE.md
================================================
## About Turf.js
[TurfJS](http://turfjs.org/) is a modular geospatial analysis library designed for use in the browser as well as Node.js.
We provide almost 120 modules for people to use freely in their applications.
Our most [popular module](https://www.npmjs.com/package/@turf/helpers) is downloaded 4,200,000 times a week via npm.
## Why we're looking for support
TurfJS is a community-driven project maintained by a small group of core contributors who work on the project in their spare time.
Time is spent investigating issues, supporting users, improving documentation, fixing bugs, and adding new functionality.
Your funding will go directly to development costs, marketing campaigns, promotional events, and other expenses needed to maintain and promote TurfJS.
In particular, we're looking for corporate sponsors who use TurfJS in revenue-generating ways, either by creating applications for clients, or through use in an app used by customers.
Of course individuals are welcome to support us as well if TurfJS has helped you :)
## 2024 Achievements
- First major release in a few years
- Modernised build and publishing infrastructure
- Merged many PRs that had been on hold
- Resolved several long standing bugs
- Overhauled the [documentation website](https://turfjs.org)
## Goals for 2025
- Continue to work through the bug backlog
- Release more often
- Encourage more contributors by engaging with PRs
- Resolve disparities between planar and spherical modes
================================================
FILE: docs/PUBLISHING.md
================================================
## Publishing
### Prerelease
A [prerelease](https://github.com/Turfjs/turf/blob/master/.github/workflows/prerelease.yml) action is available that publishes a canary release for every commit or PR merged to the master branch. However, this action is only [enabled](https://github.com/Turfjs/turf/actions/workflows/prerelease.yml) when needed.
When used, it publishes an alpha release to NPM (e.g. `7.0.0-alpha.116` where 116 is the number of commits to master since the last release tag).
- The version number is calculated by a combination of the output of `git describe` and the `publish:prerelease` script in the root package.json. It is typically setup to do a `minor` prerelease, but can be changed, such as prior to a `major` release.
### Release
A turf release is initiated from your local computer, and then built and published remotely via a github actions.
To make a release as a core contributor, you will need:
- Turf repository write permission
- Turf npm organization publish permission
- A clean local copy of the Turf Github repository (not a fork!). Starting with a fresh clone will ensure it's clean.
- Depending on your auth method
- `git clone git@github.com:Turfjs/turf.git turf-release`
- or `git clone https://github.com/Turfjs/turf.git turf-release`
- `cd turf-release` - start at the top-level of the repo
- `pnpm install`
- `pnpm test` - make sure everything is passing
- If you choose to clean up an existing copy instead, be very careful:
- `git remote -v` - verify your remote origin points to `https://github.com/Turfjs/turf.git`
- `git checkout master`
- `git reset --hard` - reset your local working copy, will lose any uncommitted or unstashed work!
- `git fetch origin` - fetch latest commits
- `git rev-list master...origin/master` - verify local master in sync with remote, command output should be empty
- `pnpm install`
- `pnpm test` - make sure everything is passing
Before release:
- If necessary, make and merge a PR with any last minute housekeeping items.
- Turf's documentation (README.md files) should already be up to date as it is generated automatically on commit from JSDoc comments in source files.
- Review PR's and decide the new version number to be published. See [semantic versioning](https://semver.org/).
Run the following release commands, replacing `7.0.0` with your version number:
- create a release branch and switch to it. All building, tagging and publishing will be done on the release branch, and then merged back into master in a later step.
- `git checkout origin/master -b release-7.0.0`
- increment the version number of all packages, and create a local commit, without pushing to origin. This will also create a release tag.
- `pnpm lerna version --no-commit-hooks --no-push 7.0.0`
- Push the release branch and the release tag.
- `git push origin release-7.0.0 --follow-tags`
- Pushing the tag will trigger the Github [release](https://github.com/Turfjs/turf/blob/master/.github/workflows/release.yml) action which you can view the status of at - https://github.com/Turfjs/turf/actions. If successful, a new [version](https://www.npmjs.com/package/@turf/turf?activeTab=versions) of all turf packages will have been published on NPM.
- If the release action was not successful
- commit any changes to master to fix it.
- Make a [prerelease](#prerelease) if helpful to make sure the release action is successful.
- Then reset by deleting your tag and branch locally and remotely.
- `git push --delete origin v7.1.0`
- `git tag --delete v7.1.0`
- `git push -d origin release-7.0.0`
- `git branch -d release-7.0.0`
- Now redo the steps above starting with creating "A clean local copy of the Turf Github repository"
- If the release action was successful, now create a Pull Request for the release to merge back to master.
- You may be given a link in the output of the branch/tag push command to create the PR.
- If you don't get this message, just go to https://github.com/Turfjs/turf/pulls and you should be prompted at the top to create a PR for this new branch you just pushed.
- If that prompt doesn't appear, then just create a new pull request from the PR page and make sure the title is the version number e.g. `v7.0.0` and that it is merging your release branch -> to master.
- Here is an example PR - https://github.com/Turfjs/turf/pull/2615.
- Get approval for the release PR, then "Squash and merge" it.
- Do not delete this branch in Github after merging, the release tag points to it. If you do, click "Restore branch" at the bottom of the merged PR.
#### Follow-on steps
- As part of the release action, a draft Github release will have been created at https://github.com/Turfjs/turf/releases with an auto-generated changelog.
- Edit and add to the release notes for readability and completeness, specifically noting any breaking changes. Use past releases as a guide.
- Be sure to "Save draft" each time, then ask for a review or edits from other contributors.
- Try not to leave the notes unpublished more than a day, people rely on these notes for upgrading.
- Once ready, click `Publish release`. This will make the release notes publicly accessible and notify all watchers of the project.
- You can edit and republish your release notes after this, but that will likely notify followers, so best to get it right the first time.
- Release a new version of the [API docs](https://github.com/Turfjs/turf-www/blob/master/CONTRIBUTING.md) for the https://turfjs.org website.
================================================
FILE: docs/SECURITY.md
================================================
# Security Policy
## Supported Versions
Security updates are applied only to the latest release.
## Reporting a Vulnerability
If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
Please disclose it at [security advisory](https://github.com/Turfjs/turf/security/advisories/new).
This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure.
================================================
FILE: docs/SEE_ALSO.md
================================================
## Ports of Turf.js
Turf has been ported to several other languages, listed below.
- [Java](https://github.com/mapbox/mapbox-java/tree/master/services-turf/src/main/java/com/mapbox/turf) (Android, Java SE)
- > [The current to-do list for porting to Java](https://github.com/mapbox/mapbox-java/blob/master/docs/turf-port.md)
- [Kotlin Multiplatform](https://maplibre.org/spatial-k/) (JVM, Android, Native, JS, WASM)
- > [The current to-do list for porting to Kotlin](https://github.com/maplibre/spatial-k/issues?q=sort%3Aupdated-desc%20is%3Aissue%20is%3Aopen%20label%3A%22turf%20port%22)
- [Swift](https://github.com/mapbox/turf-swift/) (iOS, macOS, tvOS, watchOS, Linux)
- > Turf for Swift is **experimental** and its public API is subject to change. Please use with care.
- [Dart/Flutter](https://github.com/dartclub/turf_dart) (Dart Web, Dart Native; Flutter for iOS, Android, macOS, Windows, Linux, Web)
- > The Turf for Dart port is still in progress, the implementation status can be found in the [README](https://github.com/dartclub/turf_dart#components).
## Other Geospatial Analysis Software
Below are other geospatial options that aren't specifically ports of Turf.
### Python
* [Shapely](https://pypi.python.org/pypi/Shapely) is a friendly Python binding to GEOS
* [geopandas](https://geopandas.org/) is a layer on top of Shapely and Fiona for PostGIS-like tasks
### C++
* [GEOS](https://libgeos.org/) is a port of JTS to C++
### JavaScript
* [jsts](https://github.com/bjornharrtell/jsts) is a port of JTS to JavaScript
### Java
* [JTS](https://www.tsusiatsoftware.net/jts/main.html)
### Go
* [gogeos](https://paulsmith.github.io/gogeos/) is a Go binding to GEOS
* [go.geo](https://github.com/paulmach/go.geo) is a pure-Go implementation of some geometry operations and primitives
### Postgres
* [PostGIS](https://postgis.net/) provides geospatial operations within the Postgres database. Advanced operations rely on GEOS.
================================================
FILE: documentation.yml
================================================
toc:
Measurement:
- along
- area
- bbox
- bboxPolygon
- bearing
- center
- centerOfMass
- centroid
- destination
- distance
- envelope
- length
- midpoint
- pointOnFeature
- polygonTangents
- pointToLineDistance
- pointToPolygonDistance
- rhumbBearing
- rhumbDestination
- rhumbDistance
- square
- greatCircle
Coordinate Mutation:
- cleanCoords
- flip
- rewind
- round
- truncate
Transformation:
- bboxClip
- bezierSpline
- buffer
- circle
- clone
- concave
- convex
- difference
- dissolve
- intersect
- lineOffset
- polygonSmooth
- simplify
- tesselate
- transformRotate
- transformTranslate
- transformScale
- union
- voronoi
Feature Conversion:
- combine
- explode
- flatten
- lineToPolygon
- polygonize
- polygonToLine
Misc:
- kinks
- lineArc
- lineChunk
- lineIntersect
- lineOverlap
- lineSegment
- lineSlice
- lineSliceAlong
- lineSplit
- mask
- nearestPointOnLine
- sector
- shortestPath
- unkinkPolygon
Helper:
- featureCollection
- feature
- geometryCollection
- lineString
- multiLineString
- multiPoint
- multiPolygon
- point
- polygon
Random:
- randomPosition
- randomPoint
- randomLineString
- randomPolygon
Data:
- sample
Interpolation:
- interpolate
- isobands
- isolines
- planepoint
- tin
Joins:
- pointsWithinPolygon
- tag
Grids:
- hexGrid
- pointGrid
- squareGrid
- triangleGrid
Classification:
- nearestPoint
Aggregation:
- collect
- clustersDbscan
- clustersKmeans
Meta:
- coordAll
- coordEach
- coordReduce
- featureEach
- featureReduce
- flattenEach
- flattenReduce
- getCoord
- getCoords
- getGeom
- getType
- geomEach
- geomReduce
- propEach
- propReduce
- segmentEach
- segmentReduce
- getCluster
- clusterEach
- clusterReduce
Assertions:
- collectionOf
- containsNumber
- geojsonType
- featureOf
Booleans:
- booleanClockwise
- booleanConcave
- booleanContains
- booleanCrosses
- booleanDisjoint
- booleanEqual
- booleanIntersects
- booleanOverlap
- booleanParallel
- booleanPointInPolygon
- booleanPointOnLine
- booleanTouches
- booleanWithin
Unit Conversion:
- bearingToAzimuth
- azimuthToBearing
- convertArea
- convertLength
- degreesToRadians
- lengthToRadians
- lengthToDegrees
- radiansToLength
- radiansToDegrees
- toMercator
- toWgs84
paths:
GeoJSON: "https://tools.ietf.org/html/rfc7946#section-3"
GeoJsonProperties: "https://tools.ietf.org/html/rfc7946#section-3.2"
GeometryCollection: "https://tools.ietf.org/html/rfc7946#section-3.1.8"
Point: "https://tools.ietf.org/html/rfc7946#section-3.1.2"
Points: "https://tools.ietf.org/html/rfc7946#section-3.1.2"
(Multi)Point: "https://tools.ietf.org/html/rfc7946#section-3.1.2"
(Multi)Points: "https://tools.ietf.org/html/rfc7946#section-3.1.2"
(Multi)Point(s): "https://tools.ietf.org/html/rfc7946#section-3.1.2"
MultiPoint: "https://tools.ietf.org/html/rfc7946#section-3.1.3"
MultiPoints: "https://tools.ietf.org/html/rfc7946#section-3.1.3"
LineString: "https://tools.ietf.org/html/rfc7946#section-3.1.4"
LineStrings: "https://tools.ietf.org/html/rfc7946#section-3.1.4"
(Multi)LineString: "https://tools.ietf.org/html/rfc7946#section-3.1.4"
(Multi)LineStrings: "https://tools.ietf.org/html/rfc7946#section-3.1.4"
(Multi)LineString(s): "https://tools.ietf.org/html/rfc7946#section-3.1.4"
MultiLineString: "https://tools.ietf.org/html/rfc7946#section-3.1.5"
MultiLineStrings: "https://tools.ietf.org/html/rfc7946#section-3.1.5"
Polygon: "https://tools.ietf.org/html/rfc7946#section-3.1.6"
Polygons: "https://tools.ietf.org/html/rfc7946#section-3.1.6"
(Multi)Polygon: "https://tools.ietf.org/html/rfc7946#section-3.1.6"
(Multi)Polygons: "https://tools.ietf.org/html/rfc7946#section-3.1.6"
(Multi)Polygon(s): "https://tools.ietf.org/html/rfc7946#section-3.1.6"
MultiPolygon: "https://tools.ietf.org/html/rfc7946#section-3.1.7"
MultiPolygons: "https://tools.ietf.org/html/rfc7946#section-3.1.7"
Geometry: "https://tools.ietf.org/html/rfc7946#section-3.1"
Feature: "https://tools.ietf.org/html/rfc7946#section-3.2"
Features: "https://tools.ietf.org/html/rfc7946#section-3.3"
FeatureCollection: "https://tools.ietf.org/html/rfc7946#section-3.3"
Positon: "https://tools.ietf.org/html/rfc7946#section-3.1.1"
GeometryObject: "https://tools.ietf.org/html/rfc7946#section-3.1"
GeoJSONObject: "https://tools.ietf.org/html/rfc7946#section-3"
GeoJSONText: "https://tools.ietf.org/html/rfc7946#section-2"
BBox: "https://tools.ietf.org/html/rfc7946#section-5"
BoundingBox: "https://tools.ietf.org/html/rfc7946#section-5"
Coord: "https://tools.ietf.org/html/rfc7946#section-3.1.1"
================================================
FILE: eslint.config.mjs
================================================
import globals from "globals";
import js from "@eslint/js";
import tsEslint from "typescript-eslint";
import prettierRecommended from "eslint-plugin-prettier/recommended";
export default tsEslint.config(
js.configs.recommended,
tsEslint.configs.recommended,
{
ignores: [
"**/dist/**/*",
"**/node_modules",
"packages/turf/turf.js",
"packages/turf/turf.min.js",
"packages/turf/test.example.js",
],
},
{
plugins: {
"@typescript-eslint": tsEslint.plugin,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsEslint.parser,
ecmaVersion: 6,
sourceType: "module",
},
rules: {
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
},
],
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-var-requires": "off",
"no-constant-condition": "off",
"no-redeclare": "off",
"no-var": "off",
"prefer-const": "off",
},
},
{
files: ["packages/*/types.ts", "packages/*/test.ts"],
rules: {
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-unused-expressions": "off",
},
},
{
files: [
"**/.eslintrc.js",
"packages/*/bench.js",
"packages/*/test.js",
"packages/turf/rollup.config.js",
"scripts/check-dependencies.js",
],
languageOptions: {
globals: {
...globals.node,
},
},
},
prettierRecommended
);
================================================
FILE: examples/browser/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Browser</title>
<script src="https://unpkg.com/@turf/turf"></script>
</head>
<body>
<script>
console.log(turf.greatCircle([0, 0], [100, 10]));
console.log(turf.point([100, 0]));
console.log(turf.bbox(turf.point([100, 0])));
</script>
</body>
</html>
================================================
FILE: examples/create-react-app/.gitignore
================================================
build
================================================
FILE: examples/create-react-app/package.json
================================================
{
"private": true,
"name": "create-react-app",
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"dependencies": {
"react": "*",
"react-dom": "*",
"react-scripts": "*",
"@turf/turf": "*"
}
}
================================================
FILE: examples/create-react-app/public/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>React App</title>
</head>
<body></body>
</html>
================================================
FILE: examples/create-react-app/src/index.js
================================================
import { greatCircle, point } from "@turf/turf";
console.log(greatCircle([0, 0], [100, 10]));
console.log(point([100, 0]));
================================================
FILE: examples/es-modules/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ES Modules</title>
</head>
<body>
<script type="module">
import { point, greatCircle } from "https://unpkg.com/@turf/turf?module";
console.log(greatCircle([0, 0], [100, 10]));
console.log(point([100, 0]));
</script>
</body>
</html>
================================================
FILE: examples/es-modules-single-module/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>ES Modules - Single Module</title>
</head>
<body>
<script type="module">
import { point } from "https://unpkg.com/@turf/helpers?module";
console.log(point([100, 0]));
</script>
</body>
</html>
================================================
FILE: lerna.json
================================================
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"npmClient": "pnpm",
"version": "7.3.4",
"command": {
"publish": {
"registry": "https://registry.npmjs.org"
}
}
}
================================================
FILE: nx.json
================================================
{
"namedInputs": {
"default": [
"{workspaceRoot}/pnpm-lock.yaml",
"{workspaceRoot}/tsconfig.shared.json",
"{projectRoot}/package.json",
"{projectRoot}/tsconfig.json"
],
"sources": ["{projectRoot}/index.{js,ts}", "{projectRoot}/lib/**"]
},
"targetDefaults": {
"build": {
"dependsOn": ["^build"],
"inputs": [
"default",
"sources",
"{workspaceRoot}/tsup.config.ts",
"{projectRoot}/index.d.ts",
"{projectRoot}/rollup.config.cjs"
],
"outputs": ["{projectRoot}/dist"],
"cache": true
},
"test": {
"inputs": [
"default",
"sources",
"{projectRoot}/test.ts",
"{projectRoot}/test/**",
"{projectRoot}/types.ts"
],
"dependsOn": ["build"],
"cache": true
},
"last-checks": {
"inputs": ["default", "{projectRoot}/test.ts"],
"dependsOn": ["build", "^last-checks"],
"cache": true
}
}
}
================================================
FILE: package.json
================================================
{
"private": true,
"funding": "https://opencollective.com/turf",
"scripts": {
"docs": "node ./scripts/generate-readmes.mts",
"lint": "pnpm run /lint:.*/",
"lint:docs": "documentation lint packages/turf-*/index.js",
"lint:escheck-cjs": "es-check es8 packages/*/dist/cjs/index.cjs packages/turf/turf.min.js",
"lint:escheck-esm": "es-check --module es8 packages/*/dist/esm/index.js",
"lint:escheck-web": "es-check es5 packages/turf/turf.min.js",
"lint:eslint": "eslint packages",
"lint:mrl": "mrl check",
"lint:prettier": "prettier --check .",
"preinstall": "npx only-allow pnpm",
"prepare": "husky && lerna run build",
"test": "pnpm run lint && lerna run test && lerna run --scope @turf/turf last-checks"
},
"lint-staged": {
"package.json": [
"mrl check --paths"
],
"**/*.{js,ts}": [
"eslint --fix"
],
"packages/*/index.{js,ts}": [
"node ./scripts/generate-readmes.mts",
"git add ./packages/*/README.md"
],
"*": "prettier --write --ignore-unknown"
},
"packageManager": "pnpm@10.10.0+sha256.fa0f513aa8191764d2b6b432420788c270f07b4f999099b65bb2010eec702a30",
"devDependencies": {
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.31.0",
"@monorepolint/cli": "0.6.0-alpha.5",
"@monorepolint/config": "0.6.0-alpha.6",
"@monorepolint/core": "0.6.0-alpha.6",
"@monorepolint/rules": "0.6.0-alpha.6",
"@types/node": "22.15.3",
"acorn": "^8.14.1",
"camelcase": "^8.0.0",
"d3-queue": "*",
"decamelize": "^6.0.0",
"dependency-tree": "^11.1.1",
"documentation": "^14.0.3",
"es-check": "^9.0.0",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.3",
"esm": "^3.2.25",
"glob": "^11.1.0",
"globals": "^16.0.0",
"husky": "^9.1.7",
"lerna": "^9.0.3",
"lint-staged": "^15.5.1",
"load-json-file": "^7.0.1",
"meow": "^13.2.0",
"prettier": "^3.5.3",
"progress": "^2.0.3",
"tsup": "^8.4.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.38.0",
"yaml": "^2.8.2"
}
}
================================================
FILE: packages/turf/.gitignore
================================================
test.example.js
================================================
FILE: packages/turf/LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2017 TurfJS
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: packages/turf/README.md
================================================
# @turf/turf
# turf
Turf is a modular geospatial analysis engine written in JavaScript. It performs geospatial
processing tasks with GeoJSON data and can be run on a server or in a browser.
<!-- This file is automatically generated. Please don't edit it directly:
if you find an error, edit the source file (likely index.js), and re-run
./scripts/generate-readmes.mts in the turf project. -->
---
This module is part of the [Turfjs project](http://turfjs.org/), an open source
module collection dedicated to geographic algorithms. It is maintained in the
[Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create
PRs and issues.
### Installation
Install this module individually:
```sh
$ npm install @turf/turf
```
Or install the Turf module that includes it as a function:
```sh
$ npm install @turf/turf
```
================================================
FILE: packages/turf/babel.config.json
================================================
{
"presets": [
[
"@babel/preset-env",
{
"targets": "> 0.25%, last 2 versions, fully supports es5, not dead"
}
]
]
}
================================================
FILE: packages/turf/index.ts
================================================
/**
* Turf is a modular geospatial analysis engine written in JavaScript. It performs geospatial
* processing tasks with GeoJSON data and can be run on a server or in a browser.
*
* @module turf
* @summary Geospatial analysis for JavaScript
*/
export { along } from "@turf/along";
export { angle } from "@turf/angle";
export { area } from "@turf/area";
export { bbox } from "@turf/bbox";
export { bboxClip } from "@turf/bbox-clip";
export { bboxPolygon } from "@turf/bbox-polygon";
export { bearing } from "@turf/bearing";
export { bezierSpline } from "@turf/bezier-spline";
export { booleanClockwise } from "@turf/boolean-clockwise";
export { booleanConcave } from "@turf/boolean-concave";
export { booleanContains } from "@turf/boolean-contains";
export { booleanCrosses } from "@turf/boolean-crosses";
export { booleanDisjoint } from "@turf/boolean-disjoint";
export { booleanEqual } from "@turf/boolean-equal";
export { booleanIntersects } from "@turf/boolean-intersects";
export { booleanOverlap } from "@turf/boolean-overlap";
export { booleanParallel } from "@turf/boolean-parallel";
export { booleanPointInPolygon } from "@turf/boolean-point-in-polygon";
export { booleanPointOnLine } from "@turf/boolean-point-on-line";
export { booleanTouches } from "@turf/boolean-touches";
export { booleanValid } from "@turf/boolean-valid";
export { booleanWithin } from "@turf/boolean-within";
export { buffer } from "@turf/buffer"; // JSTS Module
export { center } from "@turf/center";
export { centerMean } from "@turf/center-mean";
export { centerMedian } from "@turf/center-median";
export { centerOfMass } from "@turf/center-of-mass";
export { centroid } from "@turf/centroid";
export { circle } from "@turf/circle";
export { cleanCoords } from "@turf/clean-coords";
export * from "@turf/clone";
export * from "@turf/clusters";
export * as clusters from "@turf/clusters";
export { clustersDbscan } from "@turf/clusters-dbscan";
export { clustersKmeans } from "@turf/clusters-kmeans";
export { collect } from "@turf/collect";
export { combine } from "@turf/combine";
export { concave } from "@turf/concave";
export { convex } from "@turf/convex";
export { destination } from "@turf/destination";
export { difference } from "@turf/difference";
export { dissolve } from "@turf/dissolve";
export { distance } from "@turf/distance";
export { distanceWeight } from "@turf/distance-weight";
export { ellipse } from "@turf/ellipse";
export { envelope } from "@turf/envelope";
export { explode } from "@turf/explode";
export { flatten } from "@turf/flatten";
export { flip } from "@turf/flip";
export { geojsonRbush } from "@turf/geojson-rbush";
export { greatCircle } from "@turf/great-circle";
export * from "@turf/helpers";
export * as helpers from "@turf/helpers";
export { hexGrid } from "@turf/hex-grid";
export { interpolate } from "@turf/interpolate";
export { intersect } from "@turf/intersect";
export * from "@turf/invariant";
export * as invariant from "@turf/invariant";
export { isobands } from "@turf/isobands";
export { isolines } from "@turf/isolines";
export { kinks } from "@turf/kinks";
export { length } from "@turf/length";
export { lineArc } from "@turf/line-arc";
export { lineChunk } from "@turf/line-chunk";
export { lineIntersect } from "@turf/line-intersect";
export { lineOffset } from "@turf/line-offset";
export { lineOverlap } from "@turf/line-overlap";
export { lineSegment } from "@turf/line-segment";
export { lineSlice } from "@turf/line-slice";
export { lineSliceAlong } from "@turf/line-slice-along";
export { lineSplit } from "@turf/line-split";
export { lineToPolygon } from "@turf/line-to-polygon";
export { mask } from "@turf/mask";
export * from "@turf/meta";
export * as meta from "@turf/meta";
export { midpoint } from "@turf/midpoint";
export { moranIndex } from "@turf/moran-index";
export * from "@turf/nearest-neighbor-analysis";
export { nearestPoint } from "@turf/nearest-point";
export { nearestPointOnLine } from "@turf/nearest-point-on-line";
export { nearestPointToLine } from "@turf/nearest-point-to-line";
export { planepoint } from "@turf/planepoint";
export { pointGrid } from "@turf/point-grid";
export { pointOnFeature } from "@turf/point-on-feature";
export { pointsWithinPolygon } from "@turf/points-within-polygon";
export { pointToLineDistance } from "@turf/point-to-line-distance";
export { pointToPolygonDistance } from "@turf/point-to-polygon-distance";
export { polygonize } from "@turf/polygonize";
export { polygonSmooth } from "@turf/polygon-smooth";
export { polygonTangents } from "@turf/polygon-tangents";
export { polygonToLine } from "@turf/polygon-to-line";
export * from "@turf/projection";
export * as projection from "@turf/projection";
export * from "@turf/quadrat-analysis";
export * from "@turf/random";
export * as random from "@turf/random";
export { rectangleGrid } from "@turf/rectangle-grid";
export { rewind } from "@turf/rewind";
export { rhumbBearing } from "@turf/rhumb-bearing";
export { rhumbDestination } from "@turf/rhumb-destination";
export { rhumbDistance } from "@turf/rhumb-distance";
export { sample } from "@turf/sample";
export { sector } from "@turf/sector";
export { shortestPath } from "@turf/shortest-path";
export { simplify } from "@turf/simplify";
export { square } from "@turf/square";
export { squareGrid } from "@turf/square-grid";
export { standardDeviationalEllipse } from "@turf/standard-deviational-ellipse";
export { tag } from "@turf/tag";
export { tesselate } from "@turf/tesselate";
export { tin } from "@turf/tin";
export { transformRotate } from "@turf/transform-rotate";
export { transformScale } from "@turf/transform-scale";
export { transformTranslate } from "@turf/transform-translate";
export { triangleGrid } from "@turf/triangle-grid";
export { truncate } from "@turf/truncate";
export { union } from "@turf/union";
export { unkinkPolygon } from "@turf/unkink-polygon";
export { voronoi } from "@turf/voronoi";
export { directionalMean } from "@turf/directional-mean";
================================================
FILE: packages/turf/package.json
================================================
{
"name": "@turf/turf",
"version": "7.3.4",
"description": "a JavaScript library for performing geospatial operations with GeoJSON",
"author": "Turf Authors",
"license": "MIT",
"bugs": {
"url": "https://github.com/Turfjs/turf/issues"
},
"homepage": "https://github.com/Turfjs/turf",
"repository": {
"type": "git",
"url": "git://github.com/Turfjs/turf.git"
},
"funding": "https://opencollective.com/turf",
"publishConfig": {
"access": "public"
},
"keywords": [
"gis",
"geo",
"geojs",
"geospatial",
"geography",
"geometry",
"map",
"contour",
"centroid",
"tin",
"extent",
"geojson",
"grid",
"polygon",
"line",
"point",
"area",
"analysis",
"statistics",
"stats",
"midpoint",
"plane",
"quantile",
"jenks",
"sample"
],
"type": "module",
"main": "dist/cjs/index.cjs",
"module": "dist/esm/index.js",
"types": "dist/esm/index.d.ts",
"exports": {
"./package.json": "./package.json",
".": {
"import": {
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/cjs/index.d.cts",
"default": "./dist/cjs/index.cjs"
}
}
},
"browser": "turf.min.js",
"sideEffects": false,
"files": [
"dist",
"turf.min.js"
],
"scripts": {
"build": "tsup --config ../../tsup.config.ts && rollup -c rollup.config.js",
"last-checks": "pnpm run last-checks:testjs && pnpm run last-checks:example",
"last-checks:example": "tsx test.example.js",
"last-checks:testjs": "tsx test.ts",
"test": "echo '@turf/turf tests run in the last-checks step'"
},
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/preset-env": "^7.26.9",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^28.0.3",
"@rollup/plugin-node-resolve": "^16.0.1",
"@rollup/plugin-terser": "^0.4.4",
"@types/tape": "^5.8.1",
"camelcase": "^8.0.0",
"documentation": "^14.0.3",
"glob": "^11.1.0",
"rollup": "^4.40.1",
"rollup-plugin-polyfill-node": "^0.13.0",
"tape": "^5.9.0",
"tsup": "^8.4.0",
"tsx": "^4.19.4",
"typescript": "^5.8.3"
},
"dependencies": {
"@turf/along": "workspace:*",
"@turf/angle": "workspace:*",
"@turf/area": "workspace:*",
"@turf/bbox": "workspace:*",
"@turf/bbox-clip": "workspace:*",
"@turf/bbox-polygon": "workspace:*",
"@turf/bearing": "workspace:*",
"@turf/bezier-spline": "workspace:*",
"@turf/boolean-clockwise": "workspace:*",
"@turf/boolean-concave": "workspace:*",
"@turf/boolean-contains": "workspace:*",
"@turf/boolean-crosses": "workspace:*",
"@turf/boolean-disjoint": "workspace:*",
"@turf/boolean-equal": "workspace:*",
"@turf/boolean-intersects": "workspace:*",
"@turf/boolean-overlap": "workspace:*",
"@turf/boolean-parallel": "workspace:*",
"@turf/boolean-point-in-polygon": "workspace:*",
"@turf/boolean-point-on-line": "workspace:*",
"@turf/boolean-touches": "workspace:*",
"@turf/boolean-valid": "workspace:*",
"@turf/boolean-within": "workspace:*",
"@turf/buffer": "workspace:*",
"@turf/center": "workspace:*",
"@turf/center-mean": "workspace:*",
"@turf/center-median": "workspace:*",
"@turf/center-of-mass": "workspace:*",
"@turf/centroid": "workspace:*",
"@turf/circle": "workspace:*",
"@turf/clean-coords": "workspace:*",
"@turf/clone": "workspace:*",
"@turf/clusters": "workspace:*",
"@turf/clusters-dbscan": "workspace:*",
"@turf/clusters-kmeans": "workspace:*",
"@turf/collect": "workspace:*",
"@turf/combine": "workspace:*",
"@turf/concave": "workspace:*",
"@turf/convex": "workspace:*",
"@turf/destination": "workspace:*",
"@turf/difference": "workspace:*",
"@turf/directional-mean": "workspace:*",
"@turf/dissolve": "workspace:*",
"@turf/distance": "workspace:*",
"@turf/distance-weight": "workspace:*",
"@turf/ellipse": "workspace:*",
"@turf/envelope": "workspace:*",
"@turf/explode": "workspace:*",
"@turf/flatten": "workspace:*",
"@turf/flip": "workspace:*",
"@turf/geojson-rbush": "workspace:*",
"@turf/great-circle": "workspace:*",
"@turf/helpers": "workspace:*",
"@turf/hex-grid": "workspace:*",
"@turf/interpolate": "workspace:*",
"@turf/intersect": "workspace:*",
"@turf/invariant": "workspace:*",
"@turf/isobands": "workspace:*",
"@turf/isolines": "workspace:*",
"@turf/kinks": "workspace:*",
"@turf/length": "workspace:*",
"@turf/line-arc": "workspace:*",
"@turf/line-chunk": "workspace:*",
"@turf/line-intersect": "workspace:*",
"@turf/line-offset": "workspace:*",
"@turf/line-overlap": "workspace:*",
"@turf/line-segment": "workspace:*",
"@turf/line-slice": "workspace:*",
"@turf/line-slice-along": "workspace:*",
"@turf/line-split": "workspace:*",
"@turf/line-to-polygon": "workspace:*",
"@turf/mask": "workspace:*",
"@turf/meta": "workspace:*",
"@turf/midpoint": "workspace:*",
"@turf/moran-index": "workspace:*",
"@turf/nearest-neighbor-analysis": "workspace:*",
"@turf/nearest-point": "workspace:*",
"@turf/nearest-point-on-line": "workspace:*",
"@turf/nearest-point-to-line": "workspace:*",
"@turf/planepoint": "workspace:*",
"@turf/point-grid": "workspace:*",
"@turf/point-on-feature": "workspace:*",
"@turf/point-to-line-distance": "workspace:*",
"@turf/point-to-polygon-distance": "workspace:*",
"@turf/points-within-polygon": "workspace:*",
"@turf/polygon-smooth": "workspace:*",
"@turf/polygon-tangents": "workspace:*",
"@turf/polygon-to-line": "workspace:*",
"@turf/polygonize": "workspace:*",
"@turf/projection": "workspace:*",
"@turf/quadrat-analysis": "workspace:*",
"@turf/random": "workspace:*",
"@turf/rectangle-grid": "workspace:*",
"@turf/rewind": "workspace:*",
"@turf/rhumb-bearing": "workspace:*",
"@turf/rhumb-destination": "workspace:*",
"@turf/rhumb-distance": "workspace:*",
"@turf/sample": "workspace:*",
"@turf/sector": "workspace:*",
"@turf/shortest-path": "workspace:*",
"@turf/simplify": "workspace:*",
"@turf/square": "workspace:*",
"@turf/square-grid": "workspace:*",
"@turf/standard-deviational-ellipse": "workspace:*",
"@turf/tag": "workspace:*",
"@turf/tesselate": "workspace:*",
"@turf/tin": "workspace:*",
"@turf/transform-rotate": "workspace:*",
"@turf/transform-scale": "workspace:*",
"@turf/transform-translate": "workspace:*",
"@turf/triangle-grid": "workspace:*",
"@turf/truncate": "workspace:*",
"@turf/union": "workspace:*",
"@turf/unkink-polygon": "workspace:*",
"@turf/voronoi": "workspace:*",
"@types/geojson": "^7946.0.10",
"@types/kdbush": "^3.0.5",
"tslib": "^2.8.1"
}
}
================================================
FILE: packages/turf/rollup.config.js
================================================
import { babel } from "@rollup/plugin-babel";
import { readFileSync } from "fs";
import commonjs from "@rollup/plugin-commonjs";
import nodePolyfills from "rollup-plugin-polyfill-node";
import nodeResolve from "@rollup/plugin-node-resolve";
import terser from "@rollup/plugin-terser";
const pckg = JSON.parse(readFileSync("./package.json", "utf-8"));
const input = "index.ts";
export default [
{
input,
output: [{ file: pckg.browser, format: "umd", name: "turf" }],
plugins: [
commonjs(),
nodeResolve(),
nodePolyfills(),
babel({ babelHelpers: "bundled" }),
terser(),
],
},
];
================================================
FILE: packages/turf/test.ts
================================================
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import { glob } from "glob";
import test from "tape";
import camelCase from "camelcase";
import * as documentation from "documentation";
import * as turf from "./index.js";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
// Helpers
const directory = path.join(__dirname, "..");
let modules = [];
for (const name of fs.readdirSync(directory)) {
if (!name.includes("turf")) continue;
const pckgPath = path.join(directory, name, "package.json");
if (!fs.existsSync(pckgPath)) continue;
const pckg = JSON.parse(fs.readFileSync(pckgPath));
let mainFile = path.join(directory, name, pckg.main);
if (!fs.existsSync(mainFile)) {
mainFile += ".js";
}
const index = fs.readFileSync(mainFile, "utf8");
// Cater for JS or TS test files.
const test = fs.existsSync(path.join(directory, name, "test.ts"))
? fs.readFileSync(path.join(directory, name, "test.ts"), "utf8")
: fs.readFileSync(path.join(directory, name, "test.js"), "utf8");
modules.push({
name,
pckg,
index,
test,
dir: path.join(directory, name),
dependencies: pckg.dependencies || {},
devDependencies: pckg.devDependencies || {},
});
}
// Exclude main Turf module
modules = modules.filter(({ name }) => name !== "turf");
test("turf -- invalid dependencies", (t) => {
for (const { name, dependencies, devDependencies } of modules) {
for (const invalidDependency of [
"load-json-file",
"write-json-file",
"tape",
"benchmark",
"glob",
"lerna",
"documentation",
"uglify-js",
]) {
if (dependencies[invalidDependency])
t.fail(
`${name} ${invalidDependency} should be defined as devDependencies`
);
}
if (devDependencies["eslint"] || devDependencies["eslint-config-mourner"])
t.fail(`${name} eslint is handled at the root level`);
if (devDependencies["@turf/helpers"])
t.fail(
`${name} @turf/helpers should be located in Dependencies instead of DevDependencies`
);
// if (devDependencies['mkdirp']) t.fail(`${name} tests should not have to create folders`);
}
t.skip('remove "mkdirp" from testing');
t.end();
});
test("turf -- strict version dependencies", (t) => {
for (const { name, dependencies } of modules) {
if (dependencies["jsts"]) t.fail(name + " jsts must use turf-jsts");
if (dependencies["jsts-es"]) t.fail(name + " jsts-es must use turf-jsts");
}
t.end();
});
test("turf -- duplicate dependencies", (t) => {
for (const { name, dependencies, devDependencies } of modules) {
for (const dependency of Object.keys(dependencies)) {
if (devDependencies[dependency])
t.fail(`${name} ${dependency} is duplicated in devDependencies`);
}
}
t.end();
});
test("turf -- check if files exists", (t) => {
for (const { name, dir, pckg } of modules) {
const { files } = pckg;
if (!files || !files.length)
t.fail(`${name} (files) must be included in package.json`);
for (const file of files) {
// ignore Rollup bundle
if (file === "main.js") continue;
if (file === "main.es.js") continue;
if (file === "index.d.ts") continue;
if (!fs.existsSync(path.join(dir, file)))
t.fail(`${name} missing file ${file} in "files"`);
}
}
t.end();
});
test("turf -- external files must be in the lib folder", (t) => {
for (const { pckg } of modules) {
const { files } = pckg;
for (const file of files) {
switch (file) {
case "main.js":
case "main.es.js":
case "index.js":
case "index.ts":
case "index.mjs":
case "index.d.ts":
case "lib":
break;
default:
// t.fail(`${name} external files must be in the lib folder`)
}
}
}
t.end();
});
test("turf -- MIT license", (t) => {
const text = fs.readFileSync(path.join(__dirname, "LICENSE"), "utf8");
for (const { name, dir, pckg } of modules) {
const { license } = pckg;
if (license !== "MIT") t.fail(`${name} (license) must be "MIT"`);
if (fs.readFileSync(path.join(dir, "LICENSE"), "utf8") !== text)
t.fail(`${name} (LICENSE) content is different from @turf/turf`);
}
t.end();
});
test("turf -- contributors", (t) => {
for (const { name, pckg } of modules) {
for (const contributor of pckg.contributors || []) {
if (!contributor.match(/<@.+>/))
t.fail(
`${name} ${contributor} (contributors) should use "Full Name <@GitHub>"`
);
}
}
t.end();
});
test("turf -- scoped package name", (t) => {
for (const { name, pckg } of modules) {
const expected = name.replace("turf-", "@turf/");
if (pckg.name !== expected)
t.fail(`${name} (name) must use ${expected} in package.json`);
}
t.end();
});
test("turf -- pre-defined attributes in package.json", (t) => {
for (const { name, pckg } of modules) {
if (pckg.author !== "Turf Authors")
t.fail(name + ' (author) should be "Turf Authors"');
// if (pckg.main !== 'main.js') t.skip(`${name} (main) must be "main.js" in package.json`);
// if (pckg.module !== 'main.es.js') t.skip(`${name} (module) must be "main.es.js" in package.json`);
if (pckg["jsnext:main"])
t.fail(
`${name} (jsnext:main) is no longer required in favor of using (module) in package.json`
);
// if (pckg.types !== 'index.d.ts') t.fail(`${name} (types) must be "index.d.ts" in package.json`);
if (!pckg.bugs || pckg.bugs.url !== "https://github.com/Turfjs/turf/issues")
t.fail(
`${name} (bugs.url) must be "https://github.com/Turfjs/turf/issues" in package.json`
);
if (pckg.homepage !== "https://github.com/Turfjs/turf")
t.fail(
`${name} (homepage) must be "https://github.com/Turfjs/turf" in package.json`
);
}
t.end();
});
test("turf -- parsing dependencies from index.js", (t) => {
for (const { name, dependencies, index } of modules) {
// Read Depedencies from index.js
const dependenciesUsed = new Set();
for (const dependency of index.match(/(require\(|from )'[@/a-z-\d]+'/gi) ||
[]) {
if (dependency.includes("jsts")) continue;
const dependencyName = dependency.split(/'/)[1];
if (!dependencies[dependencyName])
t.skip(`${name} ${dependencyName} is missing from dependencies`);
if (dependenciesUsed.has(dependencyName))
t.skip(`${name} ${dependencyName} is duplicated in index.js`);
dependenciesUsed.add(dependencyName);
}
// Read Dependencies from package.json
for (const dependencyName of Object.keys(dependencies)) {
// Ignore @turf/helpers since it could be used in Typescript definition
switch (dependencyName) {
case "@turf/helpers":
case "@turf/invariant":
case "@turf/meta":
case "jsts":
case "rbush":
case "topojson-client":
case "topojson-server":
continue;
}
if (!dependenciesUsed.has(dependencyName))
t.skip(`${name} ${dependencyName} is not required in index.js`);
}
}
t.end();
});
// Test for missing modules
test("turf -- missing modules", (t) => {
const files = {
typescript: fs.readFileSync(path.join(__dirname, "dist/cjs/index.d.cts")),
modules: fs.readFileSync(path.join(__dirname, "dist/cjs/index.cjs")),
};
modules.forEach(({ name }) => {
name = camelCase(name.replace("turf-", ""));
// name exception with linestring => lineString
name = name
.replace("linestring", "lineString")
.replace("Linestring", "LineString");
// if (!files.typescript.includes(name)) t.skip(name + ' is missing from index.d.ts');
if (!files.modules.includes(name))
t.skip(name + " is missing from index.js");
switch (typeof turf[name]) {
case "function":
break;
case "object":
break;
case "undefined":
t.skip(name + " is missing from index.js");
}
});
t.end();
});
const deprecated = {
modules: [
"@turf/idw",
"@turf/line-distance",
"@turf/point-on-line",
"@turf/bezier",
"@turf/within",
"@turf/inside",
"@turf/nearest",
"@turf/polygon-to-linestring",
"@turf/linestring-to-polygon",
"@turf/point-on-surface",
],
methods: [
"radians2degrees",
"degrees2radians",
"distanceToDegrees",
"distanceToRadians",
"radiansToDistance",
"bearingToAngle",
"convertDistance",
],
};
test("turf -- check for deprecated modules", (t) => {
for (const { name, dependencies, devDependencies } of modules) {
for (const dependency of [
...Object.keys(dependencies),
...Object.keys(devDependencies),
]) {
if (deprecated.modules.indexOf(dependency) !== -1) {
throw new Error(
`${name} module has deprecated dependency ${dependency}`
);
}
}
}
t.end();
});
test("turf -- check for deprecated methods", (t) => {
for (const { name, index, test } of modules) {
// Exclude @turf/helpers from this test
if (name === "turf-helpers") continue;
for (const method of deprecated.methods) {
if ((test + index).match(method))
throw new Error(`${name} repo has deprecated method ${method}`);
}
}
t.end();
});
// TurfJS v5.0 Typescript definition uses @turf/helpers
test("turf -- update to newer Typescript definitions", (t) => {
glob.sync(turfTypescriptPath).forEach((filepath) => {
const typescript = fs.readFileSync(filepath, "utf8");
if (typescript.includes('reference types="geojson"'))
t.skip(filepath + " update Typescript definition v5.0");
});
t.end();
});
// test('turf -- require() not allowed in favor of import', t => {
// for (const {name, index, test} of modules) {
// if ((index).includes('= require(')) throw new Error(`${name} module cannot use require(), use ES import instead`);
// }
// t.end();
// });
/**
* =========================
* Builds => test.example.js
* =========================
* will be run as `posttest`
*/
// File Paths
const testFilePath = path.join(__dirname, "test.example.js");
const turfModulesPath = path.join(__dirname, "..", "turf-*", "index.js");
const turfTypescriptPath = path.join(__dirname, "..", "turf-*", "index.d.ts");
// Test Strings
const requireString = `import test from 'tape';
import * as turf from './dist/esm/index.js';
`;
/**
* Generate Test String
*
* @param {Object} turfFunction Documentation function object
* @param {Object} example Documentation example object
* @returns {string} Test String
*/
function testString(turfFunction, example) {
const turfName = turfFunction.name;
const testFunctionName = turfName + "Test";
// New modules will be excluded from tests
if (!turf[turfName])
return `
test('turf-example-${turfName}', t => {
t.skip('${turfName}');
t.end();
});
`;
// Specific moduels will exclude testing @example
switch (turfName) {
case "isolines":
case "isobands":
return `
test('turf-example-${turfName}', t => {
t.skip('${turfName}');
t.end();
});
`;
}
return `
test('turf-example-${turfName}', t => {
const ${testFunctionName} = () => {
${example.description}
}
${testFunctionName}();
t.pass('${turfName}');
t.end();
});
`;
}
// Iterate over each module and retrieve @example to build tests from them
glob(turfModulesPath).then((files) => {
// Read each JSDocs from index.js files
documentation.build(files, {}).then((turfFunctions) => {
// Write header of test.js
const writeableStream = fs.createWriteStream(testFilePath);
writeableStream.write(requireString);
writeableStream.on("error", (err) => {
throw err;
});
// Retrieve @example
turfFunctions.forEach((turfFunction) => {
if (turfFunction.examples) {
// Save to test.js
turfFunction.examples.forEach((example) => {
writeableStream.write(testString(turfFunction, example));
});
}
});
writeableStream.end();
});
});
================================================
FILE: packages/turf/tsconfig.json
================================================
{
"extends": "../../tsconfig.shared.json"
}
================================================
FILE: packages/turf-along/LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2017 TurfJS
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: packages/turf-along/README.md
================================================
# @turf/along
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
## along
Takes a [LineString][1] and returns a [Point][2] at a specified distance along the line.
### Parameters
* `line` **([Feature][3]<[LineString][1]> | [LineString][1])** input line
* `distance` **[number][4]** distance along the line
* `options` **[Object][5]?** Optional parameters (optional, default `{}`)
* `options.units` **Units** Supports all valid Turf [Units][6]. (optional, default `"kilometers"`)
### Examples
```javascript
var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);
var options = {units: 'miles'};
var along = turf.along(line, 200, options);
//addToMap
var addToMap = [along, line]
```
Returns **[Feature][3]<[Point][2]>** Point `distance` `units` along the line
[1]: https://tools.ietf.org/html/rfc7946#section-3.1.4
[2]: https://tools.ietf.org/html/rfc7946#section-3.1.2
[3]: https://tools.ietf.org/html/rfc7946#section-3.2
[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[6]: https://turfjs.org/docs/api/types/Units
<!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
---
This module is part of the [Turfjs project](https://turfjs.org/), an open source module collection dedicated to geographic algorithms. It is maintained in the [Turfjs/turf](https://github.com/Turfjs/turf) repository, where you can create PRs and issues.
### Installation
Install this single module individually:
```sh
$ npm install @turf/along
```
Or install the all-encompassing @turf/turf module that includes all modules as functions:
```sh
$ npm install @turf/turf
```
================================================
FILE: packages/turf-along/bench.ts
================================================
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import Benchmark from "benchmark";
import { along } from "./index.js";
import { Feature, LineString } from "geojson";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const line: Feature<LineString> = {
type: "Feature",
properties: {},
geometry: {
type: "LineString",
coordinates: [
[-77.0316696166992, 38.878605901789236],
[-77.02960968017578, 38.88194668656296],
[-77.02033996582031, 38.88408470638821],
[-77.02566146850586, 38.885821800123196],
[-77.02188491821289, 38.88956308852534],
[-77.01982498168944, 38.89236892551996],
],
},
};
const route = JSON.parse(
fs.readFileSync(__dirname + "/test/fixtures/route.geojson").toString()
);
const suite = new Benchmark.Suite("turf-along");
suite
.add("turf-along", function () {
along(line, 1, { units: "miles" });
})
.add("turf-along#route 1 mile", function () {
along(route, 1, { units: "miles" });
})
.add("turf-along#route 10 miles", function () {
along(route, 10, { units: "miles" });
})
.add("turf-along#route 50 miles", function () {
along(route, 50, { units: "miles" });
})
.add("turf-along#route 100 miles", function () {
along(route, 100, { units: "miles" });
})
.on("cycle", function (event) {
console.log(String(event.target));
})
.run();
================================================
FILE: packages/turf-along/index.ts
================================================
import { Feature, LineString, Point } from "geojson";
import { bearing } from "@turf/bearing";
import { destination } from "@turf/destination";
import { distance as measureDistance } from "@turf/distance";
import { point, Units } from "@turf/helpers";
import { getGeom } from "@turf/invariant";
/**
* Takes a {@link LineString} and returns a {@link Point} at a specified distance along the line.
*
* @function
* @param {Feature<LineString>|LineString} line input line
* @param {number} distance distance along the line
* @param {Object} [options] Optional parameters
* @param {Units} [options.units="kilometers"] Supports all valid Turf {@link https://turfjs.org/docs/api/types/Units Units}.
* @returns {Feature<Point>} Point `distance` `units` along the line
* @example
* var line = turf.lineString([[-83, 30], [-84, 36], [-78, 41]]);
* var options = {units: 'miles'};
*
* var along = turf.along(line, 200, options);
*
* //addToMap
* var addToMap = [along, line]
*/
function along(
line: Feature<LineString> | LineString,
distance: number,
options: { units?: Units } = {}
): Feature<Point> {
// Get Coords
const geom = getGeom(line);
const coords = geom.coordinates;
let travelled = 0;
for (let i = 0; i < coords.length; i++) {
if (distance >= travelled && i === coords.length - 1) {
break;
} else if (travelled >= distance) {
const overshot = distance - travelled;
if (!overshot) {
return point(coords[i]);
} else {
const direction = bearing(coords[i], coords[i - 1]) - 180;
const interpolated = destination(
coords[i],
overshot,
direction,
options
);
return interpolated;
}
} else {
travelled += measureDistance(coords[i], coords[i + 1], options);
}
}
return point(coords[coords.length - 1]);
}
export { along };
export default along;
================================================
FILE: packages/turf-along/package.json
================================================
{
"name": "@turf/along",
"version": "7.3.4",
"description": "Calculates a point along a line at a specific distance",
"author": "Turf Authors",
"license": "MIT",
"bugs": {
"url": "https://github.com/Turfjs/turf/issues"
},
"homepage": "https://github.com/Turfjs/turf",
"repository": {
"type": "git",
"url": "git://github.com/Turfjs/turf.git"
},
"funding": "https://opencollective.com/turf",
"publishConfig": {
"access": "public"
},
"keywords": [
"along",
"line",
"linestring",
"turf",
"distance"
],
"type": "module",
"main": "dist/cjs/index.cjs",
"module": "dist/esm/index.js",
"types": "dist/esm/index.d.ts",
"exports": {
"./package.json": "./package.json",
".": {
"import": {
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/cjs/index.d.cts",
"default": "./dist/cjs/index.cjs"
}
}
},
"sideEffects": false,
"files": [
"dist"
],
"scripts": {
"bench": "tsx bench.ts",
"build": "tsup --config ../../tsup.config.ts",
"test": "pnpm run /test:.*/",
"test:tape": "tsx test.ts"
},
"devDependencies": {
"@types/benchmark": "^2.1.5",
"@types/tape": "^5.8.1",
"benchmark": "^2.1.4",
"load-json-file": "^7.0.1",
"tape": "^5.9.0",
"tsup": "^8.4.0",
"tsx": "^4.19.4",
"typescript": "^5.8.3"
},
"dependencies": {
"@turf/bearing": "workspace:*",
"@turf/destination": "workspace:*",
"@turf/distance": "workspace:*",
"@turf/helpers": "workspace:*",
"@turf/invariant": "workspace:*",
"@types/geojson": "^7946.0.10",
"tslib": "^2.8.1"
}
}
================================================
FILE: packages/turf-along/test/fixtures/dc-line.geojson
================================================
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[-77.0316696166992, 38.878605901789236],
[-77.02960968017578, 38.88194668656296],
[-77.02033996582031, 38.88408470638821],
[-77.02566146850586, 38.885821800123196],
[-77.02188491821289, 38.88956308852534],
[-77.01982498168944, 38.89236892551996],
[-77.02291488647461, 38.89370499941828],
[-77.02291488647461, 38.89958342598271],
[-77.01896667480469, 38.90011780426885],
[-77.01845169067383, 38.90733151751689],
[-77.02291488647461, 38.907865837489105],
[-77.02377319335936, 38.91200668090932],
[-77.02995300292969, 38.91254096569048],
[-77.03338623046875, 38.91708222394378],
[-77.03784942626953, 38.920821865485834],
[-77.03115463256836, 38.92830055730587],
[-77.03596115112305, 38.931505469602044]
]
}
}
================================================
FILE: packages/turf-along/test/fixtures/dc-points.geojson
================================================
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.0316696166992, 38.87406218243845]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.02325820922852, 38.885688179036094]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.0222282409668, 38.89744587262311]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.02377319335936, 38.910804525446686]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.02840805053711, 38.91441093075183]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.02840805053711, 38.92402711565758]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.04008102416992, 38.932707274379595]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-76.99390411376953, 38.91387666004744]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.03269958496094, 38.898648254305215]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-77.02342987060545, 38.870587377511235]
}
}
]
}
================================================
FILE: packages/turf-along/test/fixtures/route.geojson
================================================
{
"type": "Feature",
"properties": {
"name": null,
"cmt": null,
"desc": null,
"src": null,
"link1_href": null,
"link1_text": null,
"link1_type": null,
"link2_href": null,
"link2_text": null,
"link2_type": null,
"number": null,
"type": null
},
"geometry": {
"type": "LineString",
"coordinates": [
[-79.254923, 36.98394],
[-79.254923, 36.983939],
[-79.255326, 36.9838],
[-79.255401, 36.983774],
[-79.25576, 36.983664],
[-79.256795, 36.984137],
[-79.257537, 36.984478],
[-79.258539, 36.984925],
[-79.259498, 36.985353],
[-79.260286, 36.985712],
[-79.261405, 36.986222],
[-79.262933, 36.986928],
[-79.263237, 36.987071],
[-79.263755, 36.987296],
[-79.264086, 36.987423],
[-79.264167, 36.987446],
[-79.264338, 36.987486],
[-79.264414, 36.987501],
[-79.264618, 36.987531],
[-79.2648, 36.987542],
[-79.264982, 36.987537],
[-79.265163, 36.987517],
[-79.26703, 36.987355],
[-79.267952, 36.98726],
[-79.268404, 36.987226],
[-79.268771, 36.987197],
[-79.26955, 36.987117],
[-79.271398, 36.986946],
[-79.271488, 36.986941],
[-79.271698, 36.986925],
[-79.271936, 36.986898],
[-79.272231, 36.986852],
[-79.272474, 36.986785],
[-79.272711, 36.986705],
[-79.272895, 36.986632],
[-79.273059, 36.986552],
[-79.273646, 36.986245],
[-79.274224, 36.985925],
[-79.274887, 36.985592],
[-79.275308, 36.985365],
[-79.275672, 36.98517],
[-79.276249, 36.984876],
[-79.277101, 36.984433],
[-79.277425, 36.984259],
[-79.277918, 36.983982],
[-79.27799, 36.98395],
[-79.278179, 36.98385],
[-79.278261, 36.9838],
[-79.278335, 36.983745],
[-79.278421, 36.983666],
[-79.27844, 36.983647],
[-79.278502, 36.983577],
[-79.278548, 36.983511],
[-79.278614, 36.983381],
[-79.278654, 36.983273],
[-79.278711, 36.983011],
[-79.278763, 36.98269],
[-79.278806, 36.982485],
[-79.278866, 36.982282],
[-79.278952, 36.982101],
[-79.279023, 36.981984],
[-79.280178, 36.980418],
[-79.280259, 36.980319],
[-79.280355, 36.980229],
[-79.280419, 36.98018],
[-79.280578, 36.980082],
[-79.280666, 36.980038],
[-79.280783, 36.979994],
[-79.280908, 36.979963],
[-79.281301, 36.979913],
[-79.281646, 36.979874],
[-79.282145, 36.979835],
[-79.282797, 36.97977],
[-79.283144, 36.979743],
[-79.283618, 36.97972],
[-79.28399, 36.979706],
[-79.284447, 36.979695],
[-79.284904, 36.979697],
[-79.286913, 36.979638],
[-79.287201, 36.979628],
[-79.287954, 36.979612],
[-79.288037, 36.979611],
[-79.288397, 36.97962],
[-79.288697, 36.979643],
[-79.289908, 36.979722],
[-79.289994, 36.979724],
[-79.290136, 36.979716],
[-79.290248, 36.979699],
[-79.290503, 36.979632],
[-79.291043, 36.979454],
[-79.291563, 36.979269],
[-79.292467, 36.97896],
[-79.292759, 36.978877],
[-79.292963, 36.978832],
[-79.293286, 36.978778],
[-79.293549, 36.978746],
[-79.293649, 36.978738],
[-79.293755, 36.978729],
[-79.293858, 36.978731],
[-79.294028, 36.978747],
[-79.294162, 36.978771],
[-79.294243, 36.9788],
[-79.294439, 36.978883],
[-79.294626, 36.978979],
[-79.294782, 36.979072],
[-79.294921, 36.979174],
[-79.295023, 36.979263],
[-79.295281, 36.979534],
[-79.295458, 36.979739],
[-79.296347, 36.980843],
[-79.296549, 36.981064],
[-79.296594, 36.981095],
[-79.296695, 36.981144],
[-79.296788, 36.98117],
[-79.296916, 36.981184],
[-79.297032, 36.981182],
[-79.297147, 36.981165],
[-79.297933, 36.980962],
[-79.298145, 36.980893],
[-79.298401, 36.98079],
[-79.298602, 36.980696],
[-79.298795, 36.980593],
[-79.299134, 36.980402],
[-79.299407, 36.980244],
[-79.299963, 36.9799],
[-79.301767, 36.97881],
[-79.301976, 36.978691],
[-79.3021, 36.978619],
[-79.302508, 36.978369],
[-79.302614, 36.978309],
[-79.3028, 36.97822],
[-79.302995, 36.978145],
[-79.303113, 36.978114],
[-79.303153, 36.978249],
[-79.303232, 36.978565],
[-79.303319, 36.978989],
[-79.303326, 36.979184],
[-79.303313, 36.979346],
[-79.30324, 36.979748],
[-79.303136, 36.980362],
[-79.303088, 36.980609],
[-79.302996, 36.981143],
[-79.302982, 36.981226],
[-79.302977, 36.981321],
[-79.302986, 36.98144],
[-79.303013, 36.981556],
[-79.303057, 36.98167],
[-79.303191, 36.9819],
[-79.303336, 36.982126],
[-79.303702, 36.982652],
[-79.304322, 36.983486],
[-79.304588, 36.98382],
[-79.304756, 36.984051],
[-79.304903, 36.984229],
[-79.305059, 36.984403],
[-79.305145, 36.984487],
[-79.305336, 36.984648],
[-79.305612, 36.98486],
[-79.30569, 36.984915],
[-79.305765, 36.984974],
[-79.305944, 36.98513],
[-79.306108, 36.985295],
[-79.306259, 36.985469],
[-79.306333, 36.98557],
[-79.306437, 36.985737],
[-79.306524, 36.985911],
[-79.306595, 36.98609],
[-79.306677, 36.986365],
[-79.306734, 36.98662],
[-79.306773, 36.986878],
[-79.306759, 36.986998],
[-79.306724, 36.987146],
[-79.306621, 36.987426],
[-79.306591, 36.987545],
[-79.306555, 36.987745],
[-79.306536, 36.987984],
[-79.30653, 36.988172],
[-79.306539, 36.988321],
[-79.30655, 36.988398],
[-79.306566, 36.988507],
[-79.306673, 36.988967],
[-79.306789, 36.989416],
[-79.30681, 36.989518],
[-79.306831, 36.98969],
[-79.306833, 36.989828],
[-79.306822, 36.989888],
[-79.306771, 36.990067],
[-79.306696, 36.99024],
[-79.306569, 36.990463],
[-79.306374, 36.99078],
[-79.30633, 36.990863],
[-79.306292, 36.990972],
[-79.306271, 36.991084],
[-79.306268, 36.991229],
[-79.306282, 36.991421],
[-79.306323, 36.991648],
[-79.30657, 36.992516],
[-79.306601, 36.992703],
[-79.306614, 36.992892],
[-79.306598, 36.993111],
[-79.306569, 36.993287],
[-79.306553, 36.993345],
[-79.306526, 36.993432],
[-79.306466, 36.993574],
[-79.306313, 36.993848],
[-79.305971, 36.994382],
[-79.305826, 36.994647],
[-79.305382, 36.995598],
[-79.305197, 36.995963],
[-79.305065, 36.996284],
[-79.304983, 36.996521],
[-79.304954, 36.99668],
[-79.30495, 36.996815],
[-79.304959, 36.996932],
[-79.304988, 36.997077],
[-79.305024, 36.99719],
[-79.305111, 36.99739],
[-79.305197, 36.997567],
[-79.30532, 36.997782],
[-79.305429, 36.997949],
[-79.305577, 36.998153],
[-79.306017, 36.99873],
[-79.306204, 36.998965],
[-79.306407, 36.999192],
[-79.306624, 36.999411],
[-79.30672, 36.999489],
[-79.306828, 36.999557],
[-79.306922, 36.999602],
[-79.307072, 36.999656],
[-79.307354, 36.999723],
[-79.307628, 36.999778],
[-79.308892, 36.999988],
[-79.309029, 37.00002],
[-79.309135, 37.000056],
[-79.30926, 37.000112],
[-79.309374, 37.00018],
[-79.309478, 37.000259],
[-79.30959, 37.000372],
[-79.309743, 37.000552],
[-79.31029, 37.001344],
[-79.31037, 37.001451],
[-79.310486, 37.001568],
[-79.310598, 37.001654],
[-79.310697, 37.001714],
[-79.310838, 37.001785],
[-79.310991, 37.001844],
[-79.31115, 37.001891],
[-79.311632, 37.001979],
[-79.312359, 37.002135],
[-79.312455, 37.002156],
[-79.312915, 37.002271],
[-79.313026, 37.002296],
[-79.313639, 37.002422],
[-79.314311, 37.002515],
[-79.314769, 37.002553],
[-79.315227, 37.002582],
[-79.315352, 37.002604],
[-79.315472, 37.002641],
[-79.315543, 37.002685],
[-79.315621, 37.00275],
[-79.315685, 37.002824],
[-79.315725, 37.002889],
[-79.315888, 37.002832],
[-79.316221, 37.002733],
[-79.316448, 37.002678],
[-79.31752, 37.002455],
[-79.318524, 37.002275],
[-79.319059, 37.002211],
[-79.319268, 37.002199],
[-79.319435, 37.0022],
[-79.319651, 37.002214],
[-79.319786, 37.002226],
[-79.320258, 37.002279],
[-79.320522, 37.002298],
[-79.320786, 37.002302],
[-79.320953, 37.002288],
[-79.321116, 37.002258],
[-79.321274, 37.002213],
[-79.321381, 37.00217],
[-79.321762, 37.002001],
[-79.322382, 37.001698],
[-79.322844, 37.001466],
[-79.323023, 37.001376],
[-79.323292, 37.001249],
[-79.32357, 37.001134],
[-79.323943, 37.001003],
[-79.324098, 37.000958],
[-79.324162, 37.000945],
[-79.32513, 37.000843],
[-79.325325, 37.000814],
[-79.325517, 37.000777],
[-79.325753, 37.000719],
[-79.327186, 37.000266],
[-79.327482, 37.000173],
[-79.327802, 37.00008],
[-79.328598, 36.999838],
[-79.329158, 36.999654],
[-79.329204, 36.999715],
[-79.329343, 36.999894],
[-79.32942, 36.999975],
[-79.329588, 37.000125],
[-79.329742, 37.000239],
[-79.329777, 37.000256],
[-79.329869, 37.000291],
[-79.329988, 37.000315],
[-79.330091, 37.000318],
[-79.33027, 37.000316],
[-79.330449, 37.000298],
[-79.331035, 37.000223],
[-79.331427, 37.000184],
[-79.331855, 37.000129],
[-79.333009, 37.000023],
[-79.334568, 36.999869],
[-79.335002, 36.999826],
[-79.33552, 36.999806],
[-79.33606, 36.999814],
[-79.336208, 36.999833],
[-79.336352, 36.999866],
[-79.33649, 36.999913],
[-79.336644, 36.999986],
[-79.336856, 37.000123],
[-79.336962, 37.000203],
[-79.337096, 37.000316],
[-79.337325, 37.000539],
[-79.337519, 37.000761],
[-79.338522, 37.001965],
[-79.339126, 37.002688],
[-79.339574, 37.003185],
[-79.340385, 37.004106],
[-79.340479, 37.004212],
[-79.340603, 37.004341],
[-79.340773, 37.00449],
[-79.340929, 37.004602],
[-79.341131, 37.004723],
[-79.341632, 37.004968],
[-79.341875, 37.005087],
[-79.342172, 37.005233],
[-79.342594, 37.00542],
[-79.343189, 37.005708],
[-79.343817, 37.006011],
[-79.344455, 37.006335],
[-79.344712, 37.00647],
[-79.345697, 37.006916],
[-79.345837, 37.006985],
[-79.346006, 37.00708],
[-79.346221, 37.007218],
[-79.347403, 37.008016],
[-79.347493, 37.008071],
[-79.347634, 37.008171],
[-79.347763, 37.008281],
[-79.347971, 37.008497],
[-79.348051, 37.008623],
[-79.348135, 37.008786],
[-79.348201, 37.008954],
[-79.34825, 37.009126],
[-79.348316, 37.00954],
[-79.348397, 37.010196],
[-79.34854, 37.01111],
[-79.348616, 37.011496],
[-79.348778, 37.012266],
[-79.349159, 37.013946],
[-79.349315, 37.014628],
[-79.349636, 37.015919],
[-79.349688, 37.016183],
[-79.349795, 37.016628],
[-79.349854, 37.016827],
[-79.349915, 37.01701],
[-79.350064, 37.017337],
[-79.350135, 37.017464],
[-79.350159, 37.017499],
[-79.350325, 37.017735],
[-79.35042, 37.017865],
[-79.350584, 37.018129],
[-79.35072, 37.01842],
[-79.350808, 37.018683],
[-79.35089, 37.018981],
[-79.350968, 37.019317],
[-79.35119, 37.020219],
[-79.351251, 37.020445],
[-79.351346, 37.020719],
[-79.351414, 37.020888],
[-79.351505, 37.021079],
[-79.351682, 37.021459],
[-79.351825, 37.02176],
[-79.352185, 37.022473],
[-79.352628, 37.023433],
[-79.352751, 37.023743],
[-79.35282, 37.023863],
[-79.352895, 37.023965],
[-79.353012, 37.024078],
[-79.353078, 37.024127],
[-79.353186, 37.024186],
[-79.353325, 37.024244],
[-79.353398, 37.024265],
[-79.353421, 37.02427],
[-79.353621, 37.024315],
[-79.353675, 37.024321],
[-79.35392, 37.024336],
[-79.354286, 37.024379],
[-79.354423, 37.024385],
[-79.354844, 37.024375],
[-79.355058, 37.024359],
[-79.355214, 37.024339],
[-79.355354, 37.024308],
[-79.355614, 37.024238],
[-79.355718, 37.024209],
[-79.355965, 37.024125],
[-79.356147, 37.024057],
[-79.356485, 37.02394],
[-79.356546, 37.023919],
[-79.356797, 37.023824],
[-79.356964, 37.023769],
[-79.357077, 37.023757],
[-79.357196, 37.023767],
[-79.357262, 37.023786],
[-79.357309, 37.023811],
[-79.35735, 37.023849],
[-79.357388, 37.023905],
[-79.357541, 37.024317],
[-79.357583, 37.024391],
[-79.357634, 37.024438],
[-79.357685, 37.024467],
[-79.357747, 37.024487],
[-79.35783, 37.024497],
[-79.357899, 37.024495],
[-79.35801, 37.02448],
[-79.358102, 37.02446],
[-79.358409, 37.025941],
[-79.358471, 37.026316],
[-79.358502, 37.026637],
[-79.358517, 37.026844],
[-79.358519, 37.027185],
[-79.358497, 37.027679],
[-79.358457, 37.028033],
[-79.358398, 37.028378],
[-79.358301, 37.028779],
[-79.358082, 37.029574],
[-79.357957, 37.030026],
[-79.357813, 37.030609],
[-79.357745, 37.03095],
[-79.357685, 37.031344],
[-79.357656, 37.031612],
[-79.357621, 37.032199],
[-79.357619, 37.032445],
[-79.357631, 37.032766],
[-79.357637, 37.032893],
[-79.357666, 37.033258],
[-79.357711, 37.033639],
[-79.357789, 37.034066],
[-79.357875, 37.034441],
[-79.357922, 37.034622],
[-79.358521, 37.036938],
[-79.358613, 37.037315],
[-79.358687, 37.037658],
[-79.358786, 37.038217],
[-79.358856, 37.038791],
[-79.358911, 37.039356],
[-79.358965, 37.0401],
[-79.359051, 37.041306],
[-79.359073, 37.041825],
[-79.359059, 37.042471],
[-79.359012, 37.042954],
[-79.35899, 37.04313],
[-79.358922, 37.043537],
[-79.358829, 37.043973],
[-79.358773, 37.044171],
[-79.358704, 37.044417],
[-79.358541, 37.044914],
[-79.358352, 37.045429],
[-79.357856, 37.04678],
[-79.357794, 37.046961],
[-79.357564, 37.047556],
[-79.357409, 37.047915],
[-79.357338, 37.048062],
[-79.357278, 37.048184],
[-79.356942, 37.048801],
[-79.356841, 37.048967],
[-79.356589, 37.049349],
[-79.356363, 37.049677],
[-79.354212, 37.052783],
[-79.353972, 37.053148],
[-79.353865, 37.053295],
[-79.353452, 37.053889],
[-79.352197, 37.055711],
[-79.352126, 37.055808],
[-79.351983, 37.056023],
[-79.351596, 37.056539],
[-79.351413, 37.056761],
[-79.35122, 37.056979],
[-79.351018, 37.057191],
[-79.35075, 37.057445],
[-79.350603, 37.057584],
[-79.35029, 37.057856],
[-79.348032, 37.059645],
[-79.346954, 37.060488],
[-79.345892, 37.06133],
[-79.345295, 37.061797],
[-79.344778, 37.062208],
[-79.344716, 37.062258],
[-79.343942, 37.062866],
[-79.343259, 37.06342],
[-79.342925, 37.063722],
[-79.342732, 37.063907],
[-79.342302, 37.064351],
[-79.342055, 37.06463],
[-79.341843, 37.064885],
[-79.341424, 37.065452],
[-79.341048, 37.066036],
[-79.340718, 37.066647],
[-79.340066, 37.068047],
[-79.338982, 37.070343],
[-79.336951, 37.074656],
[-79.336672, 37.075265],
[-79.335622, 37.077497],
[-79.335265, 37.078252],
[-79.33489, 37.079062],
[-79.334833, 37.079182],
[-79.334222, 37.080477],
[-79.333262, 37.082521],
[-79.333001, 37.083079],
[-79.332628, 37.084028],
[-79.332548, 37.084278],
[-79.332388, 37.08478],
[-79.332201, 37.085539],
[-79.33204, 37.086421],
[-79.33196, 37.086978],
[-79.331907, 37.087757],
[-79.331871, 37.088536],
[-79.33185, 37.089317],
[-79.331805, 37.090324],
[-79.331772, 37.091338],
[-79.331768, 37.092235],
[-79.33183, 37.093576],
[-79.331943, 37.095022],
[-79.332045, 37.096198],
[-79.332341, 37.099713],
[-79.332397, 37.100421],
[-79.332436, 37.101086],
[-79.332443, 37.1013],
[-79.332438, 37.10199],
[-79.332418, 37.102426],
[-79.332391, 37.102795],
[-79.332337, 37.103324],
[-79.332244, 37.103966],
[-79.332205, 37.104185],
[-79.332175, 37.104355],
[-79.332056, 37.104907],
[-79.332041, 37.104978],
[-79.331903, 37.105494],
[-79.331733, 37.106053],
[-79.331559, 37.106562],
[-79.33131, 37.107195],
[-79.331178, 37.107501],
[-79.330959, 37.107973],
[-79.330748, 37.108399],
[-79.330489, 37.108876],
[-79.330365, 37.109093],
[-79.330155, 37.10944],
[-79.329757, 37.110058],
[-79.328813, 37.111446],
[-79.328701, 37.111611],
[-79.327118, 37.113932],
[-79.327107, 37.113947],
[-79.326498, 37.114802],
[-79.326178, 37.115223],
[-79.326128, 37.115289],
[-79.32568, 37.115855],
[-79.325061, 37.116595],
[-79.324816, 37.116878],
[-79.324497, 37.117235],
[-79.324161, 37.117601],
[-79.323816, 37.117964],
[-79.323589, 37.118194],
[-79.323104, 37.118678],
[-79.322015, 37.119732],
[-79.320826, 37.12089],
[-79.320279, 37.121415],
[-79.31993, 37.121729],
[-79.319276, 37.122271],
[-79.318828, 37.122609],
[-79.318377, 37.122925],
[-79.317535, 37.123462],
[-79.316595, 37.123987],
[-79.315586, 37.124473],
[-79.314958, 37.124742],
[-79.311931, 37.125973],
[-79.303986, 37.129196],
[-79.303177, 37.129555],
[-79.302367, 37.129915],
[-79.30095, 37.130617],
[-79.298871, 37.131691],
[-79.298008, 37.132146],
[-79.293574, 37.134491],
[-79.293108, 37.134749],
[-79.292712, 37.134937],
[-79.292278, 37.135125],
[-79.291836, 37.1353],
[-79.291351, 37.135473],
[-79.290905, 37.135615],
[-79.290365, 37.135772],
[-79.289641, 37.135941],
[-79.289078, 37.136055],
[-79.288222, 37.136184],
[-79.287781, 37.136228],
[-79.287205, 37.136269],
[-79.281895, 37.136526],
[-79.280512, 37.136607],
[-79.279731, 37.13667],
[-79.278968, 37.136747],
[-79.277922, 37.136872],
[-79.276244, 37.13712],
[-79.273494, 37.137624],
[-79.272005, 37.137904],
[-79.271794, 37.137944],
[-79.266159, 37.138985],
[-79.265643, 37.139056],
[-79.265084, 37.139119],
[-79.264404, 37.139177],
[-79.263826, 37.139213],
[-79.263263, 37.139234],
[-79.262666, 37.139241],
[-79.262103, 37.139234],
[-79.26149, 37.139213],
[-79.260895, 37.13918],
[-79.260488, 37.139149],
[-79.257811, 37.138859],
[-79.253283, 37.138354],
[-79.251817, 37.138189],
[-79.251311, 37.138138],
[-79.25082, 37.138104],
[-79.250344, 37.138087],
[-79.249949, 37.138091],
[-79.249141, 37.138125],
[-79.248701, 37.138169],
[-79.248255, 37.138232],
[-79.247815, 37.138303],
[-79.247404, 37.138388],
[-79.246983, 37.138492],
[-79.24619, 37.138741],
[-79.246034, 37.138799],
[-79.245567, 37.138991],
[-79.243639, 37.139795],
[-79.242121, 37.140435],
[-79.241618, 37.140648],
[-79.241125, 37.14089],
[-79.240755, 37.141103],
[-79.240471, 37.141293],
[-79.240237, 37.141475],
[-79.240023, 37.141661],
[-79.239659, 37.142024],
[-79.238717, 37.143115],
[-79.238653, 37.143189],
[-79.238443, 37.143404],
[-79.23822, 37.14361],
[-79.237972, 37.143817],
[-79.237711, 37.144013],
[-79.237424, 37.144206],
[-79.237139, 37.144378],
[-79.236846, 37.144536],
[-79.23672, 37.144599],
[-79.235366, 37.145185],
[-79.235031, 37.145327],
[-79.233118, 37.146139],
[-79.232943, 37.146214],
[-79.23213, 37.146559],
[-79.23159, 37.146789],
[-79.231268, 37.146943],
[-79.230971, 37.147103],
[-79.230723, 37.147248],
[-79.230589, 37.147333],
[-79.230303, 37.147527],
[-79.230067, 37.147704],
[-79.229831, 37.147902],
[-79.229608, 37.148108],
[-79.229398, 37.148324],
[-79.229192, 37.148559],
[-79.229002, 37.148802],
[-79.228823, 37.149065],
[-79.228683, 37.149299],
[-79.228557, 37.149537],
[-79.228436, 37.149807],
[-79.228332, 37.15008],
[-79.22824, 37.150371],
[-79.228165, 37.150679],
[-79.228144, 37.150787],
[-79.22795, 37.1522],
[-79.227939, 37.152282],
[-79.227922, 37.152405],
[-79.227831, 37.1531],
[-79.227768, 37.153577],
[-79.22775, 37.153704],
[-79.227707, 37.153951],
[-79.227614, 37.154338],
[-79.227519, 37.154642],
[-79.227394, 37.154981],
[-79.227259, 37.155289],
[-79.227113, 37.155579],
[-79.227008, 37.155764],
[-79.226979, 37.155814],
[-79.226931, 37.155892],
[-79.22673, 37.156196],
[-79.226531, 37.156466],
[-79.226359, 37.156679],
[-79.226091, 37.156981],
[-79.225836, 37.157239],
[-79.225577, 37.157477],
[-79.225307, 37.157704],
[-79.225033, 37.15791],
[-79.224838, 37.158043],
[-79.223223, 37.159106],
[-79.222625, 37.159494],
[-79.222577, 37.159525],
[-79.222526, 37.159559],
[-79.222269, 37.159725],
[-79.221758, 37.160065],
[-79.219427, 37.161585],
[-79.218294, 37.162324],
[-79.218211, 37.162378],
[-79.216923, 37.163217],
[-79.216426, 37.163539],
[-79.215909, 37.16389],
[-79.215531, 37.164171],
[-79.215221, 37.164425],
[-79.214936, 37.164678],
[-79.214674, 37.164929],
[-79.214292, 37.165324],
[-79.214244, 37.165374],
[-79.213081, 37.166582],
[-79.212642, 37.167038],
[-79.212368, 37.167324],
[-79.212048, 37.167658],
[-79.211768, 37.16795],
[-79.211486, 37.168245],
[-79.211416, 37.168318],
[-79.211008, 37.168744],
[-79.210963, 37.168791],
[-79.210689, 37.16908],
[-79.210304, 37.16953],
[-79.2101, 37.169782],
[-79.209923, 37.170006],
[-79.209526, 37.170538],
[-79.209343, 37.170798],
[-79.207037, 37.174039],
[-79.206764, 37.174435],
[-79.206634, 37.174641],
[-79.206469, 37.174929],
[-79.206273, 37.17532],
[-79.20615, 37.175603],
[-79.206073, 37.175802],
[-79.206026, 37.175929],
[-79.205916, 37.176273],
[-79.205845, 37.176539],
[-79.205757, 37.176917],
[-79.205696, 37.177164],
[-79.205658, 37.177349],
[-79.205603, 37.177589],
[-79.205562, 37.177759],
[-79.205539, 37.177863],
[-79.205487, 37.178091],
[-79.205427, 37.178344],
[-79.205364, 37.178607],
[-79.205297, 37.178889],
[-79.205253, 37.179068],
[-79.20519, 37.179332],
[-79.205122, 37.179618],
[-79.205055, 37.179895],
[-79.204997, 37.180138],
[-79.204614, 37.181773],
[-79.204588, 37.181883],
[-79.204488, 37.182314],
[-79.204319, 37.183043],
[-79.204265, 37.183268],
[-79.204123, 37.18388],
[-79.203924, 37.184747],
[-79.203855, 37.185167],
[-79.203781, 37.185725],
[-79.203767, 37.185869],
[-79.203714, 37.186727],
[-79.203688, 37.188358],
[-79.203665, 37.189574],
[-79.203624, 37.192626],
[-79.203627, 37.192665],
[-79.203588, 37.193792],
[-79.203572, 37.194229],
[-79.203568, 37.194309],
[-79.203559, 37.194539],
[-79.203553, 37.194676],
[-79.203543, 37.194919],
[-79.203531, 37.195199],
[-79.203502, 37.195859],
[-79.203483, 37.196276],
[-79.203468, 37.196579],
[-79.203458, 37.196792],
[-79.203433, 37.197322],
[-79.203422, 37.197563],
[-79.20341, 37.197824],
[-79.203397, 37.198095],
[-79.20339, 37.198254],
[-79.203379, 37.19847],
[-79.203358, 37.198936],
[-79.20334, 37.19935],
[-79.203304, 37.200071],
[-79.203262, 37.200536],
[-79.203244, 37.200686],
[-79.203162, 37.201241],
[-79.203073, 37.201722],
[-79.20306, 37.201793],
[-79.203026, 37.201977],
[-79.202836, 37.203003],
[-79.202752, 37.203459],
[-79.202563, 37.204478],
[-79.202452, 37.205079],
[-79.202395, 37.205385],
[-79.201856, 37.208299],
[-79.201805, 37.208574],
[-79.201702, 37.209126],
[-79.201673, 37.209268],
[-79.201619, 37.209479],
[-79.201573, 37.209638],
[-79.201505, 37.209836],
[-79.201407, 37.210085],
[-79.201284, 37.210341],
[-79.201114, 37.21064],
[-79.201026, 37.210776],
[-79.200882, 37.21098],
[-79.200649, 37.211282],
[-79.200396, 37.211554],
[-79.199727, 37.212167],
[-79.199637, 37.212249],
[-79.199553, 37.212325],
[-79.199391, 37.212473],
[-79.199159, 37.212684],
[-79.19865, 37.213144],
[-79.197756, 37.213946],
[-79.197588, 37.214097],
[-79.197252, 37.214415],
[-79.196922, 37.214731],
[-79.196487, 37.215166],
[-79.196055, 37.215596],
[-79.195714, 37.216042],
[-79.195395, 37.216449],
[-79.194175, 37.218086],
[-79.193942, 37.2184],
[-79.193714, 37.218705],
[-79.193339, 37.219208],
[-79.193103, 37.219523],
[-79.192804, 37.219924],
[-79.192465, 37.220384],
[-79.191972, 37.221056],
[-79.191665, 37.221486],
[-79.191271, 37.222039],
[-79.191066, 37.222328],
[-79.190837, 37.222648],
[-79.190786, 37.222724],
[-79.190591, 37.223024],
[-79.190561, 37.223069],
[-79.190114, 37.223762],
[-79.189976, 37.223994],
[-79.189786, 37.224314],
[-79.189538, 37.224731],
[-79.189441, 37.224896],
[-79.189231, 37.225287],
[-79.188873, 37.225949],
[-79.188647, 37.226369],
[-79.188578, 37.226497],
[-79.188422, 37.22682],
[-79.187747, 37.228226],
[-79.187638, 37.228454],
[-79.186752, 37.230317],
[-79.186236, 37.23142],
[-79.186183, 37.231531],
[-79.186143, 37.231633],
[-79.186012, 37.231905],
[-79.185971, 37.232009],
[-79.185901, 37.232204],
[-79.185821, 37.232467],
[-79.185783, 37.232629],
[-79.185746, 37.232787],
[-79.185712, 37.232989],
[-79.185564, 37.234115],
[-79.18554, 37.234342],
[-79.185535, 37.234388],
[-79.185527, 37.234464],
[-79.185489, 37.234824],
[-79.185459, 37.235133],
[-79.185442, 37.235447],
[-79.185444, 37.235802],
[-79.185467, 37.236157],
[-79.185494, 37.236478],
[-79.185509, 37.236629],
[-79.185568, 37.237037],
[-79.185613, 37.237268],
[-79.185642, 37.237403],
[-79.185719, 37.237706],
[-79.185791, 37.237965],
[-79.185811, 37.238037],
[-79.185899, 37.238345],
[-79.185952, 37.238527],
[-79.18597, 37.23859],
[-79.186042, 37.238834],
[-79.186525, 37.240494],
[-79.186638, 37.240882],
[-79.186786, 37.241392],
[-79.186995, 37.242108],
[-79.187061, 37.242336],
[-79.187075, 37.242384],
[-79.187298, 37.243149],
[-79.187378, 37.243422],
[-79.187527, 37.243936],
[-79.187774, 37.244774],
[-79.187853, 37.245008],
[-79.187949, 37.245331],
[-79.187975, 37.245426],
[-79.18809, 37.245933],
[-79.188158, 37.246339],
[-79.188193, 37.246639],
[-79.188214, 37.246935],
[-79.188219, 37.247189],
[-79.188219, 37.247284],
[-79.188204, 37.247624],
[-79.188173, 37.24795],
[-79.188121, 37.248287],
[-79.188078, 37.248502],
[-79.188012, 37.248777],
[-79.187964, 37.248948],
[-79.18752, 37.250322],
[-79.187502, 37.250377],
[-79.187461, 37.250489],
[-79.187101, 37.251604],
[-79.186977, 37.251986],
[-79.186803, 37.252487],
[-79.186647, 37.252862],
[-79.186473, 37.253233],
[-79.1864, 37.253375],
[-79.186369, 37.253435],
[-79.186196, 37.253727],
[-79.186096, 37.253883],
[-79.185846, 37.254253],
[-79.185619, 37.254587],
[-79.184816, 37.255765],
[-79.184332, 37.256471],
[-79.184251, 37.256583],
[-79.183919, 37.257073],
[-79.183282, 37.258009],
[-79.183273, 37.258023],
[-79.182658, 37.258928],
[-79.182428, 37.259266],
[-79.182236, 37.259548],
[-79.182189, 37.259617],
[-79.181677, 37.260371],
[-79.180889, 37.261527],
[-79.180329, 37.262346],
[-79.179966, 37.262877],
[-79.178561, 37.264935],
[-79.177834, 37.265998],
[-79.17762, 37.266312],
[-79.177577, 37.266375],
[-79.177344, 37.266717],
[-79.177268, 37.266828],
[-79.175738, 37.269066],
[-79.175293, 37.269718],
[-79.175059, 37.270062],
[-79.175024, 37.270113],
[-79.174746, 37.27052],
[-79.174499, 37.270885],
[-79.174225, 37.271286],
[-79.17318, 37.27282],
[-79.172596, 37.273676],
[-79.172062, 37.274457],
[-79.17205, 37.274476],
[-79.171892, 37.274707],
[-79.171746, 37.274919],
[-79.170612, 37.276581],
[-79.170091, 37.277344],
[-79.170074, 37.277368],
[-79.169014, 37.27887],
[-79.168768, 37.279279],
[-79.168446, 37.279751],
[-79.168095, 37.28026],
[-79.167791, 37.280704],
[-79.167004, 37.281854],
[-79.166839, 37.282126],
[-79.166686, 37.282417],
[-79.166553, 37.282715],
[-79.166455, 37.282978],
[-79.166365, 37.283271],
[-79.166331, 37.283406],
[-79.166277, 37.283662],
[-79.166236, 37.283934],
[-79.166211, 37.284233],
[-79.166208, 37.284331],
[-79.16621, 37.284606],
[-79.166232, 37.284894],
[-79.166273, 37.28518],
[-79.166341, 37.285491],
[-79.166394, 37.28568],
[-79.166419, 37.28576],
[-79.16653, 37.286061],
[-79.16656, 37.286133],
[-79.166601, 37.286228],
[-79.167073, 37.287187],
[-79.167342, 37.287727],
[-79.167647, 37.288335],
[-79.167961, 37.288961],
[-79.168213, 37.289466],
[-79.168669, 37.290363],
[-79.169252, 37.291516],
[-79.169707, 37.292425],
[-79.170019, 37.293049],
[-79.170164, 37.293337],
[-79.170762, 37.294525],
[-79.171017, 37.295032],
[-79.171197, 37.29539],
[-79.171228, 37.295451],
[-79.171707, 37.296402],
[-79.171854, 37.296694],
[-79.172057, 37.297099],
[-79.172329, 37.297639],
[-79.172756, 37.298485],
[-79.172921, 37.29877],
[-79.173118, 37.299071],
[-79.173326, 37.299351],
[-79.1734, 37.299443],
[-79.173711, 37.299824],
[-79.174643, 37.300928],
[-79.177789, 37.304649],
[-79.17841, 37.305383],
[-79.179563, 37.306751],
[-79.18128, 37.308787],
[-79.181492, 37.309036],
[-79.181949, 37.309573],
[-79.182599, 37.310336],
[-79.183198, 37.311046],
[-79.183775, 37.311729],
[-79.183964, 37.311947],
[-79.18428, 37.312314],
[-79.18536, 37.313557],
[-79.18553, 37.313753],
[-79.18588, 37.314159],
[-79.186286, 37.314624],
[-79.186592, 37.314975],
[-79.186893, 37.31532],
[-79.187155, 37.315623],
[-79.187287, 37.315796],
[-79.187433, 37.315958],
[-79.187603, 37.316193],
[-79.187705, 37.316348],
[-79.187781, 37.316469],
[-79.187895, 37.316666],
[-79.188063, 37.316995],
[-79.188211, 37.31734],
[-79.188267, 37.317488],
[-79.188574, 37.31828],
[-79.18873, 37.318682],
[-79.188773, 37.318793],
[-79.188818, 37.318907],
[-79.188983, 37.319332],
[-79.189167, 37.319817],
[-79.18919, 37.319881],
[-79.189276, 37.320122],
[-79.189293, 37.320183],
[-79.189372, 37.320484],
[-79.189407, 37.320635],
[-79.189445, 37.320825],
[-79.189477, 37.321015],
[-79.189492, 37.321115],
[-79.189533, 37.321458],
[-79.189536, 37.321492],
[-79.189586, 37.322119],
[-79.189602, 37.322319],
[-79.189637, 37.32275],
[-79.189647, 37.322876],
[-79.189704, 37.323523],
[-79.189737, 37.323892],
[-79.189747, 37.323997],
[-79.189761, 37.324147],
[-79.189781, 37.324375],
[-79.189798, 37.324545],
[-79.189823, 37.324722],
[-79.189861, 37.324935],
[-79.189896, 37.325095],
[-79.189922, 37.3252],
[-79.190034, 37.325593],
[-79.190115, 37.325884],
[-79.190279, 37.326471],
[-79.190558, 37.327468],
[-79.190626, 37.327737],
[-79.190656, 37.327855],
[-79.190719, 37.328102],
[-79.190893, 37.328783],
[-79.19093, 37.328914],
[-79.19114, 37.329665],
[-79.191197, 37.329849],
[-79.191289, 37.330174],
[-79.191411, 37.330604],
[-79.191427, 37.330662],
[-79.191549, 37.331144],
[-79.191612, 37.331407],
[-79.191674, 37.33166],
[-79.191713, 37.331945],
[-79.191731, 37.332216],
[-79.191727, 37.3324],
[-79.191718, 37.332618],
[-79.191688, 37.333114],
[-79.191671, 37.333265],
[-79.191652, 37.333506],
[-79.191625, 37.33369],
[-79.191591, 37.333978],
[-79.191586, 37.334109],
[-79.191605, 37.334336],
[-79.19161, 37.334672],
[-79.191612, 37.334771],
[-79.191619, 37.335165],
[-79.191615, 37.335425],
[-79.191612, 37.335464],
[-79.191591, 37.335798],
[-79.191573, 37.33597],
[-79.19153, 37.336198],
[-79.191511, 37.3363],
[-79.191476, 37.336481],
[-79.191396, 37.336901],
[-79.191254, 37.33724],
[-79.191108, 37.337564],
[-79.190891, 37.337852],
[-79.190707, 37.338004],
[-79.190446, 37.338136],
[-79.190159, 37.338232],
[-79.189809, 37.338303],
[-79.189504, 37.338343],
[-79.189039, 37.338414],
[-79.188663, 37.33847],
[-79.188351, 37.338526],
[-79.18802, 37.338571],
[-79.18767, 37.338617],
[-79.187276, 37.338677],
[-79.18683, 37.338758],
[-79.186448, 37.338854],
[-79.186232, 37.338986],
[-79.186034, 37.339158],
[-79.185913, 37.339381],
[-79.185862, 37.339654],
[-79.185792, 37.339958],
[-79.185735, 37.340246],
[-79.185608, 37.340565],
[-79.185474, 37.340849],
[-79.185264, 37.341152],
[-79.185009, 37.341421],
[-79.184748, 37.341658],
[-79.184399, 37.341989],
[-79.184093, 37.342254],
[-79.183658, 37.342682],
[-79.18294, 37.343536],
[-79.182113, 37.344505],
[-79.181077, 37.345699],
[-79.180004, 37.346871],
[-79.178729, 37.348196],
[-79.177389, 37.349407],
[-79.177129, 37.349621],
[-79.176626, 37.350036],
[-79.173129, 37.353092],
[-79.169752, 37.356318],
[-79.169186, 37.356859],
[-79.166439, 37.359647],
[-79.165165, 37.360856],
[-79.164528, 37.361444],
[-79.163946, 37.361878],
[-79.162943, 37.362614],
[-79.161891, 37.363349],
[-79.159885, 37.364693],
[-79.158866, 37.365389],
[-79.157915, 37.36609],
[-79.156262, 37.367299],
[-79.153378, 37.36939],
[-79.1513, 37.370777],
[-79.148798, 37.372337],
[-79.146813, 37.373529],
[-79.146135, 37.37394],
[-79.145298, 37.374385],
[-79.144399, 37.374808],
[-79.143032, 37.375351],
[-79.142887, 37.375396],
[-79.141407, 37.375861],
[-79.13952, 37.376309],
[-79.137442, 37.376753],
[-79.136385, 37.376976],
[-79.135221, 37.37722],
[-79.134065, 37.377456],
[-79.132756, 37.377733],
[-79.131505, 37.377997],
[-79.130701, 37.378165],
[-79.129655, 37.378385],
[-79.128812, 37.378561],
[-79.127809, 37.378776],
[-79.127166, 37.378891],
[-79.124907, 37.379433],
[-79.122351, 37.380007],
[-79.119924, 37.380555],
[-79.118369, 37.380958],
[-79.116892, 37.381492],
[-79.11429, 37.382508],
[-79.111589, 37.383564],
[-79.110432, 37.384015],
[-79.108723, 37.384663],
[-79.107004, 37.385341],
[-79.10533, 37.38597],
[-79.10529, 37.385969],
[-79.104874, 37.386095],
[-79.104406, 37.386191],
[-79.103958, 37.38624],
[-79.103328, 37.386271],
[-79.101681, 37.386155],
[-79.101144, 37.386117],
[-79.100418, 37.386038],
[-79.097991, 37.385843],
[-79.09636, 37.385744],
[-79.095982, 37.385658],
[-79.095845, 37.385614],
[-79.09571, 37.385555],
[-79.095567, 37.38548],
[-79.095427, 37.38539],
[-79.095308, 37.385296],
[-79.09517, 37.385161],
[-79.09509, 37.385054],
[-79.094998, 37.384905],
[-79.094916, 37.384737],
[-79.094844, 37.384528],
[-79.094656, 37.383845],
[-79.094531, 37.38345],
[-79.094325, 37.383054],
[-79.094038, 37.38276],
[-79.093621, 37.382467],
[-79.093187, 37.382294],
[-79.092689, 37.382201],
[-79.092284, 37.382201],
[-79.091903, 37.382257],
[-79.091551, 37.382364],
[-79.091187, 37.382541],
[-79.090959, 37.382723],
[-79.090789, 37.382882],
[-79.090589, 37.383115],
[-79.090443, 37.383376],
[-79.090284, 37.383744],
[-79.090225, 37.384],
[-79.090179, 37.384541],
[-79.090062, 37.385779],
[-79.089925, 37.386644],
[-79.089849, 37.387226],
[-79.089779, 37.387541],
[-79.089689, 37.387836],
[-79.0895, 37.38838],
[-79.089436, 37.388633],
[-79.089405, 37.388841],
[-79.089289, 37.389685],
[-79.089161, 37.39093],
[-79.089008, 37.392008],
[-79.08881, 37.394069],
[-79.088768, 37.394579],
[-79.088645, 37.395885],
[-79.088477, 37.397207],
[-79.087956, 37.401181],
[-79.087825, 37.401823],
[-79.087665, 37.402308],
[-79.087554, 37.402629],
[-79.08736, 37.403142],
[-79.087142, 37.403562],
[-79.086923, 37.403937],
[-79.086762, 37.404195],
[-79.086439, 37.404708],
[-79.086251, 37.405002],
[-79.085982, 37.405393],
[-79.085647, 37.405896],
[-79.085037, 37.406824],
[-79.084691, 37.407346],
[-79.084239, 37.407998],
[-79.084081, 37.408208],
[-79.083969, 37.408376],
[-79.083852, 37.408534],
[-79.083752, 37.408705],
[-79.083641, 37.408893],
[-79.08253, 37.41059],
[-79.082107, 37.41155],
[-79.081937, 37.412163],
[-79.081833, 37.412538],
[-79.081757, 37.413176],
[-79.08171, 37.413903],
[-79.081751, 37.414774],
[-79.081781, 37.415758],
[-79.081777, 37.417393],
[-79.081646, 37.41901],
[-79.081485, 37.420256],
[-79.081292, 37.421219],
[-79.081057, 37.422257],
[-79.080513, 37.424117],
[-79.07951, 37.427155],
[-79.078061, 37.431195],
[-79.077269, 37.433524],
[-79.076993, 37.434391],
[-79.076647, 37.435495],
[-79.076395, 37.436608],
[-79.076304, 37.437254],
[-79.076229, 37.438019],
[-79.076213, 37.439312],
[-79.076213, 37.439413],
[-79.076155, 37.442774],
[-79.07614, 37.443179],
[-79.076116, 37.443841],
[-79.076046, 37.446058],
[-79.075976, 37.449173],
[-79.076002, 37.451689],
[-79.076065, 37.4523],
[-79.076262, 37.453],
[-79.076579, 37.453683],
[-79.076982, 37.454312],
[-79.077536, 37.45501],
[-79.079739, 37.457229],
[-79.080689, 37.458217],
[-79.081531, 37.459252],
[-79.082085, 37.460038],
[-79.082441, 37.460738],
[-79.082708, 37.461304],
[-79.082968, 37.461981],
[-79.083137, 37.462694],
[-79.083265, 37.463513],
[-79.083293, 37.464338],
[-79.083287, 37.464745],
[-79.083277, 37.465166],
[-79.083236, 37.465743],
[-79.083136, 37.466259],
[-79.082678, 37.468029],
[-79.082438, 37.469156],
[-79.08215, 37.470371],
[-79.081963, 37.471033],
[-79.081827, 37.471415],
[-79.081408, 37.472342],
[-79.081005, 37.47309],
[-79.080296, 37.474045],
[-79.079641, 37.474751],
[-79.078249, 37.476094],
[-79.077451, 37.477058],
[-79.076776, 37.477863],
[-79.076213, 37.478711],
[-79.075638, 37.479763],
[-79.075274, 37.480624],
[-79.074869, 37.481821],
[-79.074675, 37.482594],
[-79.074634, 37.482892],
[-79.074593, 37.483204],
[-79.07457, 37.483627],
[-79.074448, 37.484732],
[-79.074331, 37.485753],
[-79.074167, 37.486518],
[-79.073888, 37.487326],
[-79.073467, 37.488074],
[-79.07305, 37.488846],
[-79.072616, 37.489619],
[-79.072018, 37.490699],
[-79.07163, 37.49136],
[-79.070791, 37.492896],
[-79.070146, 37.494186],
[-79.06953, 37.495438],
[-79.068703, 37.497026],
[-79.067817, 37.498799],
[-79.067177, 37.500098],
[-79.066497, 37.501471],
[-79.066168, 37.502341],
[-79.065974, 37.503063],
[-79.065895, 37.503746],
[-79.065857, 37.504329],
[-79.065851, 37.505804],
[-79.065851, 37.506847],
[-79.065828, 37.508187],
[-79.065831, 37.509824],
[-79.0658, 37.510657],
[-79.065769, 37.511273],
[-79.065628, 37.51191],
[-79.065455, 37.512506],
[-79.065165, 37.513111],
[-79.064807, 37.513823],
[-79.064426, 37.514512],
[-79.063986, 37.515424],
[-79.063804, 37.515903],
[-79.063545, 37.516788],
[-79.063328, 37.51796],
[-79.063264, 37.519296],
[-79.063311, 37.520208],
[-79.063487, 37.521209],
[-79.063645, 37.522214],
[-79.063845, 37.523275],
[-79.06425, 37.525364],
[-79.064871, 37.528602],
[-79.065376, 37.531264],
[-79.066057, 37.534819],
[-79.066725, 37.538252],
[-79.0674, 37.541904],
[-79.06794, 37.544546],
[-79.068021, 37.545221],
[-79.068093, 37.545891],
[-79.068075, 37.546616],
[-79.067977, 37.547323],
[-79.067805, 37.547989],
[-79.06729, 37.549617],
[-79.066508, 37.552189],
[-79.066203, 37.55312],
[-79.065916, 37.554199],
[-79.06571, 37.554864],
[-79.065358, 37.555901],
[-79.06462, 37.558162],
[-79.064236, 37.559374],
[-79.064086, 37.559848],
[-79.063835, 37.560896],
[-79.063609, 37.561383],
[-79.063256, 37.561986],
[-79.062896, 37.562503],
[-79.062134, 37.563345],
[-79.061625, 37.563753],
[-79.06094, 37.564213],
[-79.058641, 37.565583],
[-79.05758, 37.566208],
[-79.056639, 37.566768],
[-79.055935, 37.567192],
[-79.055742, 37.567302],
[-79.055553, 37.567416],
[-79.055246, 37.567615],
[-79.054927, 37.567838],
[-79.054748, 37.567977],
[-79.054525, 37.568169],
[-79.05429, 37.568391],
[-79.054239, 37.568442],
[-79.054034, 37.568657],
[-79.053873, 37.56885],
[-79.053657, 37.569143],
[-79.053524, 37.569347],
[-79.053368, 37.569618],
[-79.053228, 37.569894],
[-79.053172, 37.570026],
[-79.053043, 37.570358],
[-79.05286, 37.57095],
[-79.052677, 37.571527],
[-79.052485, 37.572133],
[-79.052132, 37.573261],
[-79.051632, 37.57486],
[-79.051348, 37.57574],
[-79.051123, 37.576286],
[-79.051087,
gitextract_rt4_xit0/ ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── ci.yml │ ├── prerelease.yml │ └── release.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .monorepolint.config.mjs ├── .prettierignore ├── .prettierrc.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── docs/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── OPEN_COLLECTIVE.md │ ├── PUBLISHING.md │ ├── SECURITY.md │ └── SEE_ALSO.md ├── documentation.yml ├── eslint.config.mjs ├── examples/ │ ├── browser/ │ │ └── index.html │ ├── create-react-app/ │ │ ├── .gitignore │ │ ├── package.json │ │ ├── public/ │ │ │ └── index.html │ │ └── src/ │ │ └── index.js │ ├── es-modules/ │ │ └── index.html │ └── es-modules-single-module/ │ └── index.html ├── lerna.json ├── nx.json ├── package.json ├── packages/ │ ├── turf/ │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── babel.config.json │ │ ├── index.ts │ │ ├── package.json │ │ ├── rollup.config.js │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-along/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── fixtures/ │ │ │ ├── dc-line.geojson │ │ │ ├── dc-points.geojson │ │ │ └── route.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-angle/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-area/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ └── polygon.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-bbox/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-bbox-clip/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── lineclip.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── linestring-single-line.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── polygon-crossing-hole.geojson │ │ │ │ ├── polygon-holes.geojson │ │ │ │ ├── polygon-point-intersection.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── linestring-single-line.geojson │ │ │ ├── linestring.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── polygon-crossing-hole.geojson │ │ │ ├── polygon-holes.geojson │ │ │ ├── polygon-point-intersection.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-bbox-polygon/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-bearing/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── out/ │ │ │ └── results.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-bezier-spline/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── spline.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── bezierIn.json │ │ │ │ ├── issue-#1063.json │ │ │ │ └── simple.json │ │ │ └── out/ │ │ │ ├── bezierIn.json │ │ │ ├── issue-#1063.json │ │ │ └── simple.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-clockwise/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ └── counter-clockwise-line.geojson │ │ │ └── true/ │ │ │ └── clockwise-line.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-concave/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── 3vertices.geojson │ │ │ │ ├── diamond.geojson │ │ │ │ └── square.geojson │ │ │ └── true/ │ │ │ ├── polygon.geojson │ │ │ └── polygon2.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-contains/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── LineString/ │ │ │ │ │ └── LineIsNotContainedByLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── MultiPointsIsNotContainedByLine.geojson │ │ │ │ │ │ └── MultiPointsOnLineEndsIsNotContainedByLine.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── MultiPointIsNotContainedByMultiPoint.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── MultiPointAllOnBoundaryIsNotContainedByPolygon.geojson │ │ │ │ │ └── MultiPointIsNotContainedByPolygon.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── MultiPolygonIsNotContainedByPolygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── PointIsNotContainedByLine.geojson │ │ │ │ │ │ ├── PointIsNotContainedByLineBecauseOnEnd.geojson │ │ │ │ │ │ └── PointOnEndIsContainedByLinestring.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── PointIsNotContainedBYMultiPoint.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── PointIsNotContainedByPolygon.geojson │ │ │ │ │ └── PointOnPolygonBoundary.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineIsNotContainedByPolygon.geojson │ │ │ │ │ ├── LineIsNotContainedByPolygonBoundary.geojson │ │ │ │ │ ├── LineIsNotFullyContainedByPolygon.geojson │ │ │ │ │ └── issue-#1201-false.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── PolygonIsNotContainedByMultipolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── Polygon-Polygon.geojson │ │ │ │ └── Polygon-Polygon2.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ └── LineString/ │ │ │ │ ├── LineIsContainedByLine.geojson │ │ │ │ └── LinesExactlySame.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultipointsIsContainedByLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── MultiPointsContainedByMultiPoints.geojson │ │ │ │ │ └── MultiPointsEqual.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPointIsContainedByPolygonBoundary.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPolygonIsContainedByPolygon.geojson │ │ │ ├── Point/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── PointIsContainedByLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── PointIsContainedByMultiPoint.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── PointInsidePolygonBoundary.geojson │ │ │ └── Polygon/ │ │ │ ├── LineString/ │ │ │ │ ├── LineIsContainedByPolygon.geojson │ │ │ │ ├── LineIsContainedByPolygonWithNoInternalVertices.geojson │ │ │ │ ├── LineIsContainedByPolygonWithSegmentOnBoundary.geojson │ │ │ │ └── LineIsFullyContainedByPolygon.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── PolygonIsContainedByMultipolygon.geojson │ │ │ └── Polygon/ │ │ │ ├── PolygonExactSameShape.geojson │ │ │ └── PolygonIsContainedByPolygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-crosses/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── LineDoesNotCrossLine.geojson │ │ │ │ │ │ ├── LineOverlapsLine.geojson │ │ │ │ │ │ ├── LineTouchesLineBetweenVertices.geojson │ │ │ │ │ │ ├── LineTouchesLineOnEndVertex.geojson │ │ │ │ │ │ └── LineTouchesLineOnInternalVertex.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── LineDoesNotCrossPolygon.geojson │ │ │ │ └── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── MultiPointNotCrossLine.geojson │ │ │ │ │ └── MultiPointNotCrossLineEnd.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPointNotCrossPolygon.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineCrossesLineBetweenVertices.geojson │ │ │ │ │ ├── LineCrossesLineOnEndVertex.geojson │ │ │ │ │ ├── LineCrossesLineOnInternalVertex.geojson │ │ │ │ │ ├── issue-1901-horizontal.geojson │ │ │ │ │ ├── issue-1901-vertical.geojson │ │ │ │ │ ├── issue-2967-args-reversed.geojson │ │ │ │ │ └── issue-2967.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineCrossesPolygon.geojson │ │ │ │ └── LineCrossesPolygonPartial.geojson │ │ │ └── MultiPoint/ │ │ │ ├── LineString/ │ │ │ │ └── MultiPointsCrossLine.geojson │ │ │ └── Polygon/ │ │ │ └── MultiPointsCrossPolygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-disjoint/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── LineString-LineString.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ ├── LineString-Point-1.geojson │ │ │ │ │ │ └── LineString-Point-2.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── LineString-In-Polygon.geojson │ │ │ │ │ └── LineString-Polygon.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── MultiPoint-LineString.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── MultiPoint-Polygon.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── MultiPolygon-Polygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── Point-LineString-1.geojson │ │ │ │ │ │ ├── Point-LineString-2.geojson │ │ │ │ │ │ ├── Point-LineString-3.geojson │ │ │ │ │ │ └── Point-LineString-4.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── Point-MultiPoint.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ └── Point-Point.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── Point-Polygon-1.geojson │ │ │ │ │ └── Point-Polygon-2.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── Polygon-Containing-Linestring.geojson │ │ │ │ │ └── Polygon-LineString.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── Polygon-MultiPolygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── Polygon-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── Large-Inside-Small.geojson │ │ │ │ ├── Polygon-Polygon.geojson │ │ │ │ ├── Small-Inside-Large.geojson │ │ │ │ └── issue-1216.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── LineString-LineString.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── LineString-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── LineString-Polygon.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultiPoint-LineString.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── MultiPoint-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPoint-Polygon.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPolygon-Polygon.geojson │ │ │ ├── Point/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── Point-LineString.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── Point-Multipoint.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── Point-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── Point-Polygon.geojson │ │ │ └── Polygon/ │ │ │ ├── LineString/ │ │ │ │ └── Polygon-LineString.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── Polygon-MultiPolygon.geojson │ │ │ ├── Point/ │ │ │ │ └── Polygon-Point.geojson │ │ │ └── Polygon/ │ │ │ └── Polygon-Polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-equal/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── linear-rings.geojson │ │ │ │ ├── lines.geojson │ │ │ │ ├── multipoints.geojson │ │ │ │ ├── points.geojson │ │ │ │ ├── polygons.geojson │ │ │ │ ├── precision-default.geojson │ │ │ │ └── precision-options.geojson │ │ │ └── true/ │ │ │ ├── different-initials-poly.geojson │ │ │ ├── linear-rings.geojson │ │ │ ├── lines-extra-vertices.geojson │ │ │ ├── lines-reverse.geojson │ │ │ ├── lines.geojson │ │ │ ├── multipoints.geojson │ │ │ ├── points.geojson │ │ │ ├── polygons.geojson │ │ │ ├── precision-default.geojson │ │ │ ├── precision-options.geojson │ │ │ ├── reverse-lines.geojson │ │ │ └── reverse-polygons.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-intersects/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── LineString-LineString.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ └── LineString-Point.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── LineString-Polygon.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── MultiPoint-LineString.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ └── MultiPoint-Point.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── MultiPoint-Polygon.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── MultiPolygon-Polygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── Point-LineString.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── Point-Multipoint.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ └── Point-Point.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ └── Point-Polygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── Polygon-LineString.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── Polygon-MultiPolygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── Polygon-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── Polygon-Polygon.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── LineString-LineString.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString-Point-1.geojson │ │ │ │ │ └── LineString-Point-2.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineString-In-Polygon.geojson │ │ │ │ └── LineString-Polygon.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultiPoint-LineString.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultiPoint-MultiPoint.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPoint-Polygon.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPolygon-Polygon.geojson │ │ │ ├── Point/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── Point-LineString-1.geojson │ │ │ │ │ ├── Point-LineString-2.geojson │ │ │ │ │ ├── Point-LineString-3.geojson │ │ │ │ │ └── Point-LineString-4.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── Point-MultiPoint.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── Point-Point.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── Point-Polygon-1.geojson │ │ │ │ └── Point-Polygon-2.geojson │ │ │ └── Polygon/ │ │ │ ├── LineString/ │ │ │ │ ├── Polygon-Containing-Linestring.geojson │ │ │ │ └── Polygon-LineString.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── Polygon-MultiPolygon.geojson │ │ │ ├── Point/ │ │ │ │ └── Polygon-Point.geojson │ │ │ └── Polygon/ │ │ │ ├── Large-Inside-Small.geojson │ │ │ ├── Polygon-Polygon.geojson │ │ │ ├── Small-Inside-Large.geojson │ │ │ └── issue-1216.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-overlap/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── equal-linear-rings.geojson │ │ │ │ ├── equal-lines.geojson │ │ │ │ ├── equal-multipoints.geojson │ │ │ │ ├── equal-polygons.geojson │ │ │ │ ├── linear-rings.geojson │ │ │ │ ├── lines.geojson │ │ │ │ ├── multipoints.geojson │ │ │ │ ├── polygon-with-hole-polygon.geojson │ │ │ │ └── polygons.geojson │ │ │ └── true/ │ │ │ ├── linear-rings.geojson │ │ │ ├── lines.geojson │ │ │ ├── multipoints.geojson │ │ │ ├── polygon-with-hole-polygon.geojson │ │ │ ├── polygons.geojson │ │ │ ├── simple-lines.geojson │ │ │ └── single-multipoints.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-parallel/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── line1.geojson │ │ │ │ └── line2.geojson │ │ │ └── true/ │ │ │ ├── city-line.geojson │ │ │ ├── fiji.geojson │ │ │ ├── line1.geojson │ │ │ ├── line3-reverse.geojson │ │ │ ├── line3.geojson │ │ │ ├── opposites.geojson │ │ │ ├── resolute.geojson │ │ │ ├── segment1.geojson │ │ │ ├── segment2.geojson │ │ │ ├── segment3.geojson │ │ │ ├── verticals.geojson │ │ │ └── verticals3d.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-point-in-polygon/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── in/ │ │ │ ├── multipoly-with-hole.geojson │ │ │ └── poly-with-hole.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-point-on-line/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineWithOnly1SegmentIgnoreBoundary.geojson │ │ │ │ ├── LineWithOnly1SegmentIgnoreBoundaryEnd.geojson │ │ │ │ ├── PointIsOnLineButFailsWithSmallEpsilonValue.geojson │ │ │ │ ├── PointIsOnLineButFailsWithoutEpsilonForBackwardsCompatibility.geojson │ │ │ │ ├── PointOnEndFailsWhenIgnoreEndpoints.geojson │ │ │ │ ├── PointOnStartFailsWhenIgnoreEndpoints.geojson │ │ │ │ └── notOnLine.geojson │ │ │ └── true/ │ │ │ ├── LineWithOnly1Segment.geojson │ │ │ ├── LineWithOnly1SegmentOnStart.geojson │ │ │ ├── PointOnFirstSegment.geojson │ │ │ ├── PointOnLastSegment.geojson │ │ │ ├── PointOnLineEnd.geojson │ │ │ ├── PointOnLineMidVertice.geojson │ │ │ ├── PointOnLineMidpoint.geojson │ │ │ ├── PointOnLineStart.geojson │ │ │ └── PointOnLineWithEpsilon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-touches/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── LinesExactSame.geojson │ │ │ │ │ │ └── LivesOverlap.geojson │ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ │ ├── LineStringOverlapsMultiLinestring.geojson │ │ │ │ │ │ └── LineStringSameAsMultiLinestring.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ ├── LineStringDoesNotTouchMP.geojson │ │ │ │ │ │ └── LineStringTouchesMultiPointButInternal.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ └── LineDoesNotTouchMultiPoly.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── LineCrossesPolygon.geojson │ │ │ │ │ ├── LineDoesNotTouch.geojson │ │ │ │ │ └── LineWIthinPolygon.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── MultiLineStringOverlapsLine.geojson │ │ │ │ │ │ └── MultiLineStringSameAsLine.geojson │ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ │ ├── MultiLineStringsOverlap.geojson │ │ │ │ │ │ └── MultiLineStringsSame.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ ├── MpTouchesInternalMultiline.geojson │ │ │ │ │ │ └── MultiPointNotTouchMultiline.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ └── MultiLineInsideMultipoly.geojson │ │ │ │ │ ├── Point/ │ │ │ │ │ │ ├── PointNotTouchMultiLinestring.geojson │ │ │ │ │ │ └── PointTouchesMidLineString.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── MultiLineInsidePoly.geojson │ │ │ │ │ └── MultiLineNotTouchPoly.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── MultiPointTouchesInsideLine.geojson │ │ │ │ │ │ └── MultipointDoesNotTouchLine.geojson │ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ │ ├── MpDoesNotTouchMultiLine.geojson │ │ │ │ │ │ └── MpTouchesInternalMultiLine.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ ├── MultiPointDoesNotTouchMultipolygon │ │ │ │ │ │ └── multipoint-inside-multipolygon.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── MultiPointInsidePolygon.geojson │ │ │ │ │ └── MultiPointNoTouchPolygon.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── MultiPolyNotTouchLineString.geojson │ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ │ └── MultiPolyOverlapsMultiLine.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── MultiPolyNotTouchMultiPoint.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ ├── MultiPolysDoNotTouch.geojson │ │ │ │ │ │ └── MultiPolysOverlap.geojson │ │ │ │ │ └── Point/ │ │ │ │ │ └── MultiPolyNotTouchPoint.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── PointIsNotTouchLine.geojson │ │ │ │ │ │ └── PointOnMidLinestring.geojson │ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ │ ├── MpNotTouchMidLineString.geojson │ │ │ │ │ │ └── MpOnMidLineString.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ └── PointNotTouchMultipolygon.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── PointDoesNotTouchPolygon.geojson │ │ │ │ │ └── PointInsidePolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── PolyDoesNotTouchLine.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ ├── PolyNotTouchMultiLine.geojson │ │ │ │ │ └── PolyOverlapMultiLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── PolygonNoTouchMultiPoint.geojson │ │ │ │ │ └── PolygonOverlapsMultiPoint.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── PolyNotTouchMultipoly.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── PolygonDoesNotTouchPoint.geojson │ │ │ │ │ └── PolygonOverlapsPoint.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── PolygonsDontTouch.geojson │ │ │ │ └── PolygonsOverlap.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── LineTouchesEndpoint.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ ├── LineStringTouchesEnd.geojson │ │ │ │ │ └── LineStringTouchesStart.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultipointTouchesLine.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ ├── LineTouchesMultiPoly.geojson │ │ │ │ │ └── LineTouchesSecondMultiPoly.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── LineTouchesPolygon.geojson │ │ │ ├── MultiLineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultiLineTouchesLine.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ └── MultiLineTouchesMultiLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultiLineTouchesMultiPoint.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── MultiLineTouchesPoint.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiLineTouchesPolygon.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultipointTouchesLine.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ ├── MpTouchesEndMultiLine.geojson │ │ │ │ │ └── MpTouchesSecondMultiLine.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── multipoint-touches-multipolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPointIsWithinPolygon.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ ├── MultiLineString/ │ │ │ │ │ └── MultiLineTouchesMultiPoly.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultiPolyTouchesMultiPoint.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── MultiPolyTouchesMultiPoly.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── MpTouchesPoint.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── MultiPolyTouchesPoly.geojson │ │ │ ├── Point/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── PointOnEndLine.geojson │ │ │ │ │ └── PointOnStartLine.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ ├── MpOnEndLine.geojson │ │ │ │ │ └── MpOnStartLine.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ ├── PointTouchesMultipolygon.geojson │ │ │ │ │ └── PointTouchesMultipolygonHole.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── PointOnEdgePolygon.geojson │ │ │ │ ├── PointOnHole.geojson │ │ │ │ └── PointOnVerticePolygon.geojson │ │ │ └── Polygon/ │ │ │ ├── LineString/ │ │ │ │ └── PolygonTouchesLines.geojson │ │ │ ├── MultiLineString/ │ │ │ │ └── PolygonTouchesMultiline.geojson │ │ │ ├── MultiPoint/ │ │ │ │ └── PolygonTouchesMultiPoint.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── PolyTouchMultiPolys.geojson │ │ │ ├── Point/ │ │ │ │ ├── PolygonTouchesPoint.geojson │ │ │ │ └── PolygonTouchesPointVertice.geojson │ │ │ └── Polygon/ │ │ │ ├── PolygonTouchesEdges.geojson │ │ │ └── PolygonsTouchVertices.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-boolean-valid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── multipoint.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ ├── multipoly-with-2-vertices-touching.geojson │ │ │ │ │ ├── multipolygons-overlap.geojson │ │ │ │ │ └── not-enough-coords.geojson │ │ │ │ ├── Point/ │ │ │ │ │ └── point.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── not-closing-ring.geojson │ │ │ │ ├── not-enough-coords.geojson │ │ │ │ ├── polygon-with-hole-2-vertices-touching.geojson │ │ │ │ ├── polygon-with-puncture.geojson │ │ │ │ └── polygon-with-spike.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ └── linestring.geojson │ │ │ ├── MultiLineString/ │ │ │ │ └── multilinestring.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── multipoint-with-z.geojson │ │ │ │ └── multipoint.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ ├── multipolygon-touch.geojson │ │ │ │ ├── multipolygon-with-hole.geojson │ │ │ │ └── multipolygon.geojson │ │ │ ├── Point/ │ │ │ │ ├── point-with-z.geojson │ │ │ │ └── point.geojson │ │ │ └── Polygon/ │ │ │ ├── polygon-internal-hole.geojson │ │ │ ├── polygon-with-hole-1-vertice-touching.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-boolean-within/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── false/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ └── LineIsNotWithinLine.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── LineIsNotFullyWithinPolygon.geojson │ │ │ │ │ ├── LineIsNotWIthinPolygon.geojson │ │ │ │ │ └── LineIsNotWIthinPolygonBoundary.geojson │ │ │ │ ├── MultiLineString/ │ │ │ │ │ └── MultiPolygon/ │ │ │ │ │ └── skip-multilinestring-not-within-multipolygon.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── MultiPointsIsNotWIthinLine.geojson │ │ │ │ │ │ └── MultiPointsOnLineEndsIsNotWIthinLine.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── MultiPointIsNotWithinMultiPoint.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ └── multipoint-not-within-multipolygon.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── MultiPointAllOnBoundaryIsNotWithinPolygon.geojson │ │ │ │ │ └── MultiPointIsNotWithinPolygon.geojson │ │ │ │ ├── Point/ │ │ │ │ │ ├── LineString/ │ │ │ │ │ │ ├── PointIsNotWithinLine.geojson │ │ │ │ │ │ ├── PointIsNotWithinLineBecauseOnEnd.geojson │ │ │ │ │ │ └── PointOnEndIsWithinLinestring.geojson │ │ │ │ │ ├── MultiPoint/ │ │ │ │ │ │ └── PointIsNotWithinMultiPoint.geojson │ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ │ └── point-not-within-multipolygon.geojson │ │ │ │ │ └── Polygon/ │ │ │ │ │ ├── PointIsNotWithinPolygon.geojson │ │ │ │ │ └── PointOnPolygonBoundary.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── polygon-not-within-multipolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── Polygon-Polygon.geojson │ │ │ └── true/ │ │ │ ├── LineString/ │ │ │ │ ├── LineString/ │ │ │ │ │ ├── LineIsWithinLine.geojson │ │ │ │ │ └── LinesExactSame.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── LineIsContainedByPolygon.geojson │ │ │ │ ├── LineIsContainedByPolygonWithNoInternalVertices.geojson │ │ │ │ ├── LineIsContainedByPolygonWithSegmentOnBoundary.geojson │ │ │ │ └── LineIsFullyContainedByPolygon.geojson │ │ │ ├── MultiLineString/ │ │ │ │ └── MultiPolygon/ │ │ │ │ └── skip-multilinestring-within-multipolygon.geojson │ │ │ ├── MultiPoint/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── MultipointsIsWithinLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── MultiPointsWithinMultiPoints.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── multipoint-within-multipolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ ├── MultiPointIsWithinPolygon.geojson │ │ │ │ └── MultiPointSingleIsWithinPolygon.geojson │ │ │ ├── MultiPolygon/ │ │ │ │ └── MultiPolygon/ │ │ │ │ └── skip-multipolygon-within-multipolygon.geojson │ │ │ ├── Point/ │ │ │ │ ├── LineString/ │ │ │ │ │ └── PointIsWithinLine.geojson │ │ │ │ ├── MultiPoint/ │ │ │ │ │ └── PointIsWithinMultiPoint.geojson │ │ │ │ ├── MultiPolygon/ │ │ │ │ │ └── point-within-multipolygon.geojson │ │ │ │ └── Polygon/ │ │ │ │ └── PointIsWithinPolygon.geojson │ │ │ └── Polygon/ │ │ │ ├── MultiPolygon/ │ │ │ │ └── polygon-within-multipolygon.geojson │ │ │ └── Polygon/ │ │ │ ├── PolygonIsWIthinPolygon.geojson │ │ │ └── PolygonsExactSameShape.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-buffer/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection-points.geojson │ │ │ │ ├── geometry-collection-points.geojson │ │ │ │ ├── issue-#783.geojson │ │ │ │ ├── issue-#801-Ecuador.geojson │ │ │ │ ├── issue-#801.geojson │ │ │ │ ├── issue-#815.geojson │ │ │ │ ├── issue-#900.geojson │ │ │ │ ├── issue-#916.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-point.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── negative-buffer.geojson │ │ │ │ ├── north-latitude-points.geojson │ │ │ │ ├── northern-polygon.geojson │ │ │ │ ├── point.geojson │ │ │ │ └── polygon-with-holes.geojson │ │ │ └── out/ │ │ │ ├── feature-collection-points.geojson │ │ │ ├── geometry-collection-points.geojson │ │ │ ├── issue-#783.geojson │ │ │ ├── issue-#801-Ecuador.geojson │ │ │ ├── issue-#801.geojson │ │ │ ├── issue-#815.geojson │ │ │ ├── issue-#900.geojson │ │ │ ├── issue-#916.geojson │ │ │ ├── linestring.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── multi-point.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── negative-buffer.geojson │ │ │ ├── north-latitude-points.geojson │ │ │ ├── northern-polygon.geojson │ │ │ ├── point.geojson │ │ │ └── polygon-with-holes.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-center/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── imbalanced-polygon.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── points-with-weights.geojson │ │ │ │ ├── polygon-without-weights.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── feature-collection.geojson │ │ │ ├── imbalanced-polygon.geojson │ │ │ ├── linestring.geojson │ │ │ ├── point.geojson │ │ │ ├── points-with-weights.geojson │ │ │ ├── polygon-without-weights.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-center-mean/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection-negative-weights.geojson │ │ │ │ ├── feature-collection-weight.geojson │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── imbalanced-polygon.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── points-with-weights.geojson │ │ │ │ ├── polygon-with-weights.geojson │ │ │ │ ├── polygon-without-weights.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── feature-collection-negative-weights.geojson │ │ │ ├── feature-collection-weight.geojson │ │ │ ├── feature-collection.geojson │ │ │ ├── imbalanced-polygon.geojson │ │ │ ├── linestring.geojson │ │ │ ├── point.geojson │ │ │ ├── points-with-weights.geojson │ │ │ ├── polygon-with-weights.geojson │ │ │ ├── polygon-without-weights.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-center-median/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── brazil-states-weighted.json │ │ │ │ ├── brazil-states.json │ │ │ │ ├── burt-barber-rigby-problem-unweighted.json │ │ │ │ ├── burt-barber-rigby-problem.json │ │ │ │ ├── kuhn-kuenne-ukraine-problem.json │ │ │ │ ├── lines.json │ │ │ │ ├── square.json │ │ │ │ ├── squares-weighted.json │ │ │ │ ├── squares.json │ │ │ │ ├── steiners-problem-bad-weights.json │ │ │ │ ├── steiners-problem-low-tolerance.json │ │ │ │ └── steiners-problem.json │ │ │ └── out/ │ │ │ ├── brazil-states-weighted.json │ │ │ ├── brazil-states.json │ │ │ ├── burt-barber-rigby-problem-unweighted.json │ │ │ ├── burt-barber-rigby-problem.json │ │ │ ├── kuhn-kuenne-ukraine-problem.json │ │ │ ├── lines.json │ │ │ ├── square.json │ │ │ ├── squares-weighted.json │ │ │ ├── squares.json │ │ │ ├── steiners-problem-bad-weights.json │ │ │ ├── steiners-problem-low-tolerance.json │ │ │ └── steiners-problem.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-center-of-mass/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── imbalanced-polygon.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── point.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── feature-collection.geojson │ │ │ ├── imbalanced-polygon.geojson │ │ │ ├── linestring.geojson │ │ │ ├── point.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-centroid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── imbalanced-polygon.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── point.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── feature-collection.geojson │ │ │ ├── imbalanced-polygon.geojson │ │ │ ├── linestring.geojson │ │ │ ├── point.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-circle/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── circle1.geojson │ │ │ └── out/ │ │ │ └── circle1.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-clean-coords/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── clean-segment.geojson │ │ │ │ ├── closed-linestring.geojson │ │ │ │ ├── geometry.geojson │ │ │ │ ├── line-3-coords.geojson │ │ │ │ ├── multiline.geojson │ │ │ │ ├── multipoint.geojson │ │ │ │ ├── multipolygon.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── polygon-with-hole.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ ├── segment.geojson │ │ │ │ ├── simple-line.geojson │ │ │ │ ├── triangle.geojson │ │ │ │ └── triplicate-issue1255.geojson │ │ │ └── out/ │ │ │ ├── clean-segment.geojson │ │ │ ├── closed-linestring.geojson │ │ │ ├── geometry.geojson │ │ │ ├── line-3-coords.geojson │ │ │ ├── multiline.geojson │ │ │ ├── multipoint.geojson │ │ │ ├── multipolygon.geojson │ │ │ ├── point.geojson │ │ │ ├── polygon-with-hole.geojson │ │ │ ├── polygon.geojson │ │ │ ├── segment.geojson │ │ │ ├── simple-line.geojson │ │ │ ├── triangle.geojson │ │ │ └── triplicate-issue1255.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-clone/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-clusters/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-clusters-dbscan/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── fiji.geojson │ │ │ │ ├── many-points.geojson │ │ │ │ ├── noise.geojson │ │ │ │ ├── points-with-properties.geojson │ │ │ │ ├── points1.geojson │ │ │ │ └── points2.geojson │ │ │ └── out/ │ │ │ ├── fiji.geojson │ │ │ ├── many-points.geojson │ │ │ ├── noise.geojson │ │ │ ├── points-with-properties.geojson │ │ │ ├── points1.geojson │ │ │ └── points2.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-clusters-kmeans/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── fiji.geojson │ │ │ │ ├── many-points.geojson │ │ │ │ ├── points-with-properties.geojson │ │ │ │ ├── points1.geojson │ │ │ │ └── points2.geojson │ │ │ └── out/ │ │ │ ├── fiji.geojson │ │ │ ├── many-points.geojson │ │ │ ├── points-with-properties.geojson │ │ │ ├── points1.geojson │ │ │ └── points2.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-collect/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-combine/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-concave/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── turf-dissolve.ts │ │ │ ├── turf-line-dissolve.ts │ │ │ └── turf-polygon-dissolve.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── concave-hull.geojson │ │ │ │ ├── fiji.geojson │ │ │ │ ├── hole.geojson │ │ │ │ ├── issue-333.geojson │ │ │ │ ├── pts1.geojson │ │ │ │ ├── pts2.geojson │ │ │ │ ├── pts3.geojson │ │ │ │ └── support-null-geometry.geojson │ │ │ └── out/ │ │ │ ├── concave-hull.geojson │ │ │ ├── fiji.geojson │ │ │ ├── hole.geojson │ │ │ ├── issue-333.geojson │ │ │ ├── pts1.geojson │ │ │ ├── pts2.geojson │ │ │ ├── pts3.geojson │ │ │ └── support-null-geometry.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-convex/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── elevation1.geojson │ │ │ │ ├── elevation2.geojson │ │ │ │ ├── elevation3.geojson │ │ │ │ ├── elevation4.geojson │ │ │ │ └── elevation5.geojson │ │ │ └── out/ │ │ │ ├── elevation1.geojson │ │ │ ├── elevation2.geojson │ │ │ ├── elevation3.geojson │ │ │ ├── elevation4.geojson │ │ │ └── elevation5.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-destination/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── point-0-with-elevation.geojson │ │ │ │ ├── point-0.geojson │ │ │ │ ├── point-180.geojson │ │ │ │ ├── point-90.geojson │ │ │ │ ├── point-way-far-away-km.geojson │ │ │ │ └── point-way-far-away-miles.geojson │ │ │ └── out/ │ │ │ ├── point-0-with-elevation.geojson │ │ │ ├── point-0.geojson │ │ │ ├── point-180.geojson │ │ │ ├── point-90.geojson │ │ │ ├── point-way-far-away-km.geojson │ │ │ └── point-way-far-away-miles.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-difference/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── clip-polygons.geojson │ │ │ │ ├── completely-overlapped.geojson │ │ │ │ ├── create-hole.geojson │ │ │ │ ├── issue-#721-inverse.geojson │ │ │ │ ├── issue-#721.geojson │ │ │ │ ├── multi-polygon-input.geojson │ │ │ │ ├── multi-polygon-target.geojson │ │ │ │ ├── skip-martinez-issue-#35.geojson │ │ │ │ └── split-polygon.geojson │ │ │ └── out/ │ │ │ ├── clip-polygons.geojson │ │ │ ├── completely-overlapped.geojson │ │ │ ├── create-hole.geojson │ │ │ ├── issue-#721-inverse.geojson │ │ │ ├── issue-#721.geojson │ │ │ ├── jsts/ │ │ │ │ ├── clip-polygons.geojson │ │ │ │ ├── completely-overlapped.geojson │ │ │ │ ├── create-hole.geojson │ │ │ │ ├── issue-#721-inverse.geojson │ │ │ │ ├── issue-#721.geojson │ │ │ │ ├── multi-polygon-input.geojson │ │ │ │ ├── multi-polygon-target.geojson │ │ │ │ └── split-polygon.geojson │ │ │ ├── multi-polygon-input.geojson │ │ │ ├── multi-polygon-target.geojson │ │ │ └── split-polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-directional-mean/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── bus_route_gps.json │ │ │ │ └── bus_route_utm.json │ │ │ └── out/ │ │ │ ├── bus_route_gps.json │ │ │ ├── bus_route_gps1.json │ │ │ ├── bus_route_gps2.json │ │ │ ├── bus_route_utm1.json │ │ │ └── bus_route_utm2.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-dissolve/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── hexagons-issue#742.geojson │ │ │ │ ├── issue-1208.geojson │ │ │ │ ├── issue-1237.geojson │ │ │ │ ├── polysByProperty.geojson │ │ │ │ ├── polysWithoutProperty.geojson │ │ │ │ └── simplified-issue.geojson │ │ │ └── out/ │ │ │ ├── hexagons-issue#742.geojson │ │ │ ├── issue-1208.geojson │ │ │ ├── issue-1237.geojson │ │ │ ├── polysByProperty.geojson │ │ │ ├── polysWithoutProperty.geojson │ │ │ └── simplified-issue.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-distance/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── points.geojson │ │ │ └── out/ │ │ │ └── points.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-distance-weight/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── in/ │ │ │ ├── columbus.json │ │ │ └── point.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-ellipse/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── anti-meridian-degrees.json │ │ │ │ ├── anti-meridian.json │ │ │ │ ├── northern-latitudes-degrees.json │ │ │ │ ├── northern-latitudes.json │ │ │ │ ├── rotation-degrees.json │ │ │ │ ├── rotation.json │ │ │ │ ├── simple-degrees.json │ │ │ │ ├── simple-with-elevation.json │ │ │ │ └── simple.json │ │ │ └── out/ │ │ │ ├── anti-meridian-degrees.json │ │ │ ├── anti-meridian.json │ │ │ ├── northern-latitudes-degrees.json │ │ │ ├── northern-latitudes.json │ │ │ ├── rotation-degrees.json │ │ │ ├── rotation.json │ │ │ ├── simple-degrees.json │ │ │ ├── simple-with-elevation.json │ │ │ └── simple.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-envelope/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── in/ │ │ │ └── feature-collection.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-explode/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── geometrycollection-0-0.json │ │ │ │ ├── geometrycollection-xyz-0-6.json │ │ │ │ ├── multilinestring-0-5.json │ │ │ │ ├── multilinestring-xyz-0-11.json │ │ │ │ ├── multipoint-0-3.json │ │ │ │ ├── multipoint-xyz-0-9.json │ │ │ │ ├── multipolygon-0-4.json │ │ │ │ ├── multipolygon-xyz-0-10.json │ │ │ │ ├── one-1-0.json │ │ │ │ ├── one-2-0.json │ │ │ │ ├── point-0-2.json │ │ │ │ ├── point-xyz-0-8.json │ │ │ │ ├── polygon-0-1.json │ │ │ │ ├── polygon-with-properties.json │ │ │ │ └── polygon-xyz-0-7.json │ │ │ └── out/ │ │ │ ├── geometrycollection-0-0.json │ │ │ ├── geometrycollection-xyz-0-6.json │ │ │ ├── multilinestring-0-5.json │ │ │ ├── multilinestring-xyz-0-11.json │ │ │ ├── multipoint-0-3.json │ │ │ ├── multipoint-xyz-0-9.json │ │ │ ├── multipolygon-0-4.json │ │ │ ├── multipolygon-xyz-0-10.json │ │ │ ├── one-1-0.json │ │ │ ├── one-2-0.json │ │ │ ├── point-0-2.json │ │ │ ├── point-xyz-0-8.json │ │ │ ├── polygon-0-1.json │ │ │ ├── polygon-with-properties.json │ │ │ └── polygon-xyz-0-7.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-flatten/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── FeatureCollection.geojson │ │ │ │ ├── GeometryCollection.geojson │ │ │ │ ├── GeometryObject.geojson │ │ │ │ ├── MultiLineString.geojson │ │ │ │ ├── MultiPoint.geojson │ │ │ │ ├── MultiPolygon.geojson │ │ │ │ └── Polygon.geojson │ │ │ └── out/ │ │ │ ├── FeatureCollection.geojson │ │ │ ├── GeometryCollection.geojson │ │ │ ├── GeometryObject.geojson │ │ │ ├── MultiLineString.geojson │ │ │ ├── MultiPoint.geojson │ │ │ ├── MultiPolygon.geojson │ │ │ └── Polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-flip/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection-points.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── point-with-elevation.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── feature-collection-points.geojson │ │ │ ├── linestring.geojson │ │ │ ├── point-with-elevation.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-geojson-rbush/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── linestrings.geojson │ │ │ │ ├── points.geojson │ │ │ │ └── polygons.geojson │ │ │ └── out/ │ │ │ ├── all.linestrings.geojson │ │ │ ├── all.points.geojson │ │ │ ├── all.polygons.geojson │ │ │ ├── search.linestrings.geojson │ │ │ ├── search.points.geojson │ │ │ └── search.polygons.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-great-circle/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── basic.geojson │ │ │ └── out/ │ │ │ └── basic.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-helpers/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README_UNITS.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── geojson.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-hex-grid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── bbox1-triangles.json │ │ │ │ ├── bbox1.json │ │ │ │ ├── big-bbox.json │ │ │ │ ├── fiji-10-miles.json │ │ │ │ ├── london-20-miles.json │ │ │ │ ├── piedemont-mask.json │ │ │ │ ├── properties.json │ │ │ │ └── resolute.json │ │ │ └── out/ │ │ │ ├── bbox1-triangles.geojson │ │ │ ├── bbox1.geojson │ │ │ ├── big-bbox.geojson │ │ │ ├── fiji-10-miles.geojson │ │ │ ├── london-20-miles.geojson │ │ │ ├── piedemont-mask.geojson │ │ │ ├── properties.geojson │ │ │ └── resolute.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-interpolate/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── data-1km-bbox.geojson │ │ │ │ ├── data-1km.geojson │ │ │ │ ├── data-500m-bbox.geojson │ │ │ │ ├── data-500m.geojson │ │ │ │ ├── data-weight-2.geojson │ │ │ │ ├── hex-zValue-bbox.geojson │ │ │ │ ├── hex-zValue.geojson │ │ │ │ ├── points-random.geojson │ │ │ │ ├── points1-weight-3.geojson │ │ │ │ ├── points1.geojson │ │ │ │ └── triangle-zValue.geojson │ │ │ └── out/ │ │ │ ├── data-1km-bbox.geojson │ │ │ ├── data-1km.geojson │ │ │ ├── data-500m-bbox.geojson │ │ │ ├── data-500m.geojson │ │ │ ├── data-weight-2.geojson │ │ │ ├── hex-zValue-bbox.geojson │ │ │ ├── hex-zValue.geojson │ │ │ ├── points-random.geojson │ │ │ ├── points1-weight-3.geojson │ │ │ ├── points1.geojson │ │ │ └── triangle-zValue.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-intersect/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── Intersect1.geojson │ │ │ │ ├── Intersect2.geojson │ │ │ │ ├── armenia.geojson │ │ │ │ ├── infinite-loop-2705.geojson │ │ │ │ ├── issue-1004.geojson │ │ │ │ ├── issue-1394.geojson │ │ │ │ ├── issue-412.geojson │ │ │ │ ├── issue-702.geojson │ │ │ │ ├── issue-820.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── missing-islands-2084.geojson │ │ │ │ ├── multilinestring.geojson │ │ │ │ ├── multipoint.geojson │ │ │ │ ├── multipolygon-input.geojson │ │ │ │ ├── no-overlap.geojson │ │ │ │ ├── output-multipolygon.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── skip-issue-1132-line.geojson │ │ │ │ ├── skip-issue-1132-point.geojson │ │ │ │ ├── unable-to-complete-output-ring-2048-1.geojson │ │ │ │ └── unable-to-complete-output-ring-2048-2.geojson │ │ │ └── out/ │ │ │ ├── Intersect1.geojson │ │ │ ├── Intersect2.geojson │ │ │ ├── armenia.geojson │ │ │ ├── issue-1004.geojson │ │ │ ├── issue-1132-line.geojson │ │ │ ├── issue-1394.geojson │ │ │ ├── issue-412.geojson │ │ │ ├── issue-702.geojson │ │ │ ├── issue-820.geojson │ │ │ ├── jsts/ │ │ │ │ ├── Intersect1.geojson │ │ │ │ ├── Intersect2.geojson │ │ │ │ ├── armenia.geojson │ │ │ │ ├── issue-1004.geojson │ │ │ │ ├── issue-1132-line.geojson │ │ │ │ ├── issue-1132-point.geojson │ │ │ │ ├── issue-412.geojson │ │ │ │ ├── issue-820.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── multilinestring.geojson │ │ │ │ ├── multipoint.geojson │ │ │ │ ├── no-overlap.geojson │ │ │ │ └── point.geojson │ │ │ ├── linestring.geojson │ │ │ ├── multilinestring.geojson │ │ │ ├── multipoint.geojson │ │ │ ├── multipolygon-input.geojson │ │ │ ├── no-overlap.geojson │ │ │ ├── output-multipolygon.geojson │ │ │ └── point.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-invariant/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-isobands/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── grid-to-matrix.ts │ │ │ └── matrix-to-grid.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── 1084.json │ │ │ │ ├── 2956.json │ │ │ │ ├── bigMatrix.json │ │ │ │ ├── matrix1.json │ │ │ │ ├── matrix2.json │ │ │ │ └── pointGrid.geojson │ │ │ └── out/ │ │ │ ├── 1084.geojson │ │ │ ├── 2956.geojson │ │ │ ├── bigMatrix.geojson │ │ │ ├── matrix1.geojson │ │ │ ├── matrix2.geojson │ │ │ └── pointGrid.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-isolines/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── grid-to-matrix.ts │ │ │ └── matrix-to-grid.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── bigMatrix.json │ │ │ │ ├── matrix1.json │ │ │ │ ├── matrix2.json │ │ │ │ └── pointGrid.geojson │ │ │ └── out/ │ │ │ ├── bigMatrix.geojson │ │ │ ├── matrix1.geojson │ │ │ ├── matrix2.geojson │ │ │ └── pointGrid.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-kinks/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── sweepline-intersections-export.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── hourglass.geojson │ │ │ │ ├── issue-2627.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── open-hourglass.geojson │ │ │ │ ├── switzerlandKinked.geojson │ │ │ │ └── triple.geojson │ │ │ └── out/ │ │ │ ├── hourglass.geojson │ │ │ ├── issue-2627.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── open-hourglass.geojson │ │ │ ├── switzerlandKinked.geojson │ │ │ └── triple.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-length/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ ├── route1.geojson │ │ │ │ └── route2.geojson │ │ │ └── out/ │ │ │ ├── feature-collection.json │ │ │ ├── multi-linestring.json │ │ │ ├── multi-polygon.json │ │ │ ├── polygon.json │ │ │ ├── route1.json │ │ │ └── route2.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-arc/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── line-arc-full-360.geojson │ │ │ │ ├── line-arc-greater-360.geojson │ │ │ │ ├── line-arc-one-step.geojson │ │ │ │ ├── line-arc-zero-steps.geojson │ │ │ │ ├── line-arc1.geojson │ │ │ │ ├── line-arc2.geojson │ │ │ │ ├── line-arc3.geojson │ │ │ │ ├── line-arc4.geojson │ │ │ │ ├── line-arc5.geojson │ │ │ │ ├── line-arc6.geojson │ │ │ │ └── line-arc7.geojson │ │ │ └── out/ │ │ │ ├── line-arc-full-360.geojson │ │ │ ├── line-arc-greater-360.geojson │ │ │ ├── line-arc-one-step.geojson │ │ │ ├── line-arc-zero-steps.geojson │ │ │ ├── line-arc1.geojson │ │ │ ├── line-arc2.geojson │ │ │ ├── line-arc3.geojson │ │ │ ├── line-arc4.geojson │ │ │ ├── line-arc5.geojson │ │ │ ├── line-arc6.geojson │ │ │ └── line-arc7.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-line-chunk/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── FeatureCollection.geojson │ │ │ │ ├── GeometryCollection.geojson │ │ │ │ ├── LineString.geojson │ │ │ │ └── MultiLineString.geojson │ │ │ └── out/ │ │ │ ├── FeatureCollection.longer.geojson │ │ │ ├── FeatureCollection.reverse.geojson │ │ │ ├── FeatureCollection.shorter.geojson │ │ │ ├── GeometryCollection.longer.geojson │ │ │ ├── GeometryCollection.reverse.geojson │ │ │ ├── GeometryCollection.shorter.geojson │ │ │ ├── LineString.longer.geojson │ │ │ ├── LineString.reverse.geojson │ │ │ ├── LineString.shorter.geojson │ │ │ ├── MultiLineString.longer.geojson │ │ │ ├── MultiLineString.reverse.geojson │ │ │ └── MultiLineString.shorter.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-line-intersect/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── sweepline-intersections-export.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── 2-vertex-segment.geojson │ │ │ │ ├── double-intersect.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── polygons-with-holes.geojson │ │ │ │ ├── same-coordinates.geojson │ │ │ │ ├── self-intersecting-line.geojson │ │ │ │ ├── self-intersecting-multiline.geojson │ │ │ │ ├── self-intersecting-multipoly.geojson │ │ │ │ └── self-intersecting-poly.geojson │ │ │ └── out/ │ │ │ ├── 2-vertex-segment.geojson │ │ │ ├── double-intersect.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── polygons-with-holes.geojson │ │ │ ├── same-coordinates.geojson │ │ │ ├── self-intersecting-line.geojson │ │ │ ├── self-intersecting-multiline.geojson │ │ │ ├── self-intersecting-multipoly.geojson │ │ │ └── self-intersecting-poly.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-offset/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── intersection.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── line-concave.geojson │ │ │ │ ├── line-horizontal.geojson │ │ │ │ ├── linestring-long.geojson │ │ │ │ ├── linestring-same-start-end.geojson │ │ │ │ ├── linestring-single-segment-only.geojson │ │ │ │ ├── linestring-straight.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ └── northern-line.geojson │ │ │ ├── out/ │ │ │ │ ├── line-concave.geojson │ │ │ │ ├── line-horizontal.geojson │ │ │ │ ├── linestring-long.geojson │ │ │ │ ├── linestring-same-start-end.geojson │ │ │ │ ├── linestring-single-segment-only.geojson │ │ │ │ ├── linestring-straight.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ └── northern-line.geojson │ │ │ └── types.tst.ts │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-overlap/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── boolean-line-overlap.geojson │ │ │ │ ├── issue-#901-simplified.geojson │ │ │ │ ├── issue-#901.geojson │ │ │ │ ├── polygons.geojson │ │ │ │ ├── simple1.geojson │ │ │ │ ├── simple2.geojson │ │ │ │ └── simple3.geojson │ │ │ └── out/ │ │ │ ├── boolean-line-overlap.geojson │ │ │ ├── issue-#901-simplified.geojson │ │ │ ├── issue-#901.geojson │ │ │ ├── polygons.geojson │ │ │ ├── simple1.geojson │ │ │ ├── simple2.geojson │ │ │ └── simple3.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-line-segment/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── 2-vertex-segment.geojson │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── geometry-collection.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── polygon-with-holes.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── 2-vertex-segment.geojson │ │ │ ├── feature-collection.geojson │ │ │ ├── geometry-collection.geojson │ │ │ ├── linestring.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── polygon-with-holes.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-slice/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── avoid-duplicated-end-points.geojson │ │ │ │ ├── line1.geojson │ │ │ │ ├── line2.geojson │ │ │ │ ├── route1.geojson │ │ │ │ ├── route2.geojson │ │ │ │ └── vertical.geojson │ │ │ └── out/ │ │ │ ├── avoid-duplicated-end-points.geojson │ │ │ ├── line1.geojson │ │ │ ├── line2.geojson │ │ │ ├── route1.geojson │ │ │ ├── route2.geojson │ │ │ └── vertical.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-slice-along/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── fixtures/ │ │ │ ├── line1.geojson │ │ │ ├── route1.geojson │ │ │ └── route2.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-split/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── issue-#1075-1.geojson │ │ │ │ ├── issue-#1075-2.geojson │ │ │ │ ├── issue-#1075-3.geojson │ │ │ │ ├── issue-#1232.geojson │ │ │ │ ├── issue-#852.geojson │ │ │ │ ├── linestrings.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── multiPoint-on-line-1.geojson │ │ │ │ ├── multiPoint-on-line-2.geojson │ │ │ │ ├── point-on-line-1.geojson │ │ │ │ ├── point-on-line-2.geojson │ │ │ │ ├── point-on-line-3.geojson │ │ │ │ ├── polygon-with-holes.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── issue-#1075-1.geojson │ │ │ ├── issue-#1075-2.geojson │ │ │ ├── issue-#1075-3.geojson │ │ │ ├── issue-#1232.geojson │ │ │ ├── issue-#852.geojson │ │ │ ├── linestrings.geojson │ │ │ ├── multi-linestring.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── multiPoint-on-line-1.geojson │ │ │ ├── multiPoint-on-line-2.geojson │ │ │ ├── point-on-line-1.geojson │ │ │ ├── point-on-line-2.geojson │ │ │ ├── point-on-line-3.geojson │ │ │ ├── polygon-with-holes.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-line-to-polygon/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── collection-linestring.geojson │ │ │ │ ├── geometry-linestring.geojson │ │ │ │ ├── linestring-incomplete.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── linestrings-to-multipolygons.geojson │ │ │ │ ├── multi-linestring-incomplete.geojson │ │ │ │ ├── multi-linestring-nested.geojson │ │ │ │ ├── multi-linestring-nested2.geojson │ │ │ │ ├── multi-linestring-outer-ring-middle-position.geojson │ │ │ │ ├── multi-linestring-with-hole.geojson │ │ │ │ ├── multi-linestrings-nested.geojson │ │ │ │ ├── multi-linestrings-outer-doughnut.geojson │ │ │ │ └── multi-linestrings-with-holes.geojson │ │ │ └── out/ │ │ │ ├── collection-linestring.geojson │ │ │ ├── geometry-linestring.geojson │ │ │ ├── linestring-incomplete.geojson │ │ │ ├── linestring.geojson │ │ │ ├── linestrings-to-multipolygons.geojson │ │ │ ├── multi-linestring-incomplete.geojson │ │ │ ├── multi-linestring-nested.geojson │ │ │ ├── multi-linestring-nested2.geojson │ │ │ ├── multi-linestring-outer-ring-middle-position.geojson │ │ │ ├── multi-linestring-with-hole.geojson │ │ │ ├── multi-linestrings-nested.geojson │ │ │ ├── multi-linestrings-outer-doughnut.geojson │ │ │ └── multi-linestrings-with-holes.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-mask/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── basic.geojson │ │ │ │ ├── mask-outside.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ └── overlapping.geojson │ │ │ └── out/ │ │ │ ├── basic.geojson │ │ │ ├── mask-outside.geojson │ │ │ ├── multi-polygon.geojson │ │ │ └── overlapping.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-meta/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-midpoint/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-moran-index/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── in/ │ │ │ ├── columbus.json │ │ │ └── point.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-nearest-neighbor-analysis/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── brazil-states-bbox.json │ │ │ │ ├── brazil-states-brazil-itself-as-study-area.json │ │ │ │ ├── random-large-study-area.json │ │ │ │ ├── random-outlier.json │ │ │ │ ├── random.json │ │ │ │ └── squares.json │ │ │ └── out/ │ │ │ ├── brazil-states-bbox.json │ │ │ ├── brazil-states-brazil-itself-as-study-area.json │ │ │ ├── random-large-study-area.json │ │ │ ├── random-outlier.json │ │ │ ├── random.json │ │ │ └── squares.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-nearest-point/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── points.json │ │ │ └── out/ │ │ │ └── points.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-nearest-point-on-line/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── line-northern-latitude-#344.geojson │ │ │ │ ├── line1.geojson │ │ │ │ ├── multiLine1.geojson │ │ │ │ ├── multiLine2.geojson │ │ │ │ ├── multiLine3.geojson │ │ │ │ ├── route1.geojson │ │ │ │ └── route2.geojson │ │ │ └── out/ │ │ │ ├── expectedLocation - points behind first point.json │ │ │ ├── expectedLocation - points in front of last point.json │ │ │ ├── expectedLocation - points on joints.json │ │ │ ├── expectedLocation - points on top of line.json │ │ │ ├── line-northern-latitude-#344.geojson │ │ │ ├── line1.geojson │ │ │ ├── multiLine1.geojson │ │ │ ├── multiLine2.geojson │ │ │ ├── multiLine3.geojson │ │ │ ├── route1.geojson │ │ │ └── route2.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-nearest-point-to-line/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── fiji.geojson │ │ │ │ ├── on-line.geojson │ │ │ │ ├── one.geojson │ │ │ │ ├── resolute.geojson │ │ │ │ ├── segment.geojson │ │ │ │ └── two.geojson │ │ │ └── out/ │ │ │ ├── fiji.geojson │ │ │ ├── on-line.geojson │ │ │ ├── one.geojson │ │ │ ├── resolute.geojson │ │ │ ├── segment.geojson │ │ │ └── two.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-planepoint/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ └── in/ │ │ │ └── triangle.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-point-grid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── big-bbox.json │ │ │ │ ├── fiji-10-miles.json │ │ │ │ ├── london-20-miles.json │ │ │ │ ├── piedemont-mask.json │ │ │ │ ├── properties.json │ │ │ │ └── resolute.json │ │ │ └── out/ │ │ │ ├── big-bbox.geojson │ │ │ ├── fiji-10-miles.geojson │ │ │ ├── london-20-miles.geojson │ │ │ ├── piedemont-mask.geojson │ │ │ ├── properties.geojson │ │ │ └── resolute.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-point-on-feature/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── lines.json │ │ │ │ ├── multiline.json │ │ │ │ ├── multipoint.json │ │ │ │ ├── multipolygon.json │ │ │ │ ├── polygon-in-center.json │ │ │ │ └── polygons.json │ │ │ └── out/ │ │ │ ├── lines.json │ │ │ ├── multiline.json │ │ │ ├── multipoint.json │ │ │ ├── multipolygon.json │ │ │ ├── polygon-in-center.json │ │ │ └── polygons.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-point-to-line-distance/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── city-line1.geojson │ │ │ │ ├── city-line2.geojson │ │ │ │ ├── city-segment-inside1.geojson │ │ │ │ ├── city-segment-inside2.geojson │ │ │ │ ├── city-segment-inside3.geojson │ │ │ │ ├── city-segment-obtuse1.geojson │ │ │ │ ├── city-segment-obtuse2.geojson │ │ │ │ ├── city-segment-projected1.geojson │ │ │ │ ├── city-segment-projected2.geojson │ │ │ │ ├── issue-1156.geojson │ │ │ │ ├── line-fiji.geojson │ │ │ │ ├── line-resolute-bay.geojson │ │ │ │ ├── line1.geojson │ │ │ │ ├── line2.geojson │ │ │ │ ├── segment-fiji.geojson │ │ │ │ ├── segment1.geojson │ │ │ │ ├── segment1a.geojson │ │ │ │ ├── segment2.geojson │ │ │ │ ├── segment3.geojson │ │ │ │ └── segment4.geojson │ │ │ └── out/ │ │ │ ├── city-line1.geojson │ │ │ ├── city-line2.geojson │ │ │ ├── city-segment-inside1.geojson │ │ │ ├── city-segment-inside2.geojson │ │ │ ├── city-segment-inside3.geojson │ │ │ ├── city-segment-obtuse1.geojson │ │ │ ├── city-segment-obtuse2.geojson │ │ │ ├── city-segment-projected1.geojson │ │ │ ├── city-segment-projected2.geojson │ │ │ ├── distances.json │ │ │ ├── issue-1156.geojson │ │ │ ├── line-fiji.geojson │ │ │ ├── line-resolute-bay.geojson │ │ │ ├── line1.geojson │ │ │ ├── line2.geojson │ │ │ ├── segment-fiji.geojson │ │ │ ├── segment1.geojson │ │ │ ├── segment1a.geojson │ │ │ ├── segment2.geojson │ │ │ ├── segment3.geojson │ │ │ └── segment4.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-point-to-polygon-distance/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── test_fixtures/ │ │ │ ├── issue_2824.geojson │ │ │ ├── long-lines-poly.geojson │ │ │ ├── multi-polygon.geojson │ │ │ └── simple-polygon.geojson │ │ └── tsconfig.json │ ├── turf-points-within-polygon/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-polygon-smooth/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── close.json │ │ │ │ ├── geometry.json │ │ │ │ ├── multipolygon.json │ │ │ │ ├── multipolygonWithHole.json │ │ │ │ ├── polygon.json │ │ │ │ └── withHole.json │ │ │ └── out/ │ │ │ ├── close.json │ │ │ ├── geometry.json │ │ │ ├── multipolygon.json │ │ │ ├── multipolygonWithHole.json │ │ │ ├── polygon.json │ │ │ └── withHole.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-polygon-tangents/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── concave.geojson │ │ │ │ ├── high.geojson │ │ │ │ ├── issue#1032.geojson │ │ │ │ ├── issue#1050.geojson │ │ │ │ ├── issue#785.geojson │ │ │ │ ├── multipolygon.geojson │ │ │ │ ├── polygonWithHole.geojson │ │ │ │ └── square.geojson │ │ │ └── out/ │ │ │ ├── concave.geojson │ │ │ ├── high.geojson │ │ │ ├── issue#1032.geojson │ │ │ ├── issue#1050.geojson │ │ │ ├── issue#785.geojson │ │ │ ├── multipolygon.geojson │ │ │ ├── polygonWithHole.geojson │ │ │ └── square.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-polygon-to-line/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── geometry-polygon.geojson │ │ │ │ ├── multi-polygon-outer-doughnut.geojson │ │ │ │ ├── multi-polygon-with-holes.geojson │ │ │ │ ├── multi-polygon.geojson │ │ │ │ ├── polygon-with-hole.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── geometry-polygon.geojson │ │ │ ├── multi-polygon-outer-doughnut.geojson │ │ │ ├── multi-polygon-with-holes.geojson │ │ │ ├── multi-polygon.geojson │ │ │ ├── polygon-with-hole.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-polygonize/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── Edge.ts │ │ │ ├── EdgeRing.ts │ │ │ ├── Graph.ts │ │ │ ├── Node.ts │ │ │ └── util.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── complex.geojson │ │ │ │ ├── cutedge.geojson │ │ │ │ ├── dangle.geojson │ │ │ │ ├── kinked-linestring.geojson │ │ │ │ ├── linestrings.geojson │ │ │ │ ├── multi-linestring.geojson │ │ │ │ └── two-polygons.geojson │ │ │ └── out/ │ │ │ ├── complex.geojson │ │ │ ├── cutedge.geojson │ │ │ ├── dangle.geojson │ │ │ ├── kinked-linestring.geojson │ │ │ ├── linestrings.geojson │ │ │ ├── multi-linestring.geojson │ │ │ └── two-polygons.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-projection/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── mercator/ │ │ │ │ ├── featureCollection.geojson │ │ │ │ ├── fiji.geojson │ │ │ │ ├── geometry.geojson │ │ │ │ ├── line.geojson │ │ │ │ ├── multiLine.geojson │ │ │ │ ├── multiPolygon.geojson │ │ │ │ ├── passed-180th-meridian.geojson │ │ │ │ ├── passed-180th-meridian2.geojson │ │ │ │ ├── point.geojson │ │ │ │ └── polygon.geojson │ │ │ ├── out/ │ │ │ │ ├── mercator-featureCollection.geojson │ │ │ │ ├── mercator-fiji.geojson │ │ │ │ ├── mercator-geometry.geojson │ │ │ │ ├── mercator-multiLine.geojson │ │ │ │ ├── mercator-multiPolygon.geojson │ │ │ │ ├── mercator-passed-180th-meridian.geojson │ │ │ │ ├── mercator-passed-180th-meridian2.geojson │ │ │ │ ├── mercator-point.geojson │ │ │ │ ├── mercator-polygon.geojson │ │ │ │ ├── wgs84-featureCollection.geojson │ │ │ │ ├── wgs84-fiji.geojson │ │ │ │ ├── wgs84-geometry.geojson │ │ │ │ ├── wgs84-line.geojson │ │ │ │ ├── wgs84-multiLine.geojson │ │ │ │ ├── wgs84-multiPolygon.geojson │ │ │ │ ├── wgs84-passed-180th-meridian.geojson │ │ │ │ ├── wgs84-passed-180th-meridian2.geojson │ │ │ │ ├── wgs84-point.geojson │ │ │ │ └── wgs84-polygon.geojson │ │ │ └── wgs84/ │ │ │ ├── featureCollection.geojson │ │ │ ├── fiji.geojson │ │ │ ├── geometry.geojson │ │ │ ├── multiLine.geojson │ │ │ ├── multiPolygon.geojson │ │ │ ├── passed-180th-meridian.geojson │ │ │ ├── passed-180th-meridian2.geojson │ │ │ ├── point.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-quadrat-analysis/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── futian_bbox.json │ │ │ │ ├── futian_grid.json │ │ │ │ ├── futian_random_point.json │ │ │ │ └── shenzhen_bbox.json │ │ │ ├── out/ │ │ │ │ ├── bigBox.json │ │ │ │ ├── randomPoint.json │ │ │ │ ├── smallBox.json │ │ │ │ ├── smallGrid.json │ │ │ │ └── uniformPoint.json │ │ │ └── randomPointSet.good.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-random/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-rectangle-grid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── 10x10-1degree.json │ │ │ │ ├── australia-mask.json │ │ │ │ ├── big-bbox-500x100-miles.json │ │ │ │ ├── fiji-10x5-miles.json │ │ │ │ ├── global-grid.json │ │ │ │ └── victoria-20x100-km.json │ │ │ └── out/ │ │ │ ├── 10x10-1degree.geojson │ │ │ ├── australia-mask.geojson │ │ │ ├── big-bbox-500x100-miles.geojson │ │ │ ├── fiji-10x5-miles.geojson │ │ │ ├── global-grid.geojson │ │ │ └── victoria-20x100-km.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-rewind/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection.geojson │ │ │ │ ├── geometry-polygon-counter-clockwise.geojson │ │ │ │ ├── line-clockwise.geojson │ │ │ │ ├── line-counter-clockwise.geojson │ │ │ │ ├── polygon-clockwise.geojson │ │ │ │ └── polygon-counter-clockwise.geojson │ │ │ └── out/ │ │ │ ├── feature-collection.geojson │ │ │ ├── geometry-polygon-counter-clockwise.geojson │ │ │ ├── line-clockwise.geojson │ │ │ ├── line-counter-clockwise.geojson │ │ │ ├── polygon-clockwise.geojson │ │ │ └── polygon-counter-clockwise.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-rhumb-bearing/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ └── pair1.geojson │ │ │ └── out/ │ │ │ ├── pair1.geojson │ │ │ └── pair1.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-rhumb-destination/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── fiji-east-west-539-lng.geojson │ │ │ │ ├── fiji-east-west.geojson │ │ │ │ ├── fiji-west-east.geojson │ │ │ │ ├── point-0.geojson │ │ │ │ ├── point-180.geojson │ │ │ │ ├── point-90.geojson │ │ │ │ └── point-way-far-away.geojson │ │ │ └── out/ │ │ │ ├── fiji-east-west-539-lng.geojson │ │ │ ├── fiji-east-west.geojson │ │ │ ├── fiji-west-east.geojson │ │ │ ├── point-0.geojson │ │ │ ├── point-180.geojson │ │ │ ├── point-90.geojson │ │ │ └── point-way-far-away.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-rhumb-distance/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── fiji-539-lng.geojson │ │ │ │ ├── points-fiji.geojson │ │ │ │ ├── points1.geojson │ │ │ │ └── points2.geojson │ │ │ └── out/ │ │ │ ├── fiji-539-lng.json │ │ │ ├── points-fiji.json │ │ │ ├── points1.json │ │ │ └── points2.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-sample/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-sector/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── pacman.geojson │ │ │ │ ├── sector-full-360.geojson │ │ │ │ ├── sector-greater-360.geojson │ │ │ │ ├── sector1.geojson │ │ │ │ ├── sector2.geojson │ │ │ │ ├── sector3.geojson │ │ │ │ ├── sector4.geojson │ │ │ │ ├── sector5.geojson │ │ │ │ └── sector6.geojson │ │ │ └── out/ │ │ │ ├── pacman.geojson │ │ │ ├── sector-full-360.geojson │ │ │ ├── sector-greater-360.geojson │ │ │ ├── sector1.geojson │ │ │ ├── sector2.geojson │ │ │ ├── sector3.geojson │ │ │ ├── sector4.geojson │ │ │ ├── sector5.geojson │ │ │ └── sector6.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-shortest-path/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── javascript-astar.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── bermuda-triangle.json │ │ │ │ ├── farmland.json │ │ │ │ ├── multiple-obstacles.json │ │ │ │ └── simple.json │ │ │ └── out/ │ │ │ ├── bermuda-triangle.json │ │ │ ├── farmland.json │ │ │ ├── multiple-obstacles.json │ │ │ └── simple.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-simplify/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ └── simplify.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── argentina.geojson │ │ │ │ ├── featurecollection.geojson │ │ │ │ ├── fiji-hiQ.geojson │ │ │ │ ├── geometrycollection.geojson │ │ │ │ ├── issue-#1144.geojson │ │ │ │ ├── linestring.geojson │ │ │ │ ├── multilinestring.geojson │ │ │ │ ├── multipoint.geojson │ │ │ │ ├── multipolygon.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── poly-issue#555-5.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── simple-polygon.geojson │ │ │ └── out/ │ │ │ ├── argentina.geojson │ │ │ ├── featurecollection.geojson │ │ │ ├── fiji-hiQ.geojson │ │ │ ├── geometrycollection.geojson │ │ │ ├── issue-#1144.geojson │ │ │ ├── linestring.geojson │ │ │ ├── multilinestring.geojson │ │ │ ├── multipoint.geojson │ │ │ ├── multipolygon.geojson │ │ │ ├── point.geojson │ │ │ ├── poly-issue#555-5.geojson │ │ │ ├── polygon.geojson │ │ │ └── simple-polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-square/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-square-grid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── big-bbox.json │ │ │ │ ├── fiji-10-miles.json │ │ │ │ ├── issue-1215.geojson │ │ │ │ ├── london-20-miles.json │ │ │ │ ├── piedemont-mask.json │ │ │ │ ├── properties.json │ │ │ │ └── resolute.json │ │ │ └── out/ │ │ │ ├── big-bbox.geojson │ │ │ ├── fiji-10-miles.geojson │ │ │ ├── issue-1215.geojson │ │ │ ├── london-20-miles.geojson │ │ │ ├── piedemont-mask.geojson │ │ │ ├── properties.geojson │ │ │ └── resolute.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-standard-deviational-ellipse/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── mta-stations-unweighted.json │ │ │ │ └── mta-stations-weighted.json │ │ │ └── out/ │ │ │ ├── mta-stations-unweighted.json │ │ │ └── mta-stations-weighted.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-tag/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── tagMultiPolygons.geojson │ │ │ ├── tagMultiPolygonsPoints.geojson │ │ │ ├── tagPoints.geojson │ │ │ └── tagPolygons.geojson │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-tesselate/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── earcut.d.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test.ts │ │ └── tsconfig.json │ ├── turf-tin/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── Points.json │ │ │ ├── Tin-z.json │ │ │ └── Tin.json │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-transform-rotate/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── line.geojson │ │ │ │ ├── multiLine.geojson │ │ │ │ ├── multiPoint.geojson │ │ │ │ ├── multiPolygon.geojson │ │ │ │ ├── no-rotation.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── polygon-fiji.geojson │ │ │ │ ├── polygon-resolute-bay.geojson │ │ │ │ ├── polygon-with-hole.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── z-coord.geojson │ │ │ └── out/ │ │ │ ├── line.geojson │ │ │ ├── multiLine.geojson │ │ │ ├── multiPoint.geojson │ │ │ ├── multiPolygon.geojson │ │ │ ├── no-rotation.geojson │ │ │ ├── point.geojson │ │ │ ├── polygon-fiji.geojson │ │ │ ├── polygon-resolute-bay.geojson │ │ │ ├── polygon-with-hole.geojson │ │ │ ├── polygon.geojson │ │ │ └── z-coord.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-transform-scale/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── feature-collection-polygon.geojson │ │ │ │ ├── issue-#1059.geojson │ │ │ │ ├── line.geojson │ │ │ │ ├── multiLine.geojson │ │ │ │ ├── multiPoint.geojson │ │ │ │ ├── multiPolygon.geojson │ │ │ │ ├── no-scale.geojson │ │ │ │ ├── origin-inside-bbox.geojson │ │ │ │ ├── origin-inside-feature.geojson │ │ │ │ ├── origin-outside-bbox.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── poly-double.geojson │ │ │ │ ├── poly-half.geojson │ │ │ │ ├── polygon-fiji.geojson │ │ │ │ ├── polygon-resolute-bay.geojson │ │ │ │ ├── polygon-with-hole.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── z-scaling.geojson │ │ │ └── out/ │ │ │ ├── feature-collection-polygon.geojson │ │ │ ├── issue-#1059.geojson │ │ │ ├── issue-#895.geojson │ │ │ ├── line.geojson │ │ │ ├── multiLine.geojson │ │ │ ├── multiPoint.geojson │ │ │ ├── multiPolygon.geojson │ │ │ ├── no-scale.geojson │ │ │ ├── origin-inside-bbox.geojson │ │ │ ├── origin-inside-feature.geojson │ │ │ ├── origin-outside-bbox.geojson │ │ │ ├── point.geojson │ │ │ ├── poly-double.geojson │ │ │ ├── poly-half.geojson │ │ │ ├── polygon-fiji.geojson │ │ │ ├── polygon-resolute-bay.geojson │ │ │ ├── polygon-with-hole.geojson │ │ │ ├── polygon.geojson │ │ │ └── z-scaling.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-transform-translate/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── line.geojson │ │ │ │ ├── multiLine.geojson │ │ │ │ ├── multiPoint.geojson │ │ │ │ ├── multiPolygon.geojson │ │ │ │ ├── no-motion.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── polygon-fiji.geojson │ │ │ │ ├── polygon-resolute-bay.geojson │ │ │ │ ├── polygon-with-hole.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── z-translation.geojson │ │ │ └── out/ │ │ │ ├── line.geojson │ │ │ ├── multiLine.geojson │ │ │ ├── multiPoint.geojson │ │ │ ├── multiPolygon.geojson │ │ │ ├── no-motion.geojson │ │ │ ├── point.geojson │ │ │ ├── polygon-fiji.geojson │ │ │ ├── polygon-resolute-bay.geojson │ │ │ ├── polygon-with-hole.geojson │ │ │ ├── polygon.geojson │ │ │ └── z-translation.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-triangle-grid/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── big-bbox.json │ │ │ │ ├── fiji-10-miles.json │ │ │ │ ├── london-20-miles.json │ │ │ │ ├── piedemont-mask.json │ │ │ │ ├── properties.json │ │ │ │ └── resolute.json │ │ │ └── out/ │ │ │ ├── big-bbox.geojson │ │ │ ├── fiji-10-miles.geojson │ │ │ ├── london-20-miles.geojson │ │ │ ├── piedemont-mask.geojson │ │ │ ├── properties.geojson │ │ │ └── resolute.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-truncate/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── geometry-collection.geojson │ │ │ │ ├── linestring-geometry.geojson │ │ │ │ ├── point-elevation.geojson │ │ │ │ ├── point-geometry.geojson │ │ │ │ ├── point.geojson │ │ │ │ ├── points.geojson │ │ │ │ ├── polygon.geojson │ │ │ │ └── polygons.geojson │ │ │ └── out/ │ │ │ ├── geometry-collection.geojson │ │ │ ├── linestring-geometry.geojson │ │ │ ├── point-elevation.geojson │ │ │ ├── point-geometry.geojson │ │ │ ├── point.geojson │ │ │ ├── points.geojson │ │ │ ├── polygon.geojson │ │ │ └── polygons.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-union/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── maximum-callstack-size-exceeded-2317.geojson │ │ │ │ ├── not-overlapping.geojson │ │ │ │ ├── unable-to-complete-output-ring-1983-1.geojson │ │ │ │ ├── unable-to-complete-output-ring-1983-2.geojson │ │ │ │ ├── unable-to-find-segment-2258-1.geojson │ │ │ │ ├── unable-to-find-segment-2258-2.geojson │ │ │ │ ├── union1.geojson │ │ │ │ ├── union2.geojson │ │ │ │ ├── union3.geojson │ │ │ │ └── union4.geojson │ │ │ └── out/ │ │ │ ├── jsts/ │ │ │ │ ├── not-overlapping.geojson │ │ │ │ ├── union1.geojson │ │ │ │ ├── union2.geojson │ │ │ │ └── union3.geojson │ │ │ ├── not-overlapping.geojson │ │ │ ├── union1.geojson │ │ │ ├── union2.geojson │ │ │ ├── union3.geojson │ │ │ └── union4.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ ├── turf-unkink-polygon/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bench.ts │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── geojson-polygon-self-intersections.ts │ │ │ └── simplepolygon.ts │ │ ├── package.json │ │ ├── test/ │ │ │ ├── in/ │ │ │ │ ├── complex.geojson │ │ │ │ ├── hourglass.geojson │ │ │ │ ├── hourglassFeatureCollection.geojson │ │ │ │ ├── hourglassFeatureCollectionMultiPolygon.geojson │ │ │ │ ├── hourglassMultiPolygon.geojson │ │ │ │ ├── issue-#1094.geojson │ │ │ │ ├── polygon-with-holes.geojson │ │ │ │ └── polygon.geojson │ │ │ └── out/ │ │ │ ├── complex.geojson │ │ │ ├── hourglass.geojson │ │ │ ├── hourglassFeatureCollection.geojson │ │ │ ├── hourglassFeatureCollectionMultiPolygon.geojson │ │ │ ├── hourglassMultiPolygon.geojson │ │ │ ├── issue-#1094.geojson │ │ │ ├── polygon-with-holes.geojson │ │ │ └── polygon.geojson │ │ ├── test.ts │ │ ├── tsconfig.json │ │ └── types.ts │ └── turf-voronoi/ │ ├── LICENSE │ ├── README.md │ ├── bench.ts │ ├── index.ts │ ├── package.json │ ├── test/ │ │ ├── in/ │ │ │ ├── ninepoints.json │ │ │ ├── simple.json │ │ │ ├── with-properties.json │ │ │ └── world.json │ │ └── out/ │ │ ├── ninepoints.json │ │ ├── simple.json │ │ ├── with-properties.json │ │ └── world.json │ ├── test.ts │ └── tsconfig.json ├── pnpm-workspace.yaml ├── releases/ │ ├── 4.1.0.md │ ├── 4.2.0.md │ ├── 4.3.0.md │ ├── 4.4.0.md │ ├── 4.5.0.md │ ├── 4.6.0.md │ ├── 4.7.0.md │ ├── 5.0.0.md │ ├── 5.1.0.md │ └── 5.2.0.md ├── scripts/ │ ├── check-dependencies.js │ ├── generate-readmes.mts │ └── postfix.md ├── tsconfig.shared.json └── tsup.config.ts
SYMBOL INDEX (551 symbols across 163 files)
FILE: .monorepolint.config.mjs
constant TS_PACKAGES (line 15) | const TS_PACKAGES = [];
constant JS_PACKAGES (line 16) | const JS_PACKAGES = [];
constant MAIN_PACKAGE (line 17) | const MAIN_PACKAGE = "@turf/turf";
constant TAPE_PACKAGES (line 19) | const TAPE_PACKAGES = [];
constant TYPES_PACKAGES (line 20) | const TYPES_PACKAGES = [];
constant TSTYCHE_PACKAGES (line 21) | const TSTYCHE_PACKAGES = [];
constant BENCH_PACKAGES (line 22) | const BENCH_PACKAGES = [];
constant TS_TAPE_PACKAGES (line 54) | const TS_TAPE_PACKAGES = TAPE_PACKAGES.filter(
constant JS_TAPE_PACKAGES (line 57) | const JS_TAPE_PACKAGES = TAPE_PACKAGES.filter(
FILE: packages/turf-along/index.ts
function along (line 26) | function along(
FILE: packages/turf-angle/index.ts
function angle (line 21) | function angle(
FILE: packages/turf-area/index.ts
function area (line 20) | function area(geojson: Feature<any> | FeatureCollection<any> | Geometry) {
function calculateArea (line 37) | function calculateArea(geom: Geometry): number {
function polygonArea (line 57) | function polygonArea(coords: any) {
constant FACTOR (line 75) | const FACTOR = (earthRadius * earthRadius) / 2;
constant PI_OVER_180 (line 84) | const PI_OVER_180 = Math.PI / 180;
function ringArea (line 99) | function ringArea(coords: number[][]): number {
FILE: packages/turf-bbox-clip/index.ts
function bboxClip (line 38) | function bboxClip<
function clipPolygon (line 76) | function clipPolygon(rings: number[][][], bbox: BBox) {
FILE: packages/turf-bbox-clip/lib/lineclip.ts
function lineclip (line 5) | function lineclip(
function polygonclip (line 68) | function polygonclip(points: number[][], bbox: BBox): number[][] {
function intersect (line 100) | function intersect(
function bitCode (line 124) | function bitCode(p: number[], bbox: BBox) {
FILE: packages/turf-bbox-clip/test.ts
function colorize (line 55) | function colorize(feature, color, width) {
FILE: packages/turf-bbox-polygon/index.ts
function bboxPolygon (line 21) | function bboxPolygon<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-bbox/index.ts
function bbox (line 22) | function bbox(
FILE: packages/turf-bearing/index.ts
function bearing (line 29) | function bearing(
function calculateFinalBearing (line 64) | function calculateFinalBearing(start: Coord, end: Coord) {
FILE: packages/turf-bezier-spline/index.ts
function bezierSpline (line 36) | function bezierSpline<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-bezier-spline/lib/spline.ts
type Point (line 1) | interface Point {
class Spline (line 33) | class Spline {
method constructor (line 44) | constructor(options?: any) {
method cacheSteps (line 110) | public cacheSteps(mindist: number) {
method vector (line 132) | public vector(t: number) {
method pos (line 152) | public pos(time: number) {
function bezier (line 178) | function bezier(t: number, p1: Point, c1: Point, c2: Point, p2: Point) {
function B (line 187) | function B(t: number) {
FILE: packages/turf-bezier-spline/test.ts
function colorize (line 40) | function colorize(feature, color, width) {
FILE: packages/turf-boolean-clockwise/index.ts
function booleanClockwise (line 19) | function booleanClockwise(
FILE: packages/turf-boolean-concave/index.ts
function booleanConcave (line 16) | function booleanConcave(polygon: Feature<Polygon> | Polygon) {
FILE: packages/turf-boolean-contains/index.ts
function booleanContains (line 34) | function booleanContains(
function isPolygonInMultiPolygon (line 100) | function isPolygonInMultiPolygon(multiPolygon: MultiPolygon, polygon: Po...
function isMultiPolyInPoly (line 106) | function isMultiPolyInPoly(polygon: Polygon, multiPolygon: MultiPolygon) {
function isPointInMultiPoint (line 112) | function isPointInMultiPoint(multiPoint: MultiPoint, pt: Point) {
function isMultiPointInMultiPoint (line 124) | function isMultiPointInMultiPoint(
function isMultiPointOnLine (line 143) | function isMultiPointOnLine(lineString: LineString, multiPoint: MultiPoi...
function isMultiPointInPoly (line 159) | function isMultiPointInPoly(polygon: Polygon, multiPoint: MultiPoint) {
function isLineOnLine (line 168) | function isLineOnLine(lineString1: LineString, lineString2: LineString) {
function splitLineIntoSegmentsOnPolygon (line 189) | function splitLineIntoSegmentsOnPolygon(
function isLineInPoly (line 211) | function isLineInPoly(polygon: Polygon, linestring: LineString) {
function isPolyInPoly (line 261) | function isPolyInPoly(
function doBBoxOverlap (line 290) | function doBBoxOverlap(bbox1: BBox, bbox2: BBox) {
function compareCoords (line 314) | function compareCoords(pair1: number[], pair2: number[]) {
function getMidpoint (line 318) | function getMidpoint(pair1: number[], pair2: number[]) {
FILE: packages/turf-boolean-crosses/index.ts
function booleanCrosses (line 28) | function booleanCrosses(
function doMultiPointAndLineStringCross (line 72) | function doMultiPointAndLineStringCross(
function doLineStringsCross (line 104) | function doLineStringsCross(lineString1: LineString, lineString2: LineSt...
function doLineStringAndPolygonCross (line 139) | function doLineStringAndPolygonCross(lineString: LineString, polygon: Po...
function doesMultiPointCrossPoly (line 148) | function doesMultiPointCrossPoly(multiPoint: MultiPoint, polygon: Polygo...
function isPointOnLineSegment (line 175) | function isPointOnLineSegment(
FILE: packages/turf-boolean-disjoint/index.ts
function booleanDisjoint (line 30) | function booleanDisjoint(
function disjoint (line 64) | function disjoint(geom1: any, geom2: any, ignoreSelfIntersections: boole...
function isPointOnLine (line 102) | function isPointOnLine(lineString: LineString, pt: Point) {
function isLineOnLine (line 117) | function isLineOnLine(
function isLineInPoly (line 131) | function isLineInPoly(
function isPolyInPoly (line 161) | function isPolyInPoly(
function isPointOnLineSegment (line 187) | function isPointOnLineSegment(
function compareCoords (line 221) | function compareCoords(pair1: Position, pair2: Position) {
FILE: packages/turf-boolean-equal/index.ts
function booleanEqual (line 26) | function booleanEqual(
FILE: packages/turf-boolean-intersects/index.ts
function booleanIntersects (line 30) | function booleanIntersects(
FILE: packages/turf-boolean-overlap/index.ts
function booleanOverlap (line 29) | function booleanOverlap(
FILE: packages/turf-boolean-parallel/index.ts
function booleanParallel (line 21) | function booleanParallel(
function isParallel (line 53) | function isParallel(segment1: Position[], segment2: Position[]) {
function getType (line 67) | function getType(geojson: Geometry | Feature<any>, name: string) {
FILE: packages/turf-boolean-point-in-polygon/index.ts
function booleanPointInPolygon (line 39) | function booleanPointInPolygon<
function inBBox (line 89) | function inBBox(pt: number[], bbox: BBox) {
FILE: packages/turf-boolean-point-in-polygon/test.ts
function runTest (line 146) | function runTest(t, ignoreBoundary) {
FILE: packages/turf-boolean-point-on-line/index.ts
function booleanPointOnLine (line 22) | function booleanPointOnLine(
function isPointOnLineSegment (line 75) | function isPointOnLineSegment(
FILE: packages/turf-boolean-touches/index.ts
function booleanTouches (line 21) | function booleanTouches(
function isPointOnLineEnd (line 770) | function isPointOnLineEnd(point: Point, line: LineString) {
function compareCoords (line 790) | function compareCoords(pair1: number[], pair2: number[]) {
FILE: packages/turf-boolean-valid/index.ts
function booleanValid (line 21) | function booleanValid(feature: Feature<any> | Geometry) {
function checkRingsClose (line 91) | function checkRingsClose(geom: Position[]) {
function checkRingsForSpikesPunctures (line 98) | function checkRingsForSpikesPunctures(geom: Position[]) {
function checkPolygonAgainstOthers (line 109) | function checkPolygonAgainstOthers(
FILE: packages/turf-boolean-within/index.ts
function booleanWithin (line 34) | function booleanWithin(
function isPointInMultiPoint (line 91) | function isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {
function isMultiPointInMultiPoint (line 103) | function isMultiPointInMultiPoint(
function isMultiPointOnLine (line 123) | function isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineStri...
function isMultiPointInPoly (line 141) | function isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {
function isLineOnLine (line 160) | function isLineOnLine(lineString1: LineString, lineString2: LineString) {
function splitLineIntoSegmentsOnPolygon (line 169) | function splitLineIntoSegmentsOnPolygon(
function isLineInPoly (line 191) | function isLineInPoly(linestring: LineString, polygon: Polygon) {
function isPolyInPoly (line 241) | function isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPoly...
function doBBoxOverlap (line 255) | function doBBoxOverlap(bbox1: BBox, bbox2: BBox) {
function compareCoords (line 271) | function compareCoords(pair1: number[], pair2: number[]) {
function getMidpoint (line 283) | function getMidpoint(pair1: number[], pair2: number[]) {
FILE: packages/turf-buffer/index.d.ts
type Options (line 15) | interface Options {
FILE: packages/turf-buffer/index.js
function buffer (line 38) | function buffer(geojson, radius, options) {
function bufferFeature (line 87) | function bufferFeature(geojson, radius, units, steps) {
function coordsIsNaN (line 135) | function coordsIsNaN(coords) {
function projectCoords (line 148) | function projectCoords(coords, proj) {
function unprojectCoords (line 163) | function unprojectCoords(coords, proj) {
function defineProjection (line 177) | function defineProjection(geojson) {
FILE: packages/turf-buffer/test.ts
function colorize (line 185) | function colorize(feature, color) {
FILE: packages/turf-center-mean/index.ts
function centerMean (line 31) | function centerMean<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-center-median/index.ts
function centerMedian (line 60) | function centerMedian(
type MedianProperties (line 110) | interface MedianProperties {
function findMedian (line 125) | function findMedian(
FILE: packages/turf-center-median/test.ts
function colorize (line 56) | function colorize(point, color) {
FILE: packages/turf-center-of-mass/index.ts
function centerOfMass (line 24) | function centerOfMass<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-center/index.ts
function center (line 29) | function center<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-centroid/index.ts
function centroid (line 21) | function centroid<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-circle/index.ts
function circle (line 25) | function circle<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-clean-coords/index.ts
function cleanCoords (line 27) | function cleanCoords(
function cleanLine (line 103) | function cleanLine(line: Position[], type: string) {
function equals (line 180) | function equals(pt1: Position, pt2: Position) {
FILE: packages/turf-clone/index.ts
function clone (line 16) | function clone<T extends AllGeoJSON>(geojson: T): T {
function cloneFeature (line 46) | function cloneFeature(geojson: any) {
function cloneProperties (line 76) | function cloneProperties(properties: GeoJsonProperties) {
function cloneFeatureCollection (line 110) | function cloneFeatureCollection(geojson: any) {
function cloneGeometry (line 137) | function cloneGeometry(geometry: any) {
function deepSlice (line 160) | function deepSlice<C = any[]>(coords: C): C {
FILE: packages/turf-clusters-dbscan/index.ts
type Dbscan (line 12) | type Dbscan = "core" | "edge" | "noise";
type DbscanProps (line 22) | type DbscanProps = GeoJsonProperties & {
type IndexedPoint (line 28) | type IndexedPoint = {
function clustersDbscan (line 59) | function clustersDbscan(
FILE: packages/turf-clusters-dbscan/test.ts
function styleResult (line 80) | function styleResult(clustered) {
FILE: packages/turf-clusters-kmeans/index.ts
type KmeansProps (line 6) | type KmeansProps = GeoJsonProperties & {
function clustersKmeans (line 32) | function clustersKmeans(
FILE: packages/turf-clusters-kmeans/test.ts
function styleResult (line 68) | function styleResult(clustered) {
FILE: packages/turf-clusters/index.ts
function getCluster (line 39) | function getCluster<
function clusterEach (line 107) | function clusterEach<
function clusterReduce (line 205) | function clusterReduce<
function createBins (line 255) | function createBins(
function applyFilter (line 281) | function applyFilter(properties: any, filter: any) {
function propertiesContainsFilter (line 313) | function propertiesContainsFilter(properties: any, filter: any): boolean {
function filterProperties (line 333) | function filterProperties(
FILE: packages/turf-collect/index.ts
type Entry (line 6) | interface Entry {
function collect (line 44) | function collect(
FILE: packages/turf-combine/index.ts
function combine (line 32) | function combine(
FILE: packages/turf-concave/index.ts
function concave (line 42) | function concave(
function removeDuplicates (line 85) | function removeDuplicates(
FILE: packages/turf-concave/lib/turf-dissolve.ts
function dissolve (line 26) | function dissolve(
function getHomogenousType (line 81) | function getHomogenousType(geojson: any) {
FILE: packages/turf-concave/lib/turf-line-dissolve.ts
function lineDissolve (line 21) | function lineDissolve(
function coordId (line 85) | function coordId(coord: number[]) {
function mergeLineStrings (line 97) | function mergeLineStrings(a: Feature<LineString>, b: Feature<LineString>) {
FILE: packages/turf-concave/lib/turf-polygon-dissolve.ts
function polygonDissolve (line 17) | function polygonDissolve(
FILE: packages/turf-concave/test.ts
function stylePt (line 63) | function stylePt(pt) {
FILE: packages/turf-convex/index.ts
function convex (line 34) | function convex<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-destination/index.ts
function destination (line 40) | function destination<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-difference/index.ts
function difference (line 39) | function difference(
FILE: packages/turf-directional-mean/index.ts
type DirectionalMeanLine (line 10) | interface DirectionalMeanLine extends Feature<LineString> {
function directionalMean (line 55) | function directionalMean(
function euclideanDistance (line 156) | function euclideanDistance(coords: number[][]) {
function getLengthOfLineString (line 171) | function getLengthOfLineString(line: Feature<LineString>, isPlanar: bool...
function bearingToCartesian (line 195) | function bearingToCartesian(angle: number): number {
function getCosAndSin (line 209) | function getCosAndSin(
function getAngleBySinAndCos (line 234) | function getAngleBySinAndCos(sin1: number, cos1: number): number {
function getCircularVariance (line 253) | function getCircularVariance(sin1: number, cos1: number, len: number) {
function getMeanLineString (line 260) | function getMeanLineString(
FILE: packages/turf-dissolve/index.ts
function dissolve (line 29) | function dissolve(
FILE: packages/turf-dissolve/test.ts
constant SKIP (line 12) | const SKIP = [];
FILE: packages/turf-distance-weight/index.ts
function pNormDistance (line 14) | function pNormDistance(
function distanceWeight (line 51) | function distanceWeight(
FILE: packages/turf-distance/index.ts
function distance (line 29) | function distance(
FILE: packages/turf-ellipse/index.ts
function ellipse (line 37) | function ellipse(
FILE: packages/turf-ellipse/test.ts
function colorize (line 123) | function colorize(feature, color) {
FILE: packages/turf-envelope/index.ts
function envelope (line 24) | function envelope(geojson: AllGeoJSON): Feature<Polygon> {
FILE: packages/turf-explode/index.ts
function explode (line 21) | function explode(geojson: AllGeoJSON): FeatureCollection<Point> {
FILE: packages/turf-flatten/index.ts
function flatten (line 47) | function flatten(geojson: AllGeoJSON): FeatureCollection {
FILE: packages/turf-flip/index.ts
function flip (line 21) | function flip<T extends AllGeoJSON>(
FILE: packages/turf-geojson-rbush/index.ts
function toBBox (line 25) | function toBBox(geojson: BBox | FeatureCollection | Feature) {
class RBush (line 43) | class RBush<G extends Geometry, P extends GeoJsonProperties> {
method constructor (line 46) | constructor(maxEntries = 9) {
method insert (line 64) | insert(feature: Feature<G, P>): RBush<G, P> {
method load (line 84) | load(features: FeatureCollection<G, P> | Feature<G, P>[]): RBush<G, P> {
method remove (line 117) | remove(
method clear (line 135) | clear() {
method search (line 151) | search(geojson: Feature | FeatureCollection | BBox): FeatureCollection...
method collides (line 167) | collides(geojson: Feature | FeatureCollection | BBox): boolean {
method all (line 179) | all() {
method toJSON (line 192) | toJSON() {
method fromJSON (line 224) | fromJSON(json: any): RBush<G, P> {
function geojsonRbush (line 241) | function geojsonRbush<
FILE: packages/turf-great-circle/index.ts
function greatCircle (line 37) | function greatCircle(
FILE: packages/turf-great-circle/test.ts
function getStartEndPoints (line 36) | function getStartEndPoints(fixture: (typeof fixtures)[0]) {
FILE: packages/turf-helpers/index.ts
type Coord (line 26) | type Coord = Feature<Point> | Point | Position;
type Units (line 40) | type Units =
type AreaUnits (line 62) | type AreaUnits =
type Grid (line 72) | type Grid = "point" | "square" | "hex" | "triangle";
type Corners (line 79) | type Corners = "sw" | "se" | "nw" | "ne" | "center" | "centroid";
type Lines (line 86) | type Lines = LineString | MultiLineString | Polygon | MultiPolygon;
type AllGeoJSON (line 93) | type AllGeoJSON =
function feature (line 175) | function feature<
function geometry (line 210) | function geometry<
function point (line 262) | function point<P extends GeoJsonProperties = GeoJsonProperties>(
function points (line 307) | function points<P extends GeoJsonProperties = GeoJsonProperties>(
function polygon (line 335) | function polygon<P extends GeoJsonProperties = GeoJsonProperties>(
function polygons (line 383) | function polygons<P extends GeoJsonProperties = GeoJsonProperties>(
function lineString (line 413) | function lineString<P extends GeoJsonProperties = GeoJsonProperties>(
function lineStrings (line 447) | function lineStrings<P extends GeoJsonProperties = GeoJsonProperties>(
function featureCollection (line 482) | function featureCollection<
function multiLineString (line 517) | function multiLineString<
function multiPoint (line 548) | function multiPoint<P extends GeoJsonProperties = GeoJsonProperties>(
function multiPolygon (line 578) | function multiPolygon<P extends GeoJsonProperties = GeoJsonProperties>(
function geometryCollection (line 608) | function geometryCollection<
function round (line 643) | function round(num: number, precision = 0): number {
function radiansToLength (line 661) | function radiansToLength(
function lengthToRadians (line 682) | function lengthToRadians(
function lengthToDegrees (line 703) | function lengthToDegrees(distance: number, units?: Units): number {
function bearingToAzimuth (line 715) | function bearingToAzimuth(bearing: number): number {
function azimuthToBearing (line 731) | function azimuthToBearing(angle: number): number {
function radiansToDegrees (line 751) | function radiansToDegrees(radians: number): number {
function degreesToRadians (line 764) | function degreesToRadians(degrees: number): number {
function convertLength (line 779) | function convertLength(
function convertArea (line 799) | function convertArea(
function isNumber (line 833) | function isNumber(num: any): boolean {
function isObject (line 849) | function isObject(input: any): boolean {
function validateBBox (line 874) | function validateBBox(bbox: any): void {
function validateId (line 912) | function validateId(id: any): void {
FILE: packages/turf-helpers/lib/geojson.ts
type Id (line 10) | type Id = string | number;
FILE: packages/turf-hex-grid/index.ts
function hexGrid (line 38) | function hexGrid<P extends GeoJsonProperties = GeoJsonProperties>(
function hexagon (line 165) | function hexagon(
function hexTriangles (line 196) | function hexTriangles(
FILE: packages/turf-interpolate/index.ts
function interpolate (line 40) | function interpolate<T extends Grid = "square">(
FILE: packages/turf-interpolate/test.ts
function colorize (line 114) | function colorize(grid, property, name) {
FILE: packages/turf-intersect/index.ts
function intersect (line 47) | function intersect<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-invariant/index.ts
function getCoord (line 26) | function getCoord(coord: Feature<Point> | Point | number[]): number[] {
function getCoords (line 67) | function getCoords<
function containsNumber (line 104) | function containsNumber(coordinates: any[]): boolean {
function geojsonType (line 128) | function geojsonType(value: any, type: string, name: string): void {
function featureOf (line 155) | function featureOf(feature: Feature<any>, type: string, name: string): v...
function collectionOf (line 189) | function collectionOf(
function getGeom (line 242) | function getGeom<G extends Geometry>(geojson: Feature<G> | G): G {
function getType (line 267) | function getType(
FILE: packages/turf-isobands/index.ts
type GroupRingProps (line 24) | type GroupRingProps = { [prop: string]: string };
type GroupedRings (line 25) | type GroupedRings =
function isobands (line 44) | function isobands(
function createContourLines (line 126) | function createContourLines(
function getSegments (line 201) | function getSegments(
function assembleRings (line 382) | function assembleRings(
function rescaleContours (line 541) | function rescaleContours(
function orderByArea (line 587) | function orderByArea(ringsCoords: Position[][]): Position[][] {
function groupNestedRings (line 611) | function groupNestedRings(orderedLinearRings: Position[][]): Position[][...
function isInside (line 656) | function isInside(
function allGrouped (line 674) | function allGrouped(
function getAdjacentContour (line 694) | function getAdjacentContour(
FILE: packages/turf-isobands/lib/grid-to-matrix.ts
function gridToMatrix (line 38) | function gridToMatrix(
function sortPointsByLatLng (line 82) | function sortPointsByLatLng(points: FeatureCollection<Point>, flip: bool...
FILE: packages/turf-isobands/lib/matrix-to-grid.ts
function matrixToGrid (line 35) | function matrixToGrid(
FILE: packages/turf-isolines/index.ts
function isolines (line 44) | function isolines(
function createIsoLines (line 115) | function createIsoLines(
function isoContours (line 135) | function isoContours(
function rescaleIsolines (line 357) | function rescaleIsolines(
FILE: packages/turf-isolines/lib/grid-to-matrix.ts
function gridToMatrix (line 38) | function gridToMatrix(
function sortPointsByLatLng (line 82) | function sortPointsByLatLng(points: FeatureCollection<Point>, flip: bool...
FILE: packages/turf-isolines/lib/matrix-to-grid.ts
function matrixToGrid (line 35) | function matrixToGrid(
FILE: packages/turf-kinks/index.ts
function kinks (line 34) | function kinks<T extends LineString | MultiLineString | Polygon | MultiP...
function lineIntersects (line 107) | function lineIntersects(
FILE: packages/turf-length/index.ts
function length (line 22) | function length(
FILE: packages/turf-line-arc/index.ts
function lineArc (line 30) | function lineArc(
function convertAngleTo360 (line 85) | function convertAngleTo360(alpha: number) {
FILE: packages/turf-line-chunk/index.ts
function lineChunk (line 32) | function lineChunk<T extends LineString | MultiLineString>(
function sliceLineSegments (line 87) | function sliceLineSegments(
FILE: packages/turf-line-chunk/test.ts
function colorize (line 115) | function colorize(geojson: any) {
FILE: packages/turf-line-intersect/index.ts
function lineIntersect (line 32) | function lineIntersect<
FILE: packages/turf-line-offset/index.ts
function lineOffset (line 31) | function lineOffset<T extends LineString | MultiLineString>(
function lineOffsetFeature (line 74) | function lineOffsetFeature(
function processSegment (line 130) | function processSegment(
FILE: packages/turf-line-offset/lib/intersection.ts
function ab (line 14) | function ab(segment: [number, number][]): [number, number] {
function crossProduct (line 28) | function crossProduct(v1: [number, number], v2: [number, number]) {
function add (line 40) | function add(v1: [number, number], v2: [number, number]): [number, numbe...
function sub (line 52) | function sub(v1: [number, number], v2: [number, number]): [number, numbe...
function scalarMult (line 64) | function scalarMult(s: number, v: [number, number]): [number, number] {
function intersectSegments (line 76) | function intersectSegments(
function isParallel (line 101) | function isParallel(a: [number, number][], b: [number, number][]): boole...
function intersection (line 115) | function intersection(
FILE: packages/turf-line-overlap/index.ts
function lineOverlap (line 37) | function lineOverlap<
function concatSegment (line 148) | function concatSegment(
FILE: packages/turf-line-overlap/test.ts
function colorize (line 91) | function colorize(features, color = "#F00", width = 25) {
FILE: packages/turf-line-segment/index.ts
function lineSegment (line 28) | function lineSegment<
function lineSegmentFeature (line 52) | function lineSegmentFeature(
function createSegments (line 84) | function createSegments(coords: number[][], properties: any) {
function bbox (line 103) | function bbox(coords1: number[], coords2: number[]): BBox {
FILE: packages/turf-line-segment/test.ts
function colorSegments (line 57) | function colorSegments(segments) {
FILE: packages/turf-line-slice-along/index.ts
function lineSliceAlong (line 30) | function lineSliceAlong(
FILE: packages/turf-line-slice/index.ts
function lineSlice (line 35) | function lineSlice(
function fixSegmentIndexBounds (line 69) | function fixSegmentIndexBounds(
FILE: packages/turf-line-split/index.ts
type Splitter (line 21) | type Splitter = Feature<
function lineSplit (line 44) | function lineSplit<T extends LineString>(
function splitLineWithPoints (line 107) | function splitLineWithPoints(
function splitLineWithPoint (line 161) | function splitLineWithPoint(
function findClosestFeature (line 230) | function findClosestFeature(
function pointsEquals (line 259) | function pointsEquals(pt1: number[], pt2: number[]) {
FILE: packages/turf-line-split/test.ts
function colorize (line 344) | function colorize(geojson: FeatureCollection) {
FILE: packages/turf-line-to-polygon/index.ts
function lineToPolygon (line 34) | function lineToPolygon<G extends LineString | MultiLineString>(
function lineStringToPolygon (line 77) | function lineStringToPolygon<G extends LineString | MultiLineString>(
function autoCompleteCoords (line 129) | function autoCompleteCoords(coords: Position[]) {
function calculateArea (line 149) | function calculateArea(bbox: BBox) {
FILE: packages/turf-mask/bench.ts
constant SKIP (line 20) | const SKIP = ["multi-polygon.geojson", "overlapping.geojson"];
FILE: packages/turf-mask/index.ts
function mask (line 31) | function mask<T extends Polygon | MultiPolygon>(
function unionFc (line 72) | function unionFc(fc: FeatureCollection<Polygon | MultiPolygon>) {
function createGeomFromPolygonClippingOutput (line 95) | function createGeomFromPolygonClippingOutput(unioned: Position[][][]) {
function createMask (line 106) | function createMask(mask: Feature<Polygon> | Polygon | undefined) {
FILE: packages/turf-mask/test.ts
constant SKIP (line 19) | const SKIP = ["multi-polygon.geojson", "overlapping.geojson"];
FILE: packages/turf-meta/index.ts
function coordEach (line 53) | function coordEach(
function coordReduce (line 281) | function coordReduce<Reducer>(
function propEach (line 351) | function propEach<Props extends GeoJsonProperties>(
function propReduce (line 415) | function propReduce<Reducer, P extends GeoJsonProperties = GeoJsonProper...
function featureEach (line 466) | function featureEach<
function featureReduce (line 530) | function featureReduce<
function coordAll (line 573) | function coordAll(geojson: AllGeoJSON): number[][] {
function geomEach (line 616) | function geomEach<
function geomReduce (line 818) | function geomReduce<
function flattenEach (line 898) | function flattenEach<
function flattenReduce (line 1016) | function flattenReduce<
function segmentEach (line 1097) | function segmentEach<P extends GeoJsonProperties = GeoJsonProperties>(
function segmentReduce (line 1228) | function segmentReduce<
function lineEach (line 1311) | function lineEach<P extends GeoJsonProperties = GeoJsonProperties>(
function lineReduce (line 1408) | function lineReduce<Reducer, P extends GeoJsonProperties = GeoJsonProper...
function findSegment (line 1479) | function findSegment<
function findPoint (line 1633) | function findPoint<
FILE: packages/turf-meta/test.ts
function collection (line 101) | function collection(feature) {
function featureAndCollection (line 110) | function featureAndCollection(geometry) {
FILE: packages/turf-midpoint/index.ts
function midpoint (line 26) | function midpoint(point1: Coord, point2: Coord): Feature<Point> {
FILE: packages/turf-moran-index/index.ts
type MoranIndex (line 12) | type MoranIndex = {
function moranIndex (line 62) | function moranIndex(
function mean (line 139) | function mean(y: number[]): number {
function variance (line 154) | function variance(y: number[]): number {
FILE: packages/turf-nearest-neighbor-analysis/index.ts
type NearestNeighborStatistics (line 33) | interface NearestNeighborStatistics {
type NearestNeighborStudyArea (line 50) | interface NearestNeighborStudyArea extends Feature<Polygon> {
function nearestNeighborAnalysis (line 108) | function nearestNeighborAnalysis(
FILE: packages/turf-nearest-point-on-line/index.ts
function nearestPointOnLine (line 55) | function nearestPointOnLine<G extends LineString | MultiLineString>(
type Vector (line 187) | type Vector = [number, number, number];
function dot (line 189) | function dot(v1: Vector, v2: Vector): number {
function cross (line 196) | function cross(v1: Vector, v2: Vector): Vector {
function magnitude (line 202) | function magnitude(v: Vector): number {
function normalize (line 206) | function normalize(v: Vector): Vector {
function lngLatToVector (line 211) | function lngLatToVector(a: Position): Vector {
function vectorToLngLat (line 221) | function vectorToLngLat(v: Vector): Position {
function nearestPointOnSegment (line 233) | function nearestPointOnSegment(
FILE: packages/turf-nearest-point-to-line/index.ts
function nearestPointToLine (line 37) | function nearestPointToLine<P = { dist: number; [key: string]: any }>(
function normalize (line 93) | function normalize(points: any): FeatureCollection<Point> {
FILE: packages/turf-nearest-point/index.ts
type NearestPoint (line 7) | interface NearestPoint<P extends GeoJsonProperties = GeoJsonProperties>
function nearestPoint (line 41) | function nearestPoint<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-planepoint/index.ts
function planepoint (line 38) | function planepoint(
FILE: packages/turf-point-grid/index.ts
function pointGrid (line 35) | function pointGrid<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-point-on-feature/index.ts
function pointOnFeature (line 35) | function pointOnFeature(geojson: AllGeoJSON): Feature<Point> {
function normalize (line 134) | function normalize(geojson: AllGeoJSON) {
function pointOnSegment (line 144) | function pointOnSegment(
FILE: packages/turf-point-to-line-distance/index.ts
function pointToLineDistance (line 35) | function pointToLineDistance(
function distanceToSegment (line 95) | function distanceToSegment(
function dot (line 132) | function dot(u: number[], v: number[]) {
FILE: packages/turf-point-to-polygon-distance/index.ts
function pointToPolygonDistance (line 30) | function pointToPolygonDistance(
FILE: packages/turf-points-within-polygon/index.ts
function pointsWithinPolygon (line 50) | function pointsWithinPolygon<
FILE: packages/turf-polygon-smooth/index.ts
function polygonSmooth (line 28) | function polygonSmooth(
function processPolygon (line 85) | function processPolygon(poly: Polygon, tempOutput: Position[][]) {
function processMultiPolygon (line 129) | function processMultiPolygon(poly: MultiPolygon, tempOutput: Position[][...
FILE: packages/turf-polygon-tangents/index.ts
function polygonTangents (line 32) | function polygonTangents<T extends Polygon | MultiPolygon>(
function processPolygon (line 111) | function processPolygon(
function isAbove (line 139) | function isAbove(point1: Position, point2: Position, point3: Position) {
function isBelow (line 143) | function isBelow(point1: Position, point2: Position, point3: Position) {
function isLeft (line 147) | function isLeft(point1: Position, point2: Position, point3: Position) {
FILE: packages/turf-polygon-to-line/index.ts
function polygonToLine (line 30) | function polygonToLine<
function singlePolygonToLine (line 56) | function singlePolygonToLine<
function multiPolygonToLine (line 77) | function multiPolygonToLine<
function coordsToLine (line 102) | function coordsToLine<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-polygonize/index.ts
function polygonize (line 30) | function polygonize<T extends LineString | MultiLineString>(
FILE: packages/turf-polygonize/lib/Edge.ts
class Edge (line 9) | class Edge {
method getSymetric (line 22) | getSymetric() {
method constructor (line 35) | constructor(from: Node, to: Node) {
method deleteEdge (line 51) | deleteEdge() {
method isEqual (line 64) | isEqual(edge: Edge) {
method toString (line 68) | toString() {
method toLineString (line 77) | toLineString() {
method compareTo (line 91) | compareTo(edge: Edge) {
FILE: packages/turf-polygonize/lib/EdgeRing.ts
class EdgeRing (line 20) | class EdgeRing {
method constructor (line 35) | constructor() {
method push (line 47) | push(edge: Edge) {
method get (line 59) | get(i: number) {
method length (line 69) | get length() {
method forEach (line 79) | forEach(f: (edge: Edge, index: number, array: Edge[]) => void) {
method map (line 90) | map<T>(f: (edge: Edge, index: number, array: Edge[]) => T): T[] {
method some (line 101) | some(f: (edge: Edge, index: number, array: Edge[]) => boolean) {
method isValid (line 115) | isValid() {
method isHole (line 129) | isHole() {
method toMultiPoint (line 159) | toMultiPoint() {
method toPolygon (line 169) | toPolygon() {
method getEnvelope (line 182) | getEnvelope() {
method findEdgeRingContaining (line 198) | static findEdgeRingContaining(
method inside (line 243) | inside(pt: Feature<Point>) {
FILE: packages/turf-polygonize/lib/Graph.ts
function validateGeoJson (line 20) | function validateGeoJson(geoJson: AllGeoJSON) {
class Graph (line 44) | class Graph {
method fromGeoJson (line 55) | static fromGeoJson(
method getNode (line 88) | getNode(coordinates: number[]) {
method addEdge (line 104) | addEdge(from: Node, to: Node) {
method constructor (line 112) | constructor() {
method deleteDangles (line 122) | deleteDangles() {
method _removeIfDangle (line 135) | _removeIfDangle(node: Node) {
method deleteCutEdges (line 151) | deleteCutEdges() {
method _computeNextCWEdges (line 172) | _computeNextCWEdges(node?: Node) {
method _computeNextCCWEdges (line 197) | _computeNextCCWEdges(node: Node, label: number) {
method _findLabeledEdgeRings (line 237) | _findLabeledEdgeRings() {
method getEdgeRings (line 262) | getEdgeRings() {
method _findIntersectionNodes (line 294) | _findIntersectionNodes(startEdge: Edge) {
method _findEdgeRing (line 318) | _findEdgeRing(startEdge: Edge) {
method removeNode (line 337) | removeNode(node: Node) {
method removeEdge (line 348) | removeEdge(edge: Edge) {
FILE: packages/turf-polygonize/lib/Node.ts
class Node (line 7) | class Node {
method buildId (line 8) | static buildId(coordinates: number[]) {
method constructor (line 18) | constructor(coordinates: number[]) {
method removeInnerEdge (line 28) | removeInnerEdge(edge: Edge) {
method removeOuterEdge (line 32) | removeOuterEdge(edge: Edge) {
method addOuterEdge (line 42) | addOuterEdge(edge: Edge) {
method sortOuterEdges (line 53) | sortOuterEdges() {
method getOuterEdges (line 113) | getOuterEdges() {
method getOuterEdge (line 118) | getOuterEdge(i: number) {
method addInnerEdge (line 123) | addInnerEdge(edge: Edge) {
FILE: packages/turf-polygonize/lib/util.ts
function mathSign (line 6) | function mathSign(x: number) {
function orientationIndex (line 24) | function orientationIndex(p1: number[], p2: number[], q: number[]) {
function envelopeIsEqual (line 42) | function envelopeIsEqual(
function envelopeContains (line 70) | function envelopeContains(
function coordinatesEqual (line 86) | function coordinatesEqual(coord1: number[], coord2: number[]) {
FILE: packages/turf-polygonize/test.ts
function colorize (line 84) | function colorize(feature, color = "#F00", width = 6) {
FILE: packages/turf-projection/index.ts
function toMercator (line 21) | function toMercator<G = AllGeoJSON | Position>(
function toWgs84 (line 43) | function toWgs84<G = AllGeoJSON | Position>(
function convert (line 60) | function convert(
function convertToMercator (line 103) | function convertToMercator(lonLat: number[]) {
function convertToWgs84 (line 135) | function convertToWgs84(xy: number[]) {
function sign (line 153) | function sign(x: number) {
FILE: packages/turf-quadrat-analysis/index.ts
type QuadratAnalysisResult (line 8) | interface QuadratAnalysisResult {
function quadratAnalysis (line 56) | function quadratAnalysis(
constant K_TABLE (line 173) | const K_TABLE = {
function inBBox (line 201) | function inBBox(pt: number[], bbox: BBox) {
function factorial (line 213) | function factorial(num: number) {
FILE: packages/turf-random/index.ts
function randomPosition (line 30) | function randomPosition(bbox?: BBox | { bbox: BBox }): Position {
function randomPositionUnchecked (line 36) | function randomPositionUnchecked(bbox?: BBox | { bbox: BBox }): Position {
function checkBBox (line 46) | function checkBBox(bbox?: BBox | { bbox: BBox }) {
function randomPoint (line 69) | function randomPoint(
function randomPolygon (line 102) | function randomPolygon(
function randomLineString (line 194) | function randomLineString(
function vertexToCoordinate (line 257) | function vertexToCoordinate(hub: number[]) {
function rnd (line 263) | function rnd() {
function lon (line 266) | function lon() {
function lat (line 269) | function lat() {
function coordInBBox (line 273) | function coordInBBox(bbox: BBox) {
FILE: packages/turf-rectangle-grid/index.ts
function rectangleGrid (line 43) | function rectangleGrid<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-rewind/index.ts
function rewind (line 36) | function rewind<T extends AllGeoJSON>(
function rewindFeature (line 90) | function rewindFeature(
function rewindLineString (line 135) | function rewindLineString(coords: Position[], reverse: boolean) {
function rewindPolygon (line 147) | function rewindPolygon(coords: Position[][], reverse: boolean) {
FILE: packages/turf-rhumb-bearing/index.ts
function rhumbBearing (line 26) | function rhumbBearing(
function calculateRhumbBearing (line 56) | function calculateRhumbBearing(from: number[], to: number[]) {
FILE: packages/turf-rhumb-destination/index.ts
function rhumbDestination (line 37) | function rhumbDestination<P extends GeoJsonProperties = GeoJsonProperties>(
function calculateRhumbDestination (line 83) | function calculateRhumbDestination(
FILE: packages/turf-rhumb-distance/index.ts
function rhumbDistance (line 26) | function rhumbDistance(
function calculateRhumbDistance (line 64) | function calculateRhumbDistance(
FILE: packages/turf-sample/index.ts
function sample (line 24) | function sample<T extends GeometryObject>(
function getRandomSubarray (line 35) | function getRandomSubarray<T extends Geometry>(
FILE: packages/turf-sector/index.ts
function sector (line 33) | function sector(
function convertAngleTo360 (line 81) | function convertAngleTo360(alpha: number) {
FILE: packages/turf-sector/test.ts
function colorize (line 41) | function colorize(feature, color = "#FF0", width = 10) {
FILE: packages/turf-shortest-path/index.ts
function shortestPath (line 52) | function shortestPath(
function isInside (line 201) | function isInside(pt: Feature<Point>, polygons: FeatureCollection<Polygo...
FILE: packages/turf-shortest-path/lib/javascript-astar.ts
function pathTo (line 8) | function pathTo(node: GridNode) {
function getHeap (line 18) | function getHeap() {
class Graph (line 167) | class Graph {
method constructor (line 173) | constructor(gridIn: number[][], options: { diagonal?: boolean } = {}) {
method init (line 187) | init() {
method cleanDirty (line 194) | cleanDirty() {
method markDirty (line 201) | markDirty(node: GridNode) {
method neighbors (line 205) | neighbors(node: GridNode) {
method toString (line 256) | toString() {
class GridNode (line 275) | class GridNode {
method constructor (line 287) | constructor(x: number, y: number, weight: number) {
method toString (line 292) | toString() {
method getCost (line 296) | getCost(fromNeighbor: GridNode) {
method isWall (line 308) | isWall() {
class BinaryHeap (line 313) | class BinaryHeap<T> {
method constructor (line 317) | constructor(scoreFunction: (o: T) => number) {
method push (line 321) | push(element: T) {
method pop (line 329) | pop() {
method remove (line 343) | remove(node: T) {
method size (line 361) | size() {
method rescoreElement (line 365) | rescoreElement(node: T) {
method sinkDown (line 369) | sinkDown(n: number) {
method bubbleUp (line 391) | bubbleUp(n: number) {
FILE: packages/turf-simplify/index.ts
function simplify (line 48) | function simplify<T extends AllGeoJSON>(
function simplifyGeom (line 84) | function simplifyGeom(
function simplifyPolygon (line 138) | function simplifyPolygon(
function checkValidity (line 180) | function checkValidity(ring: Position[]) {
FILE: packages/turf-simplify/lib/simplify.ts
function getSqDist (line 11) | function getSqDist(p1: number[], p2: number[]) {
function getSqSegDist (line 19) | function getSqSegDist(p: number[], p1: number[], p2: number[]) {
function simplifyRadialDist (line 45) | function simplifyRadialDist(points: number[][], sqTolerance: number) {
function simplifyDPStep (line 64) | function simplifyDPStep(
function simplifyDouglasPeucker (line 93) | function simplifyDouglasPeucker(points: number[][], sqTolerance: number) {
function simplify (line 104) | function simplify(
FILE: packages/turf-square-grid/index.ts
function squareGrid (line 38) | function squareGrid<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-square/index.ts
function square (line 18) | function square(bbox: BBox): BBox {
FILE: packages/turf-standard-deviational-ellipse/index.ts
type SDEProps (line 16) | interface SDEProps {
type StandardDeviationalEllipse (line 25) | interface StandardDeviationalEllipse extends Feature<Polygon> {
function standardDeviationalEllipse (line 70) | function standardDeviationalEllipse(
function getDeviations (line 182) | function getDeviations(coordinates: Position, center: Position) {
FILE: packages/turf-standard-deviational-ellipse/test.ts
function colorize (line 45) | function colorize(
FILE: packages/turf-tag/index.ts
function tag (line 41) | function tag(
FILE: packages/turf-tesselate/index.ts
function tesselate (line 25) | function tesselate(
function processPolygon (line 51) | function processPolygon(coordinates: Position[][]) {
function flattenCoords (line 86) | function flattenCoords(data: Position[][]) {
FILE: packages/turf-tin/index.ts
type Pt (line 6) | interface Pt {
type Vertice (line 12) | interface Vertice {
function tin (line 49) | function tin(
class Triangle (line 95) | class Triangle {
method constructor (line 103) | constructor(a: Pt, b: Pt, c: Pt) {
function byX (line 128) | function byX(a: Pt, b: Pt) {
function dedup (line 132) | function dedup(edges: number[]) {
function triangulate (line 157) | function triangulate(vertices: Vertice[]) {
FILE: packages/turf-transform-rotate/index.ts
function transformRotate (line 30) | function transformRotate<T extends GeoJSON | GeometryCollection>(
FILE: packages/turf-transform-rotate/test.ts
function colorize (line 124) | function colorize(geojson: Feature) {
function makePivot (line 141) | function makePivot(pivot: Coord, geojson: GeoJSON | GeometryCollection) {
FILE: packages/turf-transform-scale/index.ts
function transformScale (line 35) | function transformScale<T extends GeoJSON | GeometryCollection>(
function scale (line 85) | function scale<T extends GeoJSON | GeometryCollection>(
function defineOrigin (line 124) | function defineOrigin(
FILE: packages/turf-transform-scale/test.ts
function colorize (line 260) | function colorize(geojson: FeatureCollection | Feature) {
function markedOrigin (line 282) | function markedOrigin(
FILE: packages/turf-transform-translate/index.ts
function transformTranslate (line 32) | function transformTranslate<T extends GeoJSON | GeometryCollection>(
FILE: packages/turf-transform-translate/test.ts
function colorize (line 139) | function colorize(geojson: Feature) {
FILE: packages/turf-triangle-grid/index.ts
function triangleGrid (line 33) | function triangleGrid<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-truncate/index.ts
function truncate (line 27) | function truncate<T extends AllGeoJSON>(
function truncateCoords (line 81) | function truncateCoords(coords: number[], factor: number, coordinates: n...
FILE: packages/turf-union/index.ts
function union (line 60) | function union<P extends GeoJsonProperties = GeoJsonProperties>(
FILE: packages/turf-unkink-polygon/index.ts
function unkinkPolygon (line 23) | function unkinkPolygon<T extends Polygon | MultiPolygon>(
FILE: packages/turf-unkink-polygon/lib/geojson-polygon-self-intersections.ts
function geojsonPolygonSelfIntersections (line 5) | function geojsonPolygonSelfIntersections<T>(
function intersect (line 148) | function intersect(
function equalArrays (line 179) | function equalArrays(array1: any[], array2: any[]) {
FILE: packages/turf-unkink-polygon/lib/simplepolygon.ts
function simplepolygon (line 29) | function simplepolygon(
class PseudoVtx (line 525) | class PseudoVtx {
method constructor (line 533) | constructor(
class Isect (line 548) | class Isect {
method constructor (line 558) | constructor(
function isConvex (line 578) | function isConvex(pts: number[][], righthanded?: boolean) {
function windingOfRing (line 591) | function windingOfRing(ring: number[][]) {
function equalArrays (line 616) | function equalArrays(array1: any[], array2: any[]) {
function modulo (line 637) | function modulo(n: number, m: number) {
function isUnique (line 642) | function isUnique(array: Position[]) {
FILE: packages/turf-unkink-polygon/test.ts
function colorize (line 81) | function colorize(
FILE: packages/turf-voronoi/index.ts
function coordsToPolygon (line 21) | function coordsToPolygon(coords: Position[]) {
function voronoi (line 48) | function voronoi(
FILE: packages/turf/test.ts
function testString (line 344) | function testString(turfFunction, example) {
Copy disabled (too large)
Download .json
Condensed preview — 2471 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (25,379K chars).
[
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 698,
"preview": "Please provide the following when reporting an issue:\n\n- [ ] Description of the problem, and how it differs from what yo"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 630,
"preview": "Please provide the following when creating a PR:\n\n- [ ] Meaningful title, including the name of the package being modifi"
},
{
"path": ".github/workflows/ci.yml",
"chars": 886,
"preview": "name: CI build\n\non:\n push:\n branches:\n - master\n - support/6.x\n pull_request:\n branches:\n - maste"
},
{
"path": ".github/workflows/prerelease.yml",
"chars": 1231,
"preview": "name: prerelease\n\non:\n push:\n branches: [master]\n\njobs:\n build:\n strategy:\n fail-fast: true\n matrix:\n "
},
{
"path": ".github/workflows/release.yml",
"chars": 1483,
"preview": "name: Publish release\n\non:\n push:\n tags:\n - \"v*.*.*\"\n\npermissions:\n id-token: write\n contents: write\n\njobs:\n "
},
{
"path": ".gitignore",
"chars": 355,
"preview": ".rpt2_cache\npackages/*/dist\nmain.js\nmain.es.js\nmain.mjs\nmain.min.js\nindex.mjs\n*.min.js\n*.es5.js\n.esm-cache\npackage-lock."
},
{
"path": ".husky/pre-commit",
"chars": 17,
"preview": "pnpm lint-staged\n"
},
{
"path": ".monorepolint.config.mjs",
"chars": 7062,
"preview": "// @ts-check\nimport * as path from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promi"
},
{
"path": ".prettierignore",
"chars": 149,
"preview": "dist\n*.md\nnode_modules\n\n# is actually output\npackages/turf/turf.min.js\npackages/turf/test.example.js\n\npnpm-lock.yaml\n\n/."
},
{
"path": ".prettierrc.json",
"chars": 150,
"preview": "{\n \"trailingComma\": \"es5\",\n \"overrides\": [\n {\n \"files\": \"*.{geojson,json}\",\n \"options\": {\n \"printW"
},
{
"path": "CHANGELOG.md",
"chars": 53778,
"preview": "Changelog is no longer maintained. See Turf Github [releases](https://github.com/Turfjs/turf/releases)\n\n# 7.0.0\n\n## ⚠️ "
},
{
"path": "LICENSE",
"chars": 1083,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2019 Morgan Herlocker\n\nPermission is hereby granted, free of charge, to any person "
},
{
"path": "README.md",
"chars": 4661,
"preview": "\n======\n[ is a modular geospatial analysis library designed for use in the browser "
},
{
"path": "docs/PUBLISHING.md",
"chars": 5568,
"preview": "## Publishing\n\n### Prerelease\n\nA [prerelease](https://github.com/Turfjs/turf/blob/master/.github/workflows/prerelease.ym"
},
{
"path": "docs/SECURITY.md",
"chars": 684,
"preview": "# Security Policy\n\n## Supported Versions\n\nSecurity updates are applied only to the latest release.\n\n## Reporting a Vulne"
},
{
"path": "docs/SEE_ALSO.md",
"chars": 1958,
"preview": "## Ports of Turf.js\n\nTurf has been ported to several other languages, listed below.\n\n- [Java](https://github.com/mapbox/"
},
{
"path": "documentation.yml",
"chars": 5125,
"preview": "toc:\n Measurement:\n - along\n - area\n - bbox\n - bboxPolygon\n - bearing\n - center\n - centerOfMass\n "
},
{
"path": "eslint.config.mjs",
"chars": 1671,
"preview": "import globals from \"globals\";\nimport js from \"@eslint/js\";\nimport tsEslint from \"typescript-eslint\";\nimport prettierRec"
},
{
"path": "examples/browser/index.html",
"chars": 368,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>Browser</title>\n <script src=\"https"
},
{
"path": "examples/create-react-app/.gitignore",
"chars": 5,
"preview": "build"
},
{
"path": "examples/create-react-app/package.json",
"chars": 326,
"preview": "{\n \"private\": true,\n \"name\": \"create-react-app\",\n \"scripts\": {\n \"start\": \"react-scripts start\",\n \"build\": \"reac"
},
{
"path": "examples/create-react-app/public/index.html",
"chars": 134,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>React App</title>\n </head>\n <body></"
},
{
"path": "examples/create-react-app/src/index.js",
"chars": 125,
"preview": "import { greatCircle, point } from \"@turf/turf\";\n\nconsole.log(greatCircle([0, 0], [100, 10]));\nconsole.log(point([100, 0"
},
{
"path": "examples/es-modules/index.html",
"chars": 347,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>ES Modules</title>\n </head>\n <body>\n"
},
{
"path": "examples/es-modules-single-module/index.html",
"chars": 302,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>ES Modules - Single Module</title>\n <"
},
{
"path": "lerna.json",
"chars": 199,
"preview": "{\n \"$schema\": \"node_modules/lerna/schemas/lerna-schema.json\",\n \"npmClient\": \"pnpm\",\n \"version\": \"7.3.4\",\n \"command\":"
},
{
"path": "nx.json",
"chars": 988,
"preview": "{\n \"namedInputs\": {\n \"default\": [\n \"{workspaceRoot}/pnpm-lock.yaml\",\n \"{workspaceRoot}/tsconfig.shared.jso"
},
{
"path": "package.json",
"chars": 2124,
"preview": "{\n \"private\": true,\n \"funding\": \"https://opencollective.com/turf\",\n \"scripts\": {\n \"docs\": \"node ./scripts/generate"
},
{
"path": "packages/turf/.gitignore",
"chars": 16,
"preview": "test.example.js\n"
},
{
"path": "packages/turf/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf/README.md",
"chars": 840,
"preview": "# @turf/turf\n\n# turf\n\nTurf is a modular geospatial analysis engine written in JavaScript. It performs geospatial\nprocess"
},
{
"path": "packages/turf/babel.config.json",
"chars": 154,
"preview": "{\n \"presets\": [\n [\n \"@babel/preset-env\",\n {\n \"targets\": \"> 0.25%, last 2 versions, fully supports e"
},
{
"path": "packages/turf/index.ts",
"chars": 6001,
"preview": "/**\n * Turf is a modular geospatial analysis engine written in JavaScript. It performs geospatial\n * processing tasks wi"
},
{
"path": "packages/turf/package.json",
"chars": 6973,
"preview": "{\n \"name\": \"@turf/turf\",\n \"version\": \"7.3.4\",\n \"description\": \"a JavaScript library for performing geospatial operati"
},
{
"path": "packages/turf/rollup.config.js",
"chars": 628,
"preview": "import { babel } from \"@rollup/plugin-babel\";\nimport { readFileSync } from \"fs\";\nimport commonjs from \"@rollup/plugin-co"
},
{
"path": "packages/turf/test.ts",
"chars": 12169,
"preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { glob } from \"glob\";\nimport t"
},
{
"path": "packages/turf/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-along/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-along/README.md",
"chars": 1941,
"preview": "# @turf/along\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## along\n"
},
{
"path": "packages/turf-along/bench.ts",
"chars": 1409,
"preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport Benchmark from \"benchmark\";\nim"
},
{
"path": "packages/turf-along/index.ts",
"chars": 1909,
"preview": "import { Feature, LineString, Point } from \"geojson\";\nimport { bearing } from \"@turf/bearing\";\nimport { destination } fr"
},
{
"path": "packages/turf-along/package.json",
"chars": 1714,
"preview": "{\n \"name\": \"@turf/along\",\n \"version\": \"7.3.4\",\n \"description\": \"Calculates a point along a line at a specific distanc"
},
{
"path": "packages/turf-along/test/fixtures/dc-line.geojson",
"chars": 920,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [-77.031"
},
{
"path": "packages/turf-along/test/fixtures/dc-points.geojson",
"chars": 1837,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-along/test/fixtures/route.geojson",
"chars": 146800,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {\n \"name\": null,\n \"cmt\": null,\n \"desc\": null,\n \"src\": null,\n \"link"
},
{
"path": "packages/turf-along/test.ts",
"chars": 1311,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport test from \"tape\";\nimport { loadJsonFileSync } from "
},
{
"path": "packages/turf-along/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-angle/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-angle/README.md",
"chars": 2105,
"preview": "# @turf/angle\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## angle\n"
},
{
"path": "packages/turf-angle/bench.ts",
"chars": 462,
"preview": "import Benchmark from \"benchmark\";\nimport { angle } from \"./index.js\";\n\n/**\n * Benchmark Results\n *\n * angle x 980,468 o"
},
{
"path": "packages/turf-angle/index.ts",
"chars": 2120,
"preview": "import { bearing } from \"@turf/bearing\";\nimport { bearingToAzimuth, Coord, isObject } from \"@turf/helpers\";\nimport { rhu"
},
{
"path": "packages/turf-angle/package.json",
"chars": 1823,
"preview": "{\n \"name\": \"@turf/angle\",\n \"version\": \"7.3.4\",\n \"description\": \"Finds the angle formed by two adjacent segments.\",\n "
},
{
"path": "packages/turf-angle/test.ts",
"chars": 5377,
"preview": "import test from \"tape\";\nimport { point, round } from \"@turf/helpers\";\nimport { angle } from \"./index.js\";\n\ntest(\"turf-a"
},
{
"path": "packages/turf-angle/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-area/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-area/README.md",
"chars": 1607,
"preview": "# @turf/area\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## area\n\nC"
},
{
"path": "packages/turf-area/bench.ts",
"chars": 846,
"preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loadJsonFileSync } from \"loa"
},
{
"path": "packages/turf-area/index.ts",
"chars": 3246,
"preview": "import { Feature, FeatureCollection, Geometry } from \"geojson\";\nimport { earthRadius } from \"@turf/helpers\";\nimport { ge"
},
{
"path": "packages/turf-area/package.json",
"chars": 1632,
"preview": "{\n \"name\": \"@turf/area\",\n \"version\": \"7.3.4\",\n \"description\": \"Calculates the geodesic area in square meters of one o"
},
{
"path": "packages/turf-area/test/in/polygon.geojson",
"chars": 290,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n ["
},
{
"path": "packages/turf-area/test/out/polygon.json",
"chars": 14,
"preview": "7748891609977\n"
},
{
"path": "packages/turf-area/test.ts",
"chars": 2513,
"preview": "import fs from \"fs\";\nimport test from \"tape\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loa"
},
{
"path": "packages/turf-area/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-bbox/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-bbox/README.md",
"chars": 1793,
"preview": "# @turf/bbox\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## bbox\n\nC"
},
{
"path": "packages/turf-bbox/bench.ts",
"chars": 346,
"preview": "import Benchmark from \"benchmark\";\nimport { lineString } from \"@turf/helpers\";\nimport { bbox } from \"./index.js\";\n\nconst"
},
{
"path": "packages/turf-bbox/index.ts",
"chars": 1374,
"preview": "import { BBox } from \"geojson\";\nimport { AllGeoJSON } from \"@turf/helpers\";\nimport { coordEach } from \"@turf/meta\";\n\n/**"
},
{
"path": "packages/turf-bbox/package.json",
"chars": 1581,
"preview": "{\n \"name\": \"@turf/bbox\",\n \"version\": \"7.3.4\",\n \"description\": \"Generates a bounding box around a GeoJSON feature.\",\n "
},
{
"path": "packages/turf-bbox/test.ts",
"chars": 2266,
"preview": "import test from \"tape\";\nimport {\n point,\n polygon,\n feature,\n lineString,\n multiPolygon,\n multiLineString,\n feat"
},
{
"path": "packages/turf-bbox/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-bbox-clip/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-bbox-clip/README.md",
"chars": 1926,
"preview": "# @turf/bbox-clip\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## bb"
},
{
"path": "packages/turf-bbox-clip/bench.ts",
"chars": 1275,
"preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loadJsonFileSync } from \"loa"
},
{
"path": "packages/turf-bbox-clip/index.ts",
"chars": 2604,
"preview": "import {\n BBox,\n Feature,\n LineString,\n MultiLineString,\n MultiPolygon,\n GeoJsonProperties,\n Polygon,\n} from \"geo"
},
{
"path": "packages/turf-bbox-clip/lib/lineclip.ts",
"chars": 3274,
"preview": "// Cohen-Sutherland line clipping algorithm, adapted to efficiently\n// handle polylines rather than just segments\nimport"
},
{
"path": "packages/turf-bbox-clip/package.json",
"chars": 1812,
"preview": "{\n \"name\": \"@turf/bbox-clip\",\n \"version\": \"7.3.4\",\n \"description\": \"Takes a Feature and a bbox and clips the feature "
},
{
"path": "packages/turf-bbox-clip/test/in/linestring-single-line.geojson",
"chars": 790,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-bbox-clip/test/in/linestring.geojson",
"chars": 37814,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordi"
},
{
"path": "packages/turf-bbox-clip/test/in/multi-linestring.geojson",
"chars": 1388,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-bbox-clip/test/in/multi-polygon.geojson",
"chars": 42649,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coor"
},
{
"path": "packages/turf-bbox-clip/test/in/polygon-crossing-hole.geojson",
"chars": 40285,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test/in/polygon-holes.geojson",
"chars": 40576,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test/in/polygon-point-intersection.geojson",
"chars": 966,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-bbox-clip/test/in/polygon.geojson",
"chars": 40010,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test/out/linestring-single-line.geojson",
"chars": 1428,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bbox-clip/test/out/linestring.geojson",
"chars": 62386,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordi"
},
{
"path": "packages/turf-bbox-clip/test/out/multi-linestring.geojson",
"chars": 2418,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bbox-clip/test/out/multi-polygon.geojson",
"chars": 55920,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"MultiPolygon\",\n \"coor"
},
{
"path": "packages/turf-bbox-clip/test/out/polygon-crossing-hole.geojson",
"chars": 48529,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test/out/polygon-holes.geojson",
"chars": 51285,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test/out/polygon-point-intersection.geojson",
"chars": 1445,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bbox-clip/test/out/polygon.geojson",
"chars": 60109,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinat"
},
{
"path": "packages/turf-bbox-clip/test.ts",
"chars": 2028,
"preview": "import fs from \"fs\";\nimport test from \"tape\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loa"
},
{
"path": "packages/turf-bbox-clip/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-bbox-polygon/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-bbox-polygon/README.md",
"chars": 1931,
"preview": "# @turf/bbox-polygon\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n##"
},
{
"path": "packages/turf-bbox-polygon/bench.ts",
"chars": 343,
"preview": "import Benchmark from \"benchmark\";\nimport { bboxPolygon } from \"./index.js\";\n\n/**\n * Benchmark Results\n *\n * turf-bbox-p"
},
{
"path": "packages/turf-bbox-polygon/index.ts",
"chars": 1552,
"preview": "import { BBox, Feature, Polygon, GeoJsonProperties } from \"geojson\";\nimport { polygon, Id } from \"@turf/helpers\";\n\n/**\n "
},
{
"path": "packages/turf-bbox-polygon/package.json",
"chars": 1522,
"preview": "{\n \"name\": \"@turf/bbox-polygon\",\n \"version\": \"7.3.4\",\n \"description\": \"Converts a bounding box to a GeoJSON polygon.\""
},
{
"path": "packages/turf-bbox-polygon/test.ts",
"chars": 2051,
"preview": "import test from \"tape\";\nimport { bboxPolygon } from \"./index.js\";\n\ntest(\"bbox-polygon\", (t) => {\n const poly = bboxPol"
},
{
"path": "packages/turf-bbox-polygon/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-bearing/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-bearing/README.md",
"chars": 2075,
"preview": "# @turf/bearing\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n## bear"
},
{
"path": "packages/turf-bearing/bench.ts",
"chars": 370,
"preview": "import Benchmark from \"benchmark\";\nimport { bearing } from \"./index.js\";\n\nvar start = [-75.4, 39.4];\nvar end = [-75.534,"
},
{
"path": "packages/turf-bearing/index.ts",
"chars": 2113,
"preview": "import { Coord, degreesToRadians, radiansToDegrees } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\n\n"
},
{
"path": "packages/turf-bearing/package.json",
"chars": 1609,
"preview": "{\n \"name\": \"@turf/bearing\",\n \"version\": \"7.3.4\",\n \"description\": \"Takes two points and finds the geographic bearing b"
},
{
"path": "packages/turf-bearing/test/out/results.geojson",
"chars": 994,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"marker-co"
},
{
"path": "packages/turf-bearing/test.ts",
"chars": 1505,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport test from \"tape\";\nimport { writeJsonFileSync } from"
},
{
"path": "packages/turf-bearing/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-bezier-spline/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-bezier-spline/README.md",
"chars": 2283,
"preview": "# @turf/bezier-spline\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n\n#"
},
{
"path": "packages/turf-bezier-spline/bench.ts",
"chars": 878,
"preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loadJsonFileSync } from \"loa"
},
{
"path": "packages/turf-bezier-spline/index.ts",
"chars": 2197,
"preview": "import { Feature, LineString, GeoJsonProperties } from \"geojson\";\nimport { lineString } from \"@turf/helpers\";\nimport { g"
},
{
"path": "packages/turf-bezier-spline/lib/spline.ts",
"chars": 6019,
"preview": "interface Point {\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * BezierSpline\n * https://github.com/leszekr/bezier-spl"
},
{
"path": "packages/turf-bezier-spline/package.json",
"chars": 1669,
"preview": "{\n \"name\": \"@turf/bezier-spline\",\n \"version\": \"7.3.4\",\n \"description\": \"Smooths a line into a curve using Bézier spli"
},
{
"path": "packages/turf-bezier-spline/test/in/bezierIn.json",
"chars": 727,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [-80.087"
},
{
"path": "packages/turf-bezier-spline/test/in/issue-#1063.json",
"chars": 182,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [237.581"
},
{
"path": "packages/turf-bezier-spline/test/in/simple.json",
"chars": 293,
"preview": "{\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [121.025"
},
{
"path": "packages/turf-bezier-spline/test/out/bezierIn.json",
"chars": 26700,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bezier-spline/test/out/issue-#1063.json",
"chars": 25974,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bezier-spline/test/out/simple.json",
"chars": 26695,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-bezier-spline/test.ts",
"chars": 1412,
"preview": "import fs from \"fs\";\nimport test from \"tape\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { loa"
},
{
"path": "packages/turf-bezier-spline/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-boolean-clockwise/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-boolean-clockwise/README.md",
"chars": 1788,
"preview": "# @turf/boolean-clockwise\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. --"
},
{
"path": "packages/turf-boolean-clockwise/bench.ts",
"chars": 873,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { glob } from \"glob\";\nimport Benchmark from \"benchm"
},
{
"path": "packages/turf-boolean-clockwise/index.ts",
"chars": 1011,
"preview": "import { Feature, LineString, Position } from \"geojson\";\nimport { getCoords } from \"@turf/invariant\";\n\n/**\n * Takes a ri"
},
{
"path": "packages/turf-boolean-clockwise/package.json",
"chars": 1804,
"preview": "{\n \"name\": \"@turf/boolean-clockwise\",\n \"version\": \"7.3.4\",\n \"description\": \"Takes a ring and return true or false whe"
},
{
"path": "packages/turf-boolean-clockwise/test/false/counter-clockwise-line.geojson",
"chars": 280,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-clockwise/test/true/clockwise-line.geojson",
"chars": 280,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-clockwise/test.ts",
"chars": 1827,
"preview": "import { glob } from \"glob\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport test from \"tape\";\nimpo"
},
{
"path": "packages/turf-boolean-clockwise/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-boolean-concave/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-boolean-concave/README.md",
"chars": 1409,
"preview": "# @turf/boolean-concave\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n"
},
{
"path": "packages/turf-boolean-concave/bench.ts",
"chars": 1007,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { glob } from \"glob\";\nimport Benchmark from \"benchm"
},
{
"path": "packages/turf-boolean-concave/index.ts",
"chars": 1271,
"preview": "import { Feature, Polygon } from \"geojson\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Takes a polygon and retur"
},
{
"path": "packages/turf-boolean-concave/package.json",
"chars": 1693,
"preview": "{\n \"name\": \"@turf/boolean-concave\",\n \"version\": \"7.3.4\",\n \"description\": \"Takes a polygon and return true or false as"
},
{
"path": "packages/turf-boolean-concave/test/false/3vertices.geojson",
"chars": 309,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-concave/test/false/diamond.geojson",
"chars": 534,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-concave/test/false/square.geojson",
"chars": 329,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-concave/test/true/polygon.geojson",
"chars": 353,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-concave/test/true/polygon2.geojson",
"chars": 848,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-concave/test.ts",
"chars": 1303,
"preview": "import { glob } from \"glob\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport test from \"tape\";\nimpo"
},
{
"path": "packages/turf-boolean-concave/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-boolean-contains/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-boolean-contains/README.md",
"chars": 1769,
"preview": "# @turf/boolean-contains\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->"
},
{
"path": "packages/turf-boolean-contains/bench.ts",
"chars": 4388,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { glob } from \"glob\";\nimport Benchmark from \"benchm"
},
{
"path": "packages/turf-boolean-contains/index.ts",
"chars": 9087,
"preview": "import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\""
},
{
"path": "packages/turf-boolean-contains/package.json",
"chars": 1987,
"preview": "{\n \"name\": \"@turf/boolean-contains\",\n \"version\": \"7.3.4\",\n \"description\": \"Determines whether the second geometry is "
},
{
"path": "packages/turf-boolean-contains/test/false/LineString/LineString/LineIsNotContainedByLine.geojson",
"chars": 491,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPoint/LineString/MultiPointsIsNotContainedByLine.geojson",
"chars": 492,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPoint/LineString/MultiPointsOnLineEndsIsNotContainedByLine.geojson",
"chars": 470,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPoint/MultiPoint/MultiPointIsNotContainedByMultiPoint.geojson",
"chars": 458,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPoint/Polygon/MultiPointAllOnBoundaryIsNotContainedByPolygon.geojson",
"chars": 524,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPoint/Polygon/MultiPointIsNotContainedByPolygon.geojson",
"chars": 545,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/MultiPolygon/Polygon/MultiPolygonIsNotContainedByPolygon.geojson",
"chars": 1287,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/LineString/PointIsNotContainedByLine.geojson",
"chars": 425,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/LineString/PointIsNotContainedByLineBecauseOnEnd.geojson",
"chars": 425,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/LineString/PointOnEndIsContainedByLinestring.geojson",
"chars": 425,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/MultiPoint/PointIsNotContainedBYMultiPoint.geojson",
"chars": 391,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/Polygon/PointIsNotContainedByPolygon.geojson",
"chars": 480,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Point/Polygon/PointOnPolygonBoundary.geojson",
"chars": 478,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/LineString/LineIsNotContainedByPolygon.geojson",
"chars": 544,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/LineString/LineIsNotContainedByPolygonBoundary.geojson",
"chars": 543,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/LineString/LineIsNotFullyContainedByPolygon.geojson",
"chars": 752,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/LineString/issue-#1201-false.geojson",
"chars": 811,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/MultiPolygon/PolygonIsNotContainedByMultipolygon.geojson",
"chars": 1223,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Mul"
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/Polygon/Polygon-Polygon.geojson",
"chars": 609,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/false/Polygon/Polygon/Polygon-Polygon2.geojson",
"chars": 1342,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"stroke\": "
},
{
"path": "packages/turf-boolean-contains/test/true/LineString/LineString/LineIsContainedByLine.geojson",
"chars": 490,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/LineString/LineString/LinesExactlySame.geojson",
"chars": 506,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/MultiPoint/LineString/MultipointsIsContainedByLine.geojson",
"chars": 472,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/MultiPoint/MultiPoint/MultiPointsContainedByMultiPoints.geojson",
"chars": 458,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/MultiPoint/MultiPoint/MultiPointsEqual.geojson",
"chars": 478,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/MultiPoint/Polygon/MultiPointIsContainedByPolygonBoundary.geojson",
"chars": 523,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/MultiPolygon/Polygon/MultiPolygonIsContainedByPolygon.geojson",
"chars": 1286,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Point/LineString/PointIsContainedByLine.geojson",
"chars": 425,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Point/MultiPoint/PointIsContainedByMultiPoint.geojson",
"chars": 391,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Point/Polygon/PointInsidePolygonBoundary.geojson",
"chars": 478,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/LineString/LineIsContainedByPolygon.geojson",
"chars": 543,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/LineString/LineIsContainedByPolygonWithNoInternalVertices.geojson",
"chars": 525,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/LineString/LineIsContainedByPolygonWithSegmentOnBoundary.geojson",
"chars": 541,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/LineString/LineIsFullyContainedByPolygon.geojson",
"chars": 525,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/MultiPolygon/PolygonIsContainedByMultipolygon.geojson",
"chars": 1230,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Mul"
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/Polygon/PolygonExactSameShape.geojson",
"chars": 924,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"fill\": \"#"
},
{
"path": "packages/turf-boolean-contains/test/true/Polygon/Polygon/PolygonIsContainedByPolygon.geojson",
"chars": 588,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-contains/test.ts",
"chars": 2075,
"preview": "import { glob } from \"glob\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport test from \"tape\";\nimpo"
},
{
"path": "packages/turf-boolean-contains/tsconfig.json",
"chars": 46,
"preview": "{\n \"extends\": \"../../tsconfig.shared.json\"\n}\n"
},
{
"path": "packages/turf-boolean-crosses/LICENSE",
"chars": 1073,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 TurfJS\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "packages/turf-boolean-crosses/README.md",
"chars": 2059,
"preview": "# @turf/boolean-crosses\n\n<!-- Generated by documentation.js. Update this documentation by updating the source code. -->\n"
},
{
"path": "packages/turf-boolean-crosses/bench.ts",
"chars": 1763,
"preview": "import path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { glob } from \"glob\";\nimport Benchmark from \"benchm"
},
{
"path": "packages/turf-boolean-crosses/index.ts",
"chars": 7167,
"preview": "import { Feature, Geometry, Polygon, LineString, MultiPoint } from \"geojson\";\nimport { lineIntersect } from \"@turf/line-"
},
{
"path": "packages/turf-boolean-crosses/package.json",
"chars": 1927,
"preview": "{\n \"name\": \"@turf/boolean-crosses\",\n \"version\": \"7.3.4\",\n \"description\": \"Checks if two geometries cross each other.\""
},
{
"path": "packages/turf-boolean-crosses/test/false/LineString/LineString/LineDoesNotCrossLine.geojson",
"chars": 472,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-crosses/test/false/LineString/LineString/LineOverlapsLine.geojson",
"chars": 434,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-crosses/test/false/LineString/LineString/LineTouchesLineBetweenVertices.geojson",
"chars": 473,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
},
{
"path": "packages/turf-boolean-crosses/test/false/LineString/LineString/LineTouchesLineOnEndVertex.geojson",
"chars": 471,
"preview": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {},\n \"geometry\""
}
]
// ... and 2271 more files (download for full content)
About this extraction
This page contains the full source code of the Turfjs/turf GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2471 files (50.9 MB), approximately 6.1M tokens, and a symbol index with 551 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.