private static void WriteMember(XmlWriter writer, OsmMember member) { writer.WriteStartElement(Constants.Constants.osmNd); writer.WriteAttributeString(Constants.Constants.typeString, EnumExtensions.GetEnumAttributeValue(member.Type)); writer.WriteAttributeString(Constants.Constants.refString, member.Ref.ToString()); if (member.Role == RelationMemberRoleEnum.None) { writer.WriteAttributeString(Constants.Constants.roleString, ""); } else { writer.WriteAttributeString(Constants.Constants.roleString, member.Role.ToString()); } writer.WriteEndElement(); }
private void ReadRelation(XElement el) { long id = el.GetAttributeLong("id"); double lat = el.GetAttributeDouble("lat"); double lon = el.GetAttributeDouble("lon"); int version = el.GetAttributeInt("version"); DateTime timestamp = el.GetAttributeDateTime("timestamp", DateTime.MinValue); int changeset = el.GetAttributeInt("changeset"); Dictionary <string, string> tags = new Dictionary <string, string>(); List <OsmMember> members = new List <OsmMember>(); foreach (var element in el.Nodes().OfType <XElement>().Where(e => e.Name == "tag")) { string key = element.Attribute("k").Value; string value = element.Attribute("v").Value; tags.Add(key, value); } foreach (var element in el.Nodes().OfType <XElement>().Where(e => e.Name == "member")) { OsmMember member = new OsmMember() { Type = element.Attribute("type")?.Value, Ref = long.Parse(element.Attribute("ref")?.Value), Role = element.Attribute("role")?.Value, }; members.Add(member); } OsmRelation relation = new OsmRelation() { Id = id, Version = version, Timestamp = timestamp, Changeset = changeset, Tags = tags, Members = members, }; RelationRead(relation); }