test_vector_algebra.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. """
  2. (C) 2014 by the GRASS Development Team
  3. This program is free software under the GNU General Public
  4. License (>=v2). Read the file COPYING that comes with GRASS
  5. for details.
  6. :authors: Soeren Gebbert and Thomas Leppelt
  7. """
  8. import datetime
  9. import os
  10. import grass.temporal as tgis
  11. from grass.gunittest.case import TestCase
  12. from grass.gunittest.main import test
  13. class TestTemporalVectorAlgebra(TestCase):
  14. @classmethod
  15. def setUpClass(cls):
  16. """Initiate the temporal GIS and set the region"""
  17. os.putenv("GRASS_OVERWRITE", "1")
  18. tgis.init(True) # Raise on error instead of exit(1)
  19. cls.use_temp_region()
  20. cls.runModule("g.region", n=80.0, s=0.0, e=120.0, w=0.0, t=1.0, b=0.0, res=10.0)
  21. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a1")
  22. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a2")
  23. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a3")
  24. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a4")
  25. cls.runModule("v.random", quiet=True, npoints=20, seed=2, output="b1")
  26. cls.runModule("v.random", quiet=True, npoints=20, seed=2, output="b2")
  27. cls.runModule("v.random", quiet=True, npoints=20, seed=3, output="c1")
  28. cls.runModule("v.random", quiet=True, npoints=20, seed=4, output="d1")
  29. cls.runModule("v.random", quiet=True, npoints=20, seed=4, output="d2")
  30. cls.runModule("v.random", quiet=True, npoints=20, seed=4, output="d3")
  31. cls.runModule("v.random", quiet=True, npoints=20, seed=5, output="singletmap")
  32. cls.runModule("v.random", quiet=True, npoints=20, seed=6, output="singlemap")
  33. tgis.open_new_stds(
  34. name="A",
  35. type="stvds",
  36. temporaltype="absolute",
  37. title="A",
  38. descr="A",
  39. semantic="field",
  40. )
  41. tgis.open_new_stds(
  42. name="B",
  43. type="stvds",
  44. temporaltype="absolute",
  45. title="B",
  46. descr="B",
  47. semantic="field",
  48. )
  49. tgis.open_new_stds(
  50. name="C",
  51. type="stvds",
  52. temporaltype="absolute",
  53. title="B",
  54. descr="C",
  55. semantic="field",
  56. )
  57. tgis.open_new_stds(
  58. name="D",
  59. type="stvds",
  60. temporaltype="absolute",
  61. title="D",
  62. descr="D",
  63. semantic="field",
  64. )
  65. tgis.register_maps_in_space_time_dataset(
  66. type="vector",
  67. name="A",
  68. maps="a1,a2,a3,a4",
  69. start="2001-01-01",
  70. increment="1 day",
  71. interval=True,
  72. )
  73. tgis.register_maps_in_space_time_dataset(
  74. type="vector",
  75. name="B",
  76. maps="b1,b2",
  77. start="2001-01-01",
  78. increment="2 day",
  79. interval=True,
  80. )
  81. tgis.register_maps_in_space_time_dataset(
  82. type="vector",
  83. name="C",
  84. maps="c1",
  85. start="2001-01-02",
  86. increment="2 day",
  87. interval=True,
  88. )
  89. tgis.register_maps_in_space_time_dataset(
  90. type="vector",
  91. name="D",
  92. maps="d1,d2,d3",
  93. start="2001-01-03",
  94. increment="1 day",
  95. interval=True,
  96. )
  97. tgis.register_maps_in_space_time_dataset(
  98. type="vector",
  99. name=None,
  100. maps="singletmap",
  101. start="2001-01-03",
  102. end="2001-01-04",
  103. )
  104. def tearDown(self):
  105. self.runModule("t.remove", type="stvds", inputs="R", quiet=True)
  106. @classmethod
  107. def tearDownClass(cls):
  108. """Remove the temporary region"""
  109. cls.runModule(
  110. "t.remove", flags="rf", inputs="A,B,C,D", type="stvds", quiet=True
  111. )
  112. cls.del_temp_region()
  113. def test_temporal_select(self):
  114. """Testing the temporal select operator."""
  115. self.assertModule("t.vect.algebra", expression="R = A : A", basename="r")
  116. D = tgis.open_old_stds("R", type="stvds")
  117. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  118. self.assertEqual(D.metadata.get_number_of_points(), 80)
  119. self.assertEqual(D.metadata.get_number_of_areas(), 0)
  120. self.assertEqual(D.metadata.get_number_of_centroids(), 0)
  121. start, end = D.get_absolute_time()
  122. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  123. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  124. self.assertEqual(D.check_temporal_topology(), True)
  125. self.assertEqual(D.get_granularity(), "1 day")
  126. def test_temporal_select_operators(self):
  127. """Testing the temporal select operator. Including temporal relations."""
  128. self.assertModule(
  129. "t.vect.algebra", expression="R = A {:,during} C", basename="r"
  130. )
  131. D = tgis.open_old_stds("R", type="stvds")
  132. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  133. self.assertEqual(D.metadata.get_number_of_points(), 40)
  134. self.assertEqual(D.metadata.get_number_of_areas(), 0)
  135. self.assertEqual(D.metadata.get_number_of_centroids(), 0)
  136. start, end = D.get_absolute_time()
  137. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  138. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  139. self.assertEqual(D.check_temporal_topology(), True)
  140. self.assertEqual(D.get_granularity(), "1 day")
  141. def test_temporal_buff_operators_1(self):
  142. """Testing the bufferoperator."""
  143. self.assertModule(
  144. "t.vect.algebra", expression="R = buff_p(A,0.5)", basename="r"
  145. )
  146. D = tgis.open_old_stds("R", type="stvds")
  147. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  148. self.assertEqual(D.metadata.get_number_of_points(), 0)
  149. self.assertEqual(D.metadata.get_number_of_areas(), 80)
  150. self.assertEqual(D.metadata.get_number_of_centroids(), 80)
  151. start, end = D.get_absolute_time()
  152. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  153. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  154. self.assertEqual(D.check_temporal_topology(), True)
  155. self.assertEqual(D.get_granularity(), "1 day")
  156. def test_temporal_buff_operators_2(self):
  157. """Testing the bufferoperator."""
  158. self.assertModule(
  159. "t.vect.algebra", expression="R = buff_a(buff_p(A,1),10)", basename="r"
  160. )
  161. D = tgis.open_old_stds("R", type="stvds")
  162. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  163. self.assertEqual(D.metadata.get_number_of_points(), 0)
  164. self.assertEqual(D.metadata.get_number_of_areas(), 20)
  165. self.assertEqual(D.metadata.get_number_of_centroids(), 20)
  166. start, end = D.get_absolute_time()
  167. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  168. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  169. self.assertEqual(D.check_temporal_topology(), True)
  170. self.assertEqual(D.get_granularity(), "1 day")
  171. def test_temporal_overlay_operators_1(self):
  172. """Testing the spatial overlay operator."""
  173. self.assertModule(
  174. "t.vect.algebra", expression="R = buff_p(A,2) & buff_p(D,2)", basename="r"
  175. )
  176. D = tgis.open_old_stds("R", type="stvds")
  177. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  178. self.assertEqual(D.metadata.get_number_of_points(), 0)
  179. self.assertEqual(D.metadata.get_number_of_areas(), 6)
  180. self.assertEqual(D.metadata.get_number_of_centroids(), 6)
  181. start, end = D.get_absolute_time()
  182. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  183. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  184. self.assertEqual(D.check_temporal_topology(), True)
  185. self.assertEqual(D.get_granularity(), "1 day")
  186. def test_temporal_overlay_operators_2(self):
  187. """Testing the spatial overlay operator."""
  188. self.assertModule(
  189. "t.vect.algebra",
  190. expression="R = buff_p(A,1.5) {&,during,r} buff_p(B,1.5)",
  191. basename="r",
  192. )
  193. D = tgis.open_old_stds("R", type="stvds")
  194. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  195. self.assertEqual(D.metadata.get_number_of_points(), 0)
  196. self.assertEqual(D.metadata.get_number_of_areas(), 8)
  197. self.assertEqual(D.metadata.get_number_of_centroids(), 8)
  198. start, end = D.get_absolute_time()
  199. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  200. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  201. self.assertEqual(D.check_temporal_topology(), False)
  202. self.assertEqual(D.get_granularity(), "2 days")
  203. def test_temporal_overlay_operators_3(self):
  204. """Testing the spatial overlay operator."""
  205. self.assertModule(
  206. "t.vect.algebra",
  207. expression="R = buff_p(A,2.5) {&,during,l} buff_p(C,2.5)",
  208. basename="r",
  209. )
  210. D = tgis.open_old_stds("R", type="stvds")
  211. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  212. self.assertEqual(D.metadata.get_number_of_points(), 0)
  213. self.assertEqual(D.metadata.get_number_of_areas(), 8)
  214. self.assertEqual(D.metadata.get_number_of_centroids(), 8)
  215. start, end = D.get_absolute_time()
  216. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  217. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  218. self.assertEqual(D.check_temporal_topology(), True)
  219. self.assertEqual(D.get_granularity(), "1 day")
  220. if __name__ == "__main__":
  221. test()