| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  | import * as turf from "@turf/turf" | 
					
						
							| 
									
										
										
										
											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", () => { | 
					
						
							|  |  |  |     describe("calculateOverlap", () => { | 
					
						
							|  |  |  |         it("should not give too much overlap (regression test)", () => { | 
					
						
							|  |  |  |             const polyGrb = { | 
					
						
							|  |  |  |                 type: "Feature", | 
					
						
							|  |  |  |                 properties: { | 
					
						
							|  |  |  |                     osm_id: "25189153", | 
					
						
							|  |  |  |                     size_grb_building: "217.14", | 
					
						
							|  |  |  |                     "addr:housenumber": "173", | 
					
						
							|  |  |  |                     "addr:street": "Kortrijksestraat", | 
					
						
							|  |  |  |                     building: "house", | 
					
						
							|  |  |  |                     "source:geometry:entity": "Gbg", | 
					
						
							|  |  |  |                     "source:geometry:date": "2015/02/27", | 
					
						
							|  |  |  |                     "source:geometry:oidn": "1729460", | 
					
						
							|  |  |  |                     "source:geometry:uidn": "8713648", | 
					
						
							|  |  |  |                     H_DTM_MIN: "17.28", | 
					
						
							|  |  |  |                     H_DTM_GEM: "17.59", | 
					
						
							|  |  |  |                     H_DSM_MAX: "29.04", | 
					
						
							|  |  |  |                     H_DSM_P99: "28.63", | 
					
						
							|  |  |  |                     HN_MAX: "11.45", | 
					
						
							|  |  |  |                     HN_P99: "11.04", | 
					
						
							|  |  |  |                     detection_method: "from existing OSM building source: house ,hits (3)", | 
					
						
							|  |  |  |                     auto_building: "house", | 
					
						
							|  |  |  |                     size_shared: "210.68", | 
					
						
							|  |  |  |                     size_source_building: "212.63", | 
					
						
							|  |  |  |                     id: "https://betadata.grbosm.site/grb?bbox=360935.6475626023,6592540.815539878,361088.52161917265,6592693.689596449/37", | 
					
						
							|  |  |  |                     _lat: "50.83736194999996", | 
					
						
							|  |  |  |                     _lon: "3.2432137000000116", | 
					
						
							|  |  |  |                     _layer: "GRB", | 
					
						
							|  |  |  |                     _length: "48.51529464293261", | 
					
						
							|  |  |  |                     "_length:km": "0.0", | 
					
						
							|  |  |  |                     "_now:date": "2021-12-05", | 
					
						
							|  |  |  |                     "_now:datetime": "2021-12-05 21:51:40", | 
					
						
							|  |  |  |                     "_loaded:date": "2021-12-05", | 
					
						
							|  |  |  |                     "_loaded:datetime": "2021-12-05 21:51:40", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 geometry: { | 
					
						
							|  |  |  |                     type: "Polygon", | 
					
						
							|  |  |  |                     coordinates: [ | 
					
						
							|  |  |  |                         [ | 
					
						
							|  |  |  |                             [3.2431059999999974, 50.83730270000021], | 
					
						
							|  |  |  |                             [3.243174299999987, 50.83728850000007], | 
					
						
							|  |  |  |                             [3.2432116000000173, 50.83736910000003], | 
					
						
							|  |  |  |                             [3.2433214000000254, 50.83740350000011], | 
					
						
							|  |  |  |                             [3.24329779999996, 50.837435399999855], | 
					
						
							|  |  |  |                             [3.2431881000000504, 50.83740090000025], | 
					
						
							|  |  |  |                             [3.243152699999997, 50.83738980000017], | 
					
						
							|  |  |  |                             [3.2431059999999974, 50.83730270000021], | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                         ], | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |                 id: "https://betadata.grbosm.site/grb?bbox=360935.6475626023,6592540.815539878,361088.52161917265,6592693.689596449/37", | 
					
						
							|  |  |  |                 _lon: 3.2432137000000116, | 
					
						
							|  |  |  |                 _lat: 50.83736194999996, | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 bbox: { | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |                     maxLat: 50.837435399999855, | 
					
						
							|  |  |  |                     maxLon: 3.2433214000000254, | 
					
						
							|  |  |  |                     minLat: 50.83728850000007, | 
					
						
							|  |  |  |                     minLon: 3.2431059999999974, | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             const polyHouse = { | 
					
						
							|  |  |  |                 type: "Feature", | 
					
						
							|  |  |  |                 id: "way/594963177", | 
					
						
							|  |  |  |                 properties: { | 
					
						
							|  |  |  |                     timestamp: "2021-12-05T04:04:55Z", | 
					
						
							|  |  |  |                     version: 3, | 
					
						
							|  |  |  |                     changeset: 114571409, | 
					
						
							|  |  |  |                     user: "Pieter Vander Vennet", | 
					
						
							|  |  |  |                     uid: 3818858, | 
					
						
							|  |  |  |                     "addr:housenumber": "171", | 
					
						
							|  |  |  |                     "addr:street": "Kortrijksestraat", | 
					
						
							|  |  |  |                     building: "house", | 
					
						
							|  |  |  |                     "source:geometry:date": "2018-10-22", | 
					
						
							|  |  |  |                     "source:geometry:ref": "Gbg/5096537", | 
					
						
							|  |  |  |                     "_last_edit:contributor": "Pieter Vander Vennet", | 
					
						
							|  |  |  |                     "_last_edit:contributor:uid": 3818858, | 
					
						
							|  |  |  |                     "_last_edit:changeset": 114571409, | 
					
						
							|  |  |  |                     "_last_edit:timestamp": "2021-12-05T04:04:55Z", | 
					
						
							|  |  |  |                     _version_number: 3, | 
					
						
							|  |  |  |                     id: "way/594963177", | 
					
						
							|  |  |  |                     _backend: "https://www.openstreetmap.org", | 
					
						
							|  |  |  |                     _lat: "50.83736395", | 
					
						
							|  |  |  |                     _lon: "3.2430937", | 
					
						
							|  |  |  |                     _layer: "OSM-buildings", | 
					
						
							|  |  |  |                     _length: "43.561938680928506", | 
					
						
							|  |  |  |                     "_length:km": "0.0", | 
					
						
							|  |  |  |                     "_now:date": "2021-12-05", | 
					
						
							|  |  |  |                     "_now:datetime": "2021-12-05 21:51:40", | 
					
						
							|  |  |  |                     "_loaded:date": "2021-12-05", | 
					
						
							|  |  |  |                     "_loaded:datetime": "2021-12-05 21:51:39", | 
					
						
							|  |  |  |                     _surface: "93.32785810484549", | 
					
						
							|  |  |  |                     "_surface:ha": "0", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 geometry: { | 
					
						
							|  |  |  |                     type: "Polygon", | 
					
						
							|  |  |  |                     coordinates: [ | 
					
						
							|  |  |  |                         [ | 
					
						
							|  |  |  |                             [3.2429993, 50.8373243], | 
					
						
							|  |  |  |                             [3.243106, 50.8373027], | 
					
						
							|  |  |  |                             [3.2431527, 50.8373898], | 
					
						
							|  |  |  |                             [3.2431881, 50.8374009], | 
					
						
							|  |  |  |                             [3.2431691, 50.8374252], | 
					
						
							|  |  |  |                             [3.2430936, 50.837401], | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                             [3.243046, 50.8374112], | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |                             [3.2429993, 50.8373243], | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                         ], | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |                 _lon: 3.2430937, | 
					
						
							|  |  |  |                 _lat: 50.83736395, | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 bbox: { | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |                     maxLat: 50.8374252, | 
					
						
							|  |  |  |                     maxLon: 3.2431881, | 
					
						
							|  |  |  |                     minLat: 50.8373027, | 
					
						
							|  |  |  |                     minLon: 3.2429993, | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const p0 = turf.polygon(polyGrb.geometry.coordinates) | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  |             expect(p0).not.toBeNull() | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  |             const p1 = turf.polygon(polyHouse.geometry.coordinates) | 
					
						
							| 
									
										
										
										
											2023-02-03 04:48:32 +01:00
										 |  |  |             expect(p1).not.toBeNull() | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             const overlaps = GeoOperations.calculateOverlap(polyGrb, [polyHouse]) | 
					
						
							|  |  |  |             expect(overlaps).empty | 
					
						
							|  |  |  |             const overlapsRev = GeoOperations.calculateOverlap(polyHouse, [polyGrb]) | 
					
						
							|  |  |  |             expect(overlapsRev).empty | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											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], | 
					
						
							|  |  |  |                             [3.218560377159008, 51.21600586532159], | 
					
						
							|  |  |  |                         ], | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                     type: "Polygon", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             const line: Feature<LineString> = { | 
					
						
							|  |  |  |                 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 = (<Feature<LineString>>result[0]).geometry.coordinates | 
					
						
							|  |  |  |             const expCoordinates = [ | 
					
						
							| 
									
										
										
										
											2023-02-14 00:21:47 +01:00
										 |  |  |                 [3.2185604, 51.215029800031594], | 
					
						
							|  |  |  |                 [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) | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2022-03-24 03:30:05 +01:00
										 |  |  | }) |