unittests_register.py 13 KB

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