forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			186 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			186 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {describe} from 'mocha'
							 | 
						||
| 
								 | 
							
								import {expect} from 'chai'
							 | 
						||
| 
								 | 
							
								import * as turf from "@turf/turf";
							 | 
						||
| 
								 | 
							
								import {GeoOperations} from "../../Logic/GeoOperations";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                },
							 | 
						||
| 
								 | 
							
								                "id": "https://betadata.grbosm.site/grb?bbox=360935.6475626023,6592540.815539878,361088.52161917265,6592693.689596449/37",
							 | 
						||
| 
								 | 
							
								                "_lon": 3.2432137000000116,
							 | 
						||
| 
								 | 
							
								                "_lat": 50.83736194999996,
							 | 
						||
| 
								 | 
							
								                "bbox": {
							 | 
						||
| 
								 | 
							
								                    "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
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            [
							 | 
						||
| 
								 | 
							
								                                3.243046,
							 | 
						||
| 
								 | 
							
								                                50.8374112
							 | 
						||
| 
								 | 
							
								                            ],
							 | 
						||
| 
								 | 
							
								                            [
							 | 
						||
| 
								 | 
							
								                                3.2429993,
							 | 
						||
| 
								 | 
							
								                                50.8373243
							 | 
						||
| 
								 | 
							
								                            ]
							 | 
						||
| 
								 | 
							
								                        ]
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                },
							 | 
						||
| 
								 | 
							
								                "_lon": 3.2430937,
							 | 
						||
| 
								 | 
							
								                "_lat": 50.83736395,
							 | 
						||
| 
								 | 
							
								                "bbox": {
							 | 
						||
| 
								 | 
							
								                    "maxLat": 50.8374252,
							 | 
						||
| 
								 | 
							
								                    "maxLon": 3.2431881,
							 | 
						||
| 
								 | 
							
								                    "minLat": 50.8373027,
							 | 
						||
| 
								 | 
							
								                    "minLon": 3.2429993
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            const p0 = turf.polygon(polyGrb.geometry.coordinates)
							 | 
						||
| 
								 | 
							
								            expect(p0).not.null
							 | 
						||
| 
								 | 
							
								            const p1 = turf.polygon(polyHouse.geometry.coordinates)
							 | 
						||
| 
								 | 
							
								            expect(p1).not.null
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            const overlaps = GeoOperations.calculateOverlap(polyGrb, [polyHouse])
							 | 
						||
| 
								 | 
							
								            expect(overlaps).empty
							 | 
						||
| 
								 | 
							
								            const overlapsRev = GeoOperations.calculateOverlap(polyHouse, [polyGrb])
							 | 
						||
| 
								 | 
							
								            expect(overlapsRev).empty
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								})
							 |