// <relation id = "1084743" version="2" timestamp="2015-05-30T03:46:23Z" changeset="31576221" uid="2311536" user="******"> // <member type = "way" ref="69127471" role="outer"/> // <member type = "way" ref="69127440" role="inner"/> // <tag k = "building" v="yes"/> // <tag k = "type" v="multipolygon"/> //</relation> private void HandlRelationRead(XmlReader reader) { var osmRelation = new OSMRelation(); osmRelation.ID = Convert.ToInt64(reader.GetAttribute("id")); var doc = new System.Xml.XmlDocument(); XmlNode node = doc.ReadNode(reader); foreach (XmlAttribute attr in node.Attributes) { osmRelation.InnerAttributes.Add(attr.Name, attr.Value); } if (node.HasChildNodes) { var members = node.SelectNodes("member"); foreach (XmlNode member in members) { var relationType = member.Attributes["type"].Value; var id = Convert.ToInt64(member.Attributes["ref"].Value); var role = member.Attributes["role"].Value; var osmMember = new RelationMember(); osmMember.MemberType = relationType; osmMember.Ref = id; osmMember.Role = role; osmRelation.Members.Add(osmMember); if (relationType == "way") { if (osmWays.ContainsKey(id)) { osmRelation.OSMWays.Add(osmWays[id]); } } } var tags = node.SelectNodes("tag"); foreach (XmlNode tag in tags) { var key = tag.Attributes["k"].Value; var val = tag.Attributes["v"].Value; osmRelation.Tags.Add(key, val); } } var bbox = new BBox(); foreach (var way in osmRelation.OSMWays) { bbox = SpatialUtilities.BboxUnion(bbox, way.Bbox); } osmRelation.Bbox = bbox; osmRelation.SetCenter(); osmRelations.Add(osmRelation.ID, osmRelation); }
public BBox OuterBbox() { var bbox = new BBox(); foreach (var node in osmNodes.Values) { bbox = SpatialUtilities.BboxUnion(bbox, node); } return(bbox); }