RealWorldTerrainOSMRelation.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* INFINITY CODE 2013-2019 */
  2. /* http://www.infinity-code.com */
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Xml;
  6. namespace InfinityCode.RealWorldTerrain.OSM
  7. {
  8. /// <summary>
  9. /// Class for OSM Relation.
  10. /// </summary>
  11. public class RealWorldTerrainOSMRelation : RealWorldTerrainOSMBase
  12. {
  13. /// <summary>
  14. /// List of relation members.
  15. /// </summary>
  16. public readonly List<RealWorldTerrainOSMRelationMember> members;
  17. public RealWorldTerrainOSMRelation(BinaryReader br)
  18. {
  19. id = br.ReadInt64().ToString();
  20. members = new List<RealWorldTerrainOSMRelationMember>();
  21. tags = new List<RealWorldTerrainOSMTag>();
  22. int memberCount = br.ReadInt32();
  23. for (int i = 0; i < memberCount; i++) members.Add(new RealWorldTerrainOSMRelationMember(br));
  24. int tagCount = br.ReadInt32();
  25. for (int i = 0; i < tagCount; i++) tags.Add(new RealWorldTerrainOSMTag(br));
  26. }
  27. public RealWorldTerrainOSMRelation(XmlNode node)
  28. {
  29. id = node.Attributes["id"].Value;
  30. members = new List<RealWorldTerrainOSMRelationMember>();
  31. tags = new List<RealWorldTerrainOSMTag>();
  32. foreach (XmlNode subNode in node.ChildNodes)
  33. {
  34. if (subNode.Name == "member") members.Add(new RealWorldTerrainOSMRelationMember(subNode));
  35. else if (subNode.Name == "tag") tags.Add(new RealWorldTerrainOSMTag(subNode));
  36. }
  37. }
  38. public void Write(BinaryWriter bw)
  39. {
  40. bw.Write(long.Parse(id));
  41. bw.Write(members.Count);
  42. foreach (RealWorldTerrainOSMRelationMember member in members) member.Write(bw);
  43. bw.Write(tags.Count);
  44. foreach (RealWorldTerrainOSMTag tag in tags) tag.Write(bw);
  45. }
  46. }
  47. }