test_register_function.py 13 KB

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