forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			No EOL
		
	
	
		
			9.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			No EOL
		
	
	
		
			9.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {describe} from 'mocha'
 | 
						|
import {expect} from 'chai'
 | 
						|
import CreateMultiPolygonWithPointReuseAction from "../../../Logic/Osm/Actions/CreateMultiPolygonWithPointReuseAction";
 | 
						|
import {Tag} from "../../../Logic/Tags/Tag";
 | 
						|
import {Changes} from "../../../Logic/Osm/Changes";
 | 
						|
 | 
						|
describe("CreateMultiPolygonWithPointReuseAction", () => {
 | 
						|
    
 | 
						|
        it("should produce a correct changeset", () => {
 | 
						|
 | 
						|
            async () => {
 | 
						|
 | 
						|
                const feature = {
 | 
						|
                    "type": "Feature",
 | 
						|
                    "properties": {
 | 
						|
                        "osm_id": "41097039",
 | 
						|
                        "size_grb_building": "1374.89",
 | 
						|
                        "addr:housenumber": "53",
 | 
						|
                        "addr:street": "Startelstraat",
 | 
						|
                        "building": "house",
 | 
						|
                        "source:geometry:entity": "Gbg",
 | 
						|
                        "source:geometry:date": "2014-04-28",
 | 
						|
                        "source:geometry:oidn": "150044",
 | 
						|
                        "source:geometry:uidn": "5403181",
 | 
						|
                        "H_DTM_MIN": "50.35",
 | 
						|
                        "H_DTM_GEM": "50.97",
 | 
						|
                        "H_DSM_MAX": "59.40",
 | 
						|
                        "H_DSM_P99": "59.09",
 | 
						|
                        "HN_MAX": "8.43",
 | 
						|
                        "HN_P99": "8.12",
 | 
						|
                        "detection_method": "derived from OSM landuse: farmyard",
 | 
						|
                        "auto_target_landuse": "farmyard",
 | 
						|
                        "size_source_landuse": "8246.28",
 | 
						|
                        "auto_building": "farm",
 | 
						|
                        "id": "41097039",
 | 
						|
                        "_lat": "50.84633355000016",
 | 
						|
                        "_lon": "5.262964150000011",
 | 
						|
                        "_layer": "grb",
 | 
						|
                        "_length": "185.06002152312757",
 | 
						|
                        "_length:km": "0.2",
 | 
						|
                        "_now:date": "2022-02-22",
 | 
						|
                        "_now:datetime": "2022-02-22 10:15:51",
 | 
						|
                        "_loaded:date": "2022-02-22",
 | 
						|
                        "_loaded:datetime": "2022-02-22 10:15:51",
 | 
						|
                        "_geometry:type": "Polygon",
 | 
						|
                        "_intersects_with_other_features": "",
 | 
						|
                        "_country": "be",
 | 
						|
                        "_overlaps_with_buildings": "[]",
 | 
						|
                        "_overlap_percentage": "null",
 | 
						|
                        "_grb_date": "2014-04-28",
 | 
						|
                        "_grb_ref": "Gbg/150044",
 | 
						|
                        "_building:min_level": "",
 | 
						|
                        "_surface": "548.1242491529038",
 | 
						|
                        "_surface:ha": "0",
 | 
						|
                        "_reverse_overlap_percentage": "null",
 | 
						|
                        "_imported_osm_object_found": "false",
 | 
						|
                        "_imported_osm_still_fresh": "false",
 | 
						|
                        "_target_building_type": "house"
 | 
						|
                    },
 | 
						|
                    "geometry": {
 | 
						|
                        "type": "Polygon",
 | 
						|
                        "coordinates": <[number, number][][]>[
 | 
						|
                            [
 | 
						|
                                [
 | 
						|
                                    5.262684300000043,
 | 
						|
                                    50.84624409999995
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262777500000024,
 | 
						|
                                    50.84620759999988
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262798899999998,
 | 
						|
                                    50.84621390000019
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262999799999994,
 | 
						|
                                    50.84619519999999
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263107500000007,
 | 
						|
                                    50.84618920000014
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263115,
 | 
						|
                                    50.84620990000026
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.26310279999998,
 | 
						|
                                    50.84623050000014
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263117999999977,
 | 
						|
                                    50.846247400000166
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263174599999989,
 | 
						|
                                    50.84631019999971
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263166999999989,
 | 
						|
                                    50.84631459999995
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263243999999979,
 | 
						|
                                    50.84640239999989
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.2631607000000065,
 | 
						|
                                    50.84643459999996
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.26313309999997,
 | 
						|
                                    50.84640089999985
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262907499999996,
 | 
						|
                                    50.84647790000018
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.2628939999999576,
 | 
						|
                                    50.846463699999774
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262872100000033,
 | 
						|
                                    50.846440700000294
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262784699999991,
 | 
						|
                                    50.846348899999924
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262684300000043,
 | 
						|
                                    50.84624409999995
 | 
						|
                                ]
 | 
						|
                            ],
 | 
						|
                            [
 | 
						|
                                [
 | 
						|
                                    5.262801899999976,
 | 
						|
                                    50.84623269999982
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.2629535000000285,
 | 
						|
                                    50.84638830000012
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263070700000018,
 | 
						|
                                    50.84634720000008
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262998000000025,
 | 
						|
                                    50.84626279999982
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263066799999966,
 | 
						|
                                    50.84623959999975
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263064000000004,
 | 
						|
                                    50.84623330000007
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263009599999997,
 | 
						|
                                    50.84623730000026
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.263010199999956,
 | 
						|
                                    50.84621629999986
 | 
						|
                                ],
 | 
						|
                                [
 | 
						|
                                    5.262801899999976,
 | 
						|
                                    50.84623269999982
 | 
						|
                                ]
 | 
						|
                            ]
 | 
						|
                        ]
 | 
						|
                    },
 | 
						|
                }
 | 
						|
 | 
						|
                const innerRings = [...feature.geometry.coordinates]
 | 
						|
                innerRings.splice(0, 1)
 | 
						|
 | 
						|
                const action = new CreateMultiPolygonWithPointReuseAction(
 | 
						|
                    [new Tag("building", "yes")],
 | 
						|
                    feature.geometry.coordinates[0],
 | 
						|
                    innerRings,
 | 
						|
                    undefined,
 | 
						|
                    [],
 | 
						|
                    "import"
 | 
						|
                )
 | 
						|
                const descriptions = await action.Perform(new Changes())
 | 
						|
 | 
						|
                const ways= descriptions.filter(d => d.type === "way")
 | 
						|
                expect(ways[0].id == -18, "unexpected id").true
 | 
						|
                expect(ways[1].id == -27, "unexpected id").true
 | 
						|
                const outer = ways[0].changes["coordinates"]
 | 
						|
                expect(outer).deep.equal(feature.geometry.coordinates[0])
 | 
						|
                const inner = ways[1].changes["coordinates"]
 | 
						|
                expect(inner).deep.equal(feature.geometry.coordinates[1])
 | 
						|
                const members = <{type: string, role: string, ref: number}[]> descriptions.find(d => d.type === "relation").changes["members"]
 | 
						|
                expect(members[0].role, "incorrect role").eq("outer")
 | 
						|
                expect(members[1].role, "incorrect role").eq("inner")
 | 
						|
                expect(members[0].type , "incorrect type").eq("way")
 | 
						|
                expect(members[1].type , "incorrect type").eq("way")
 | 
						|
                expect(members[0].ref, "incorrect id").eq(-18)
 | 
						|
                expect(members[1].ref , "incorrect id").eq(-27)
 | 
						|
            }
 | 
						|
            
 | 
						|
        })
 | 
						|
}) |