public void TestRelationMultipolygonAreaOneOuter() { // tests a multipolygon containing one 'outer' member. var source = new MemorySnapshotDb( new Node() { Id = 1, Latitude = 0, Longitude = 0 }, new Node() { Id = 2, Latitude = 1, Longitude = 0 }, new Node() { Id = 3, Latitude = 0, Longitude = 1 }, new Way() { Id = 1, Nodes = new long[] { 1, 2, 3, 1 } }, new Relation() { Id = 1, Tags = new TagsCollection( new Tag("type", "multipolygon")), Members = new RelationMember[] { new RelationMember() { Id = 1, Role = "outer", Type = OsmGeoType.Way } } }).CreateSnapshotDb(); var interpreter = new DefaultFeatureInterpreter(); var features = interpreter.Interpret(source.GetRelation(1), source); Assert.IsNotNull(features); Assert.AreEqual(1, features.Count); var feature = features[0]; Assert.IsInstanceOf <LinearRing>(feature.Geometry); Assert.IsTrue(feature.Attributes.Contains("type", "multipolygon")); }
public void TestWayNaturalIsWaterArea() { var node1 = new Node(); node1.Id = 1; node1.Latitude = 0; node1.Longitude = 0; var node2 = new Node(); node2.Id = 2; node2.Latitude = 1; node2.Longitude = 0; var node3 = new Node(); node3.Id = 3; node3.Latitude = 0; node3.Longitude = 1; var way = new Way(); way.Id = 1; way.Nodes = new long[] { 1, 2, 3, 1 }; way.Tags = new TagsCollection(); way.Tags.Add("natural", "water"); var source = (new MemorySnapshotDb()).CreateSnapshotDb(); source.AddOrUpdate(node1); source.AddOrUpdate(node2); source.AddOrUpdate(node3); source.AddOrUpdate(way); // the use of natural=water implies an area-type. var interpreter = new DefaultFeatureInterpreter(); var features = interpreter.Interpret(way, source); Assert.IsNotNull(features); Assert.AreEqual(1, features.Count); var feature = features[0]; Assert.IsInstanceOf <LinearRing>(feature.Geometry); Assert.IsTrue(feature.Attributes.Contains("natural", "water")); }
public void TestRelationMultipolygonAreaOneOuterTwoPartialInners() { var source = new MemorySnapshotDb( new Node() { Id = 1, Latitude = 0, Longitude = 0 }, new Node() { Id = 2, Latitude = 0, Longitude = 1 }, new Node() { Id = 3, Latitude = 1, Longitude = 1 }, new Node() { Id = 4, Latitude = 1, Longitude = 0 }, new Node() { Id = 5, Latitude = 0.25f, Longitude = 0.25f }, new Node() { Id = 6, Latitude = 0.25f, Longitude = 0.40f }, new Node() { Id = 7, Latitude = 0.40f, Longitude = 0.40f }, new Node() { Id = 8, Latitude = 0.40f, Longitude = 0.25f }, new Way() { Id = 1, Nodes = new long[] { 1, 2, 3, 4, 1 } }, new Way() { Id = 2, Nodes = new long[] { 5, 6, 7 } }, new Way() { Id = 3, Nodes = new long[] { 7, 8, 5 } }, new Relation() { Id = 1, Tags = new TagsCollection( new Tag("type", "multipolygon")), Members = new RelationMember[] { new RelationMember() { Id = 1, Role = "outer", Type = OsmGeoType.Way }, new RelationMember() { Id = 2, Role = "inner", Type = OsmGeoType.Way }, new RelationMember() { Id = 3, Role = "inner", Type = OsmGeoType.Way } } }).CreateSnapshotDb(); var interpreter = new DefaultFeatureInterpreter(); var features = interpreter.Interpret(source.GetRelation(1), source); Assert.IsNotNull(features); Assert.AreEqual(1, features.Count); var feature = features[0]; Assert.IsInstanceOf <Polygon>(feature.Geometry); Polygon polygon = feature.Geometry as Polygon; Assert.IsNotNull(polygon.Holes); Assert.AreEqual(1, polygon.Holes.Count()); Assert.IsTrue(feature.Attributes.Contains("type", "multipolygon")); }