RealWorldTerrainOSMNode.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 Node.
  10. /// </summary>
  11. public class RealWorldTerrainOSMNode : RealWorldTerrainOSMBase
  12. {
  13. /// <summary>
  14. /// Latitude.
  15. /// </summary>
  16. public readonly float lat;
  17. /// <summary>
  18. /// Longitude.
  19. /// </summary>
  20. public readonly float lng;
  21. public int usageCount;
  22. public RealWorldTerrainOSMNode(BinaryReader br)
  23. {
  24. id = br.ReadInt64().ToString();
  25. lat = br.ReadSingle();
  26. lng = br.ReadSingle();
  27. tags = new List<RealWorldTerrainOSMTag>();
  28. int tagCount = br.ReadInt32();
  29. for (int i = 0; i < tagCount; i++) tags.Add(new RealWorldTerrainOSMTag(br));
  30. }
  31. public RealWorldTerrainOSMNode(XmlNode node)
  32. {
  33. id = node.Attributes["id"].Value;
  34. lat = float.Parse(node.Attributes["lat"].Value, RealWorldTerrainCultureInfo.numberFormat);
  35. lng = float.Parse(node.Attributes["lon"].Value, RealWorldTerrainCultureInfo.numberFormat);
  36. tags = new List<RealWorldTerrainOSMTag>();
  37. foreach (XmlNode subNode in node.ChildNodes) tags.Add(new RealWorldTerrainOSMTag(subNode));
  38. }
  39. public void Write(BinaryWriter bw)
  40. {
  41. bw.Write(long.Parse(id));
  42. bw.Write(lat);
  43. bw.Write(lng);
  44. bw.Write(tags.Count);
  45. foreach (RealWorldTerrainOSMTag tag in tags) tag.Write(bw);
  46. }
  47. }
  48. }