import { GeoOperations } from "../../src/Logic/GeoOperations" import { Feature, LineString, Polygon } from "geojson" import { describe, expect, it } from "vitest" describe("GeoOperations", () => { describe("clipWith", () => { it("clipWith should clip linestrings", () => { const bbox: Feature = { type: "Feature", properties: {}, geometry: { coordinates: [ [ [3.218560377159008, 51.21600586532159], [3.218560377159008, 51.21499687768525], [3.2207456783268356, 51.21499687768525], [3.2207456783268356, 51.21600586532159], [3.218560377159008, 51.21600586532159], ], ], type: "Polygon", }, } const line: Feature = { type: "Feature", properties: {}, geometry: { coordinates: [ [3.218405371672816, 51.21499091846559], [3.2208408127450525, 51.21560173433727], ], type: "LineString", }, } const result = GeoOperations.clipWith(line, bbox) expect(result.length).to.equal(1) expect(result[0].geometry.type).to.eq("LineString") const clippedLine = (>result[0]).geometry.coordinates const expCoordinates = [ [3.2185604, 51.215029800031594], [3.2207457, 51.21557787977764], ] expect(clippedLine).to.deep.equal(expCoordinates) }) it("clipWith should contain the full feature if it is fully contained", () => { const bbox: Feature = { type: "Feature", properties: {}, geometry: { coordinates: [ [ [2.1541744759711037, 51.73994420687188], [2.1541744759711037, 50.31129074222787], [4.53247037641421, 50.31129074222787], [4.53247037641421, 51.73994420687188], [2.1541744759711037, 51.73994420687188], ], ], type: "Polygon", }, } const content: Feature = { type: "Feature", properties: {}, geometry: { coordinates: [ [ [2.8900597545854225, 50.9035099487991], [3.4872999807053873, 50.74856284865993], [3.9512276563531543, 50.947206170675486], [3.897902636163167, 51.25526892606362], [3.188679867646016, 51.24525576870511], [2.8900597545854225, 50.9035099487991], ], ], type: "Polygon", }, } const clipped = GeoOperations.clipWith(content, bbox) expect(clipped.length).to.equal(1) const clippedReverse = GeoOperations.clipWith(bbox, content) expect(clippedReverse.length).to.equal(1) }) }) })