unittests_register.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. """!Unit test to register raster maps with absolute and relative
  2. time using tgis.register_maps_in_space_time_dataset()
  3. (C) 2013 by the GRASS Development Team
  4. This program is free software under the GNU General Public
  5. License (>=v2). Read the file COPYING that comes with GRASS
  6. for details.
  7. @author Soeren Gebbert
  8. """
  9. import grass.script as grass
  10. import grass.temporal as tgis
  11. import unittest
  12. import datetime
  13. class TestRegisterFunctions(unittest.TestCase):
  14. @classmethod
  15. def setUpClass(cls):
  16. """!Initiate the temporal GIS and set the region
  17. """
  18. # Use always the current mapset as temporal database
  19. ret = grass.run_command("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
  20. tgis.init()
  21. grass.overwrite = True
  22. grass.use_temp_region()
  23. ret = grass.run_command("g.region", n=80.0, s=0.0, e=120.0,
  24. w=0.0, t=1.0, b=0.0, res=10.0)
  25. def setUp(self):
  26. """!Create the test maps and the space time raster datasets
  27. """
  28. ret = 0
  29. ret += grass.run_command("r.mapcalc", overwrite=True, quiet=True,
  30. expression="register_map_1 = 1")
  31. ret += grass.run_command("r.mapcalc", overwrite=True, quiet=True,
  32. expression="register_map_2 = 2")
  33. self.assertEqual(ret, 0)
  34. self.strds_abs = tgis.open_new_stds(name="register_test_abs", type="strds", temporaltype="absolute",
  35. title="Test strds", descr="Test strds", semantic="field")
  36. self.strds_rel = tgis.open_new_stds(name="register_test_rel", type="strds", temporaltype="relative",
  37. title="Test strds", descr="Test strds", semantic="field")
  38. def test_absolute_time_strds_1(self):
  39. """!Test the registration of maps with absolute time in a
  40. space time raster dataset
  41. """
  42. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(),
  43. maps="register_map_1,register_map_2",
  44. start="2001-01-01", increment="1 day", interval=True)
  45. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  46. map.select()
  47. start, end = map.get_absolute_time()
  48. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  49. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  50. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  51. map.select()
  52. start, end = map.get_absolute_time()
  53. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  54. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  55. self.strds_abs.select()
  56. start, end = self.strds_abs.get_absolute_time()
  57. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  58. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  59. def test_absolute_time_strds_2(self):
  60. """!Test the registration of maps with absolute time in a
  61. space time raster dataset.
  62. The timestamps are set using the C-Interface beforehand, so that the register function needs
  63. to read the timetsamp from the map metadata.
  64. """
  65. ciface = tgis.get_tgis_c_library_interface()
  66. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001/2 Jan 2001")
  67. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "2 Jan 2001/3 Jan 2001")
  68. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(),
  69. maps="register_map_1,register_map_2")
  70. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  71. map.select()
  72. start, end = map.get_absolute_time()
  73. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  74. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  75. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  76. map.select()
  77. start, end = map.get_absolute_time()
  78. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  79. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  80. self.strds_abs.select()
  81. start, end = self.strds_abs.get_absolute_time()
  82. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  83. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  84. def test_absolute_time_1(self):
  85. """!Test the registration of maps with absolute time
  86. """
  87. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  88. maps="register_map_1,register_map_2",
  89. start="2001-01-01", increment="1 day", interval=True)
  90. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  91. map.select()
  92. start, end = map.get_absolute_time()
  93. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  94. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  95. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  96. map.select()
  97. start, end = map.get_absolute_time()
  98. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  99. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  100. def test_absolute_time_2(self):
  101. """!Test the registration of maps with absolute time
  102. """
  103. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  104. maps="register_map_1,register_map_2",
  105. start="2001-01-01 10:30:01", increment="8 hours", interval=False)
  106. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  107. map.select()
  108. start, end = map.get_absolute_time()
  109. self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
  110. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  111. map.select()
  112. start, end = map.get_absolute_time()
  113. self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
  114. def test_absolute_time_3(self):
  115. """!Test the registration of maps with absolute time.
  116. The timestamps are set using the C-Interface beforehand, so that the register function needs
  117. to read the timetsamp from the map metadata.
  118. """
  119. ciface = tgis.get_tgis_c_library_interface()
  120. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001 10:30:01")
  121. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1 Jan 2001 18:30:01")
  122. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  123. maps="register_map_1,register_map_2")
  124. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  125. map.select()
  126. start, end = map.get_absolute_time()
  127. self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
  128. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  129. map.select()
  130. start, end = map.get_absolute_time()
  131. self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
  132. def test_relative_time_strds_1(self):
  133. """!Test the registration of maps with relative time in a
  134. space time raster dataset
  135. """
  136. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(),
  137. maps="register_map_1,register_map_2", start=0,
  138. increment=1, unit="day", interval=True)
  139. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  140. map.select()
  141. start, end, unit = map.get_relative_time()
  142. self.assertEqual(start, 0)
  143. self.assertEqual(end, 1)
  144. self.assertEqual(unit, "day")
  145. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  146. map.select()
  147. start, end, unit = map.get_relative_time()
  148. self.assertEqual(start, 1)
  149. self.assertEqual(end, 2)
  150. self.assertEqual(unit, "day")
  151. self.strds_rel.select()
  152. start, end, unit = self.strds_rel.get_relative_time()
  153. self.assertEqual(start, 0)
  154. self.assertEqual(end, 2)
  155. self.assertEqual(unit, "day")
  156. def test_relative_time_strds_2(self):
  157. """!Test the registration of maps with relative time in a
  158. space time raster dataset. The timetsamps are set for the maps using the
  159. C-interface before registration.
  160. """
  161. ciface = tgis.get_tgis_c_library_interface()
  162. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
  163. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
  164. tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(),
  165. maps="register_map_1,register_map_2")
  166. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  167. map.select()
  168. start, end, unit = map.get_relative_time()
  169. self.assertEqual(start, 1000000)
  170. self.assertEqual(end, 1500000)
  171. self.assertEqual(unit, "seconds")
  172. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  173. map.select()
  174. start, end, unit = map.get_relative_time()
  175. self.assertEqual(start, 1500000)
  176. self.assertEqual(end, 2000000)
  177. self.assertEqual(unit, "seconds")
  178. self.strds_rel.select()
  179. start, end, unit = self.strds_rel.get_relative_time()
  180. self.assertEqual(start, 1000000)
  181. self.assertEqual(end, 2000000)
  182. self.assertEqual(unit, "seconds")
  183. def test_relative_time_1(self):
  184. """!Test the registration of maps with relative time
  185. """
  186. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  187. maps="register_map_1,register_map_2",
  188. start=0, increment=1, unit="day", interval=True)
  189. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  190. map.select()
  191. start, end, unit = map.get_relative_time()
  192. self.assertEqual(start, 0)
  193. self.assertEqual(end, 1)
  194. self.assertEqual(unit, "day")
  195. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  196. map.select()
  197. start, end, unit = map.get_relative_time()
  198. self.assertEqual(start, 1)
  199. self.assertEqual(end, 2)
  200. self.assertEqual(unit, "day")
  201. def test_relative_time_2(self):
  202. """!Test the registration of maps with relative time
  203. """
  204. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  205. maps="register_map_1,register_map_2",
  206. start=1000000, increment=500000, unit="seconds", interval=True)
  207. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  208. map.select()
  209. start, end, unit = map.get_relative_time()
  210. self.assertEqual(start, 1000000)
  211. self.assertEqual(end, 1500000)
  212. self.assertEqual(unit, "seconds")
  213. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  214. map.select()
  215. start, end, unit = map.get_relative_time()
  216. self.assertEqual(start, 1500000)
  217. self.assertEqual(end, 2000000)
  218. self.assertEqual(unit, "seconds")
  219. def test_relative_time_3(self):
  220. """!Test the registration of maps with relative time. The timetsamps are set beforhand using
  221. the C-interface.
  222. """
  223. ciface = tgis.get_tgis_c_library_interface()
  224. ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
  225. ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
  226. tgis.register_maps_in_space_time_dataset(type="rast", name=None,
  227. maps="register_map_1,register_map_2")
  228. map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
  229. map.select()
  230. start, end, unit = map.get_relative_time()
  231. self.assertEqual(start, 1000000)
  232. self.assertEqual(end, 1500000)
  233. self.assertEqual(unit, "seconds")
  234. map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
  235. map.select()
  236. start, end, unit = map.get_relative_time()
  237. self.assertEqual(start, 1500000)
  238. self.assertEqual(end, 2000000)
  239. self.assertEqual(unit, "seconds")
  240. def tearDown(self):
  241. """!Remove maps from temporal database
  242. """
  243. ret = grass.run_command("t.unregister", maps="register_map_1,register_map_2", quiet=True)
  244. ret = grass.run_command("g.remove", rast="register_map_1,register_map_2", quiet=True)
  245. self.assertEqual(ret, 0)
  246. self.strds_abs.delete()
  247. self.strds_rel.delete()
  248. @classmethod
  249. def tearDownClass(cls):
  250. """!Remove the temporary region
  251. """
  252. grass.del_temp_region()
  253. if __name__ == '__main__':
  254. unittest.main()