RealWorldTerrainOSMWay.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 Way.
  10. /// </summary>
  11. public class RealWorldTerrainOSMWay : RealWorldTerrainOSMBase
  12. {
  13. /// <summary>
  14. /// List of OSM Node ID.
  15. /// </summary>
  16. public List<string> nodeRefs;
  17. public List<RealWorldTerrainOSMWay> holes;
  18. public RealWorldTerrainOSMWay()
  19. {
  20. }
  21. public RealWorldTerrainOSMWay(BinaryReader br)
  22. {
  23. id = br.ReadInt64().ToString();
  24. nodeRefs = new List<string>();
  25. tags = new List<RealWorldTerrainOSMTag>();
  26. int refCount = br.ReadInt32();
  27. for (int i = 0; i < refCount; i++) nodeRefs.Add(br.ReadInt64().ToString());
  28. int tagCount = br.ReadInt32();
  29. for (int i = 0; i < tagCount; i++) tags.Add(new RealWorldTerrainOSMTag(br));
  30. }
  31. public RealWorldTerrainOSMWay(XmlNode node)
  32. {
  33. id = node.Attributes["id"].Value;
  34. nodeRefs = new List<string>();
  35. tags = new List<RealWorldTerrainOSMTag>();
  36. foreach (XmlNode subNode in node.ChildNodes)
  37. {
  38. if (subNode.Name == "nd") nodeRefs.Add(subNode.Attributes["ref"].Value);
  39. else if (subNode.Name == "tag") tags.Add(new RealWorldTerrainOSMTag(subNode));
  40. }
  41. }
  42. public void Write(BinaryWriter bw)
  43. {
  44. bw.Write(long.Parse(id));
  45. bw.Write(nodeRefs.Count);
  46. foreach (string nodeRef in nodeRefs) bw.Write(long.Parse(nodeRef));
  47. bw.Write(tags.Count);
  48. foreach (RealWorldTerrainOSMTag tag in tags) tag.Write(bw);
  49. }
  50. }
  51. }