test_register_function.py 13 KB

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