/Zdrojovy kod/GeoNavigator/GeoNavigator/MapXml.cs

https://github.com/petrnohejl/Geo-Navigator
C# | 127 lines | 88 code | 16 blank | 23 comment | 19 complexity | cfd9a2a0b676ae3faddb9e6e0e0f5358 MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Xml;
  6. using System.Collections;
  7. using System.Globalization;
  8. using GeoNavigator;
  9. namespace GeoNavigator
  10. {
  11. /// <summary>
  12. /// Zpracovava databazovy XML soubor s mapami
  13. /// </summary>
  14. class MapXml
  15. {
  16. // Cesta k XML souboru
  17. private string xmlFile;
  18. public string XmlFile
  19. {
  20. get { return xmlFile; }
  21. }
  22. // Vytvori XML objekt
  23. public MapXml(string file)
  24. {
  25. xmlFile = file;
  26. }
  27. /// <summary>
  28. /// Nacte vsechny mapy do pole objektu tridy Map
  29. /// </summary>
  30. public void MapLoad(ArrayList maps)
  31. {
  32. // Nacte XML dokument
  33. XmlDocument lDoc = new XmlDocument();
  34. XmlNodeList lResult;
  35. string lXPathQuery;
  36. lDoc.Load(xmlFile);
  37. // Pocet map
  38. lXPathQuery = "/maps/map";
  39. lResult = lDoc.SelectNodes(lXPathQuery);
  40. // Definice promennych
  41. int count = lResult.Count + 1;
  42. string name;
  43. string file;
  44. int width;
  45. int height;
  46. double lat1;
  47. double lon1;
  48. double lat2;
  49. double lon2;
  50. double pixelLength;
  51. // Prochazi jednotlive mapy
  52. for (int id = 1; id < count; id++)
  53. {
  54. // name
  55. lXPathQuery = "/maps/map[" + id + "]/name";
  56. lResult = lDoc.SelectNodes(lXPathQuery);
  57. if (lResult.Count > 0) name = lResult[0].InnerText;
  58. else continue;
  59. // file
  60. lXPathQuery = "/maps/map[" + id + "]/file";
  61. lResult = lDoc.SelectNodes(lXPathQuery);
  62. if (lResult.Count > 0) file = lResult[0].InnerText;
  63. else continue;
  64. // width
  65. lXPathQuery = "/maps/map[" + id + "]/width";
  66. lResult = lDoc.SelectNodes(lXPathQuery);
  67. if (lResult.Count > 0) width = int.Parse(lResult[0].InnerText);
  68. else continue;
  69. // height
  70. lXPathQuery = "/maps/map[" + id + "]/height";
  71. lResult = lDoc.SelectNodes(lXPathQuery);
  72. if (lResult.Count > 0) height = int.Parse(lResult[0].InnerText);
  73. else continue;
  74. // lat1
  75. lXPathQuery = "/maps/map[" + id + "]/lat1";
  76. lResult = lDoc.SelectNodes(lXPathQuery);
  77. if (lResult.Count > 0) lat1 = MakeDouble(lResult[0].InnerText);
  78. else continue;
  79. // lon1
  80. lXPathQuery = "/maps/map[" + id + "]/lon1";
  81. lResult = lDoc.SelectNodes(lXPathQuery);
  82. if (lResult.Count > 0) lon1 = MakeDouble(lResult[0].InnerText);
  83. else continue;
  84. // lat2
  85. lXPathQuery = "/maps/map[" + id + "]/lat2";
  86. lResult = lDoc.SelectNodes(lXPathQuery);
  87. if (lResult.Count > 0) lat2 = MakeDouble(lResult[0].InnerText);
  88. else continue;
  89. // lon2
  90. lXPathQuery = "/maps/map[" + id + "]/lon2";
  91. lResult = lDoc.SelectNodes(lXPathQuery);
  92. if (lResult.Count > 0) lon2 = MakeDouble(lResult[0].InnerText);
  93. else continue;
  94. // pixelLength
  95. lXPathQuery = "/maps/map[" + id + "]/pixel_length";
  96. lResult = lDoc.SelectNodes(lXPathQuery);
  97. if (lResult.Count > 0) pixelLength = MakeDouble(lResult[0].InnerText);
  98. else continue;
  99. // Prida mapu do pole
  100. maps.Add(new Map(name, file, width, height, lat1, lon1, lat2, lon2, pixelLength));
  101. }
  102. }
  103. // Prevod desetinneho cisla v retezci na double
  104. private double MakeDouble(string str)
  105. {
  106. NumberFormatInfo provider = new NumberFormatInfo();
  107. provider.NumberDecimalSeparator = ".";
  108. return Double.Parse(str, provider);
  109. }
  110. }
  111. }