| 
									
										
										
										
											2023-07-15 18:55:03 +02:00
										 |  |  | import { GeoOperations } from "../../src/Logic/GeoOperations" | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  | import { Feature, LineString, Polygon } from "geojson" | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  | import { describe, expect, it } from "vitest" | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe("GeoOperations", () => { | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |     describe("clipWith", () => { | 
					
						
							|  |  |  |         it("clipWith should clip linestrings", () => { | 
					
						
							|  |  |  |             const bbox: Feature<Polygon> = { | 
					
						
							|  |  |  |                 type: "Feature", | 
					
						
							|  |  |  |                 properties: {}, | 
					
						
							|  |  |  |                 geometry: { | 
					
						
							|  |  |  |                     coordinates: [ | 
					
						
							|  |  |  |                         [ | 
					
						
							|  |  |  |                             [3.218560377159008, 51.21600586532159], | 
					
						
							|  |  |  |                             [3.218560377159008, 51.21499687768525], | 
					
						
							|  |  |  |                             [3.2207456783268356, 51.21499687768525], | 
					
						
							|  |  |  |                             [3.2207456783268356, 51.21600586532159], | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |                             [3.218560377159008, 51.21600586532159] | 
					
						
							|  |  |  |                         ] | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |                     ], | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |                     type: "Polygon" | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |             const line: Feature<LineString> = { | 
					
						
							|  |  |  |                 type: "Feature", | 
					
						
							|  |  |  |                 properties: {}, | 
					
						
							|  |  |  |                 geometry: { | 
					
						
							|  |  |  |                     coordinates: [ | 
					
						
							|  |  |  |                         [3.218405371672816, 51.21499091846559], | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |                         [3.2208408127450525, 51.21560173433727] | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |                     ], | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |                     type: "LineString" | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |             const result = GeoOperations.clipWith(line, bbox) | 
					
						
							|  |  |  |             expect(result.length).to.equal(1) | 
					
						
							|  |  |  |             expect(result[0].geometry.type).to.eq("LineString") | 
					
						
							|  |  |  |             const clippedLine = (<Feature<LineString>>result[0]).geometry.coordinates | 
					
						
							|  |  |  |             const expCoordinates = [ | 
					
						
							| 
									
										
										
										
											2023-02-14 00:21:47 +01:00
										 |  |  |                 [3.2185604, 51.215029800031594], | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |                 [3.2207457, 51.21557787977764] | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |             ] | 
					
						
							| 
									
										
										
										
											2023-02-14 00:21:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |             expect(clippedLine).to.deep.equal(expCoordinates) | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2025-01-27 02:32:19 +01:00
										 |  |  |         it("clipWith should contain the full feature if it is fully contained", () => { | 
					
						
							|  |  |  |                 const bbox: Feature<Polygon> = { | 
					
						
							|  |  |  |                     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<Polygon> = { | 
					
						
							|  |  |  |                     "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) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-02-14 00:08:21 +01:00
										 |  |  |     }) | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  | }) |