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)
|
|
}
|
|
|
|
})
|
|
}) |