private void CreateRoads(XDocument doc, Canvas canvas) { foreach (var way in doc.Root.Elements("way")) { bool isRoad = false; foreach (var tag in way.Elements("tag")) { if (tag.Attribute("k").Value == "highway") { isRoad = true; } if (tag.Attribute("k").Value == "aeroway") { isRoad = true; } } if (isRoad) { List <Point> points = new List <Point>(); foreach (var nd in way.Elements("nd")) { Point point = NodePosition(long.Parse(nd.Attribute("ref").Value)); point = new Point(canvas.Width * 0.5 - point.X, canvas.Height * 0.5 + point.Y); points.Add(point); } var road = OsmUIElements.CreateRoad(points, way); canvas.Children.Add(road); } } }
private void CreateAreas(XDocument doc, Canvas canvas) { string[] areaStrings = { "area", "leisure" }; foreach (var way in doc.Root.Elements("way")) { bool isArea = false; foreach (var tag in way.Elements("tag")) { if (areaStrings.Contains(tag.Attribute("k").Value)) { isArea = true; } } if (isArea) { List <Point> points = new List <Point>(); foreach (var nd in way.Elements("nd")) { Point point = NodePosition(long.Parse(nd.Attribute("ref").Value)); point = new Point(canvas.Width * 0.5 - point.X, canvas.Height * 0.5 + point.Y); points.Add(point); } var area = OsmUIElements.CreateArea(points, way); canvas.Children.Add(area); } } }
private void CreateBuildings(XDocument doc, Canvas canvas) { List <long> outerOuterBuildingRelations = new List <long>(); foreach (var relation in doc.Root.Elements("relation")) { foreach (var tag in relation.Elements("tag")) { if (tag.Attribute("k").Value == "building" && tag.Attribute("v").Value == "yes") { foreach (var member in relation.Elements("member")) { if (member.Attribute("type").Value == "way" && member.Attribute("role").Value == "outer") { outerOuterBuildingRelations.Add(long.Parse(member.Attribute("ref").Value)); } } } } } foreach (var way in doc.Root.Elements("way")) { bool isBuilding = false; foreach (var tag in way.Elements("tag")) { if (tag.Attribute("k").Value == "building") { isBuilding = true; } if (tag.Attribute("k").Value == "building:part") { isBuilding = true; } } if (isBuilding || outerOuterBuildingRelations.Contains(long.Parse(way.Attribute("id").Value))) { List <Point> points = new List <Point>(); foreach (var nd in way.Elements("nd")) { Point point = NodePosition(long.Parse(nd.Attribute("ref").Value)); point = new Point(canvas.Width * 0.5 - point.X, canvas.Height * 0.5 + point.Y); points.Add(point); } var building = OsmUIElements.CreateBuilding(points, way); if (building != null) { canvas.Children.Add(building); } } } }