Пример #1
0
    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);
            }
        }
    }
Пример #2
0
    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);
            }
        }
    }
Пример #3
0
    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);
                }
            }
        }
    }