test_v_rast_stats.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. """Test of r.univar
  2. @author Soeren Gebbert
  3. """
  4. from grass.gunittest.case import TestCase
  5. from grass.gunittest.gmodules import SimpleModule
  6. from grass.pygrass.vector import VectorTopo
  7. from grass.pygrass.vector.geometry import Line
  8. class TestRastStats(TestCase):
  9. @classmethod
  10. def setUpClass(cls):
  11. """Use temporary region settings"""
  12. cls.use_temp_region()
  13. @classmethod
  14. def tearDownClass(cls):
  15. """!Remove the temporary region
  16. """
  17. cls.del_temp_region()
  18. def tearDown(self):
  19. self.runModule("g.remove", flags='f', type="raster", name="map_a")
  20. self.runModule("g.remove", flags='f', type="raster", name="map_b")
  21. self.runModule("g.remove", flags='f', type="raster", name="zone_map")
  22. self.runModule("g.remove", flags='f', type="raster", name="test_line")
  23. def setUp(self):
  24. """Create input data
  25. """
  26. self.runModule("g.region", res=1, n=90, s=0, w=0, e=90)
  27. self.runModule("r.mapcalc", expression="map_a = 100 + row() + col()",
  28. overwrite=True)
  29. self.runModule("r.mapcalc", expression="zone_map = if(row() < 20, 1,2)",
  30. overwrite=True)
  31. self.runModule("r.to.vect", input="zone_map", output="zone_map",
  32. type="area", overwrite=True)
  33. cols = [(u'cat', 'INTEGER PRIMARY KEY'), (u'name', 'VARCHAR(20)')]
  34. vt = VectorTopo('test_line')
  35. vt.open('w', tab_cols=cols)
  36. line1 = Line([(1, 1), (2, 1), (2, 2)])
  37. line2 = Line([(10, 20), (15, 22), (20, 32), (30, 40)])
  38. vt.write(line1, ('first',))
  39. vt.write(line2, ('second',))
  40. vt.table.conn.commit()
  41. vt.close()
  42. def test_1(self):
  43. # Output of v.rast.stats
  44. univar_string = """cat|value|label|a_minimum|a_maximum|a_sum
  45. 1|1||102|209|265905
  46. 2|2||121|280|1281195
  47. """
  48. self.assertModule("v.rast.stats", map="zone_map", raster="map_a",
  49. method=["minimum", "maximum", "sum"], flags="c",
  50. column_prefix="a")
  51. v_db_select = SimpleModule("v.db.select", map="zone_map")
  52. self.runModule(v_db_select)
  53. self.assertLooksLike(univar_string, str(v_db_select.outputs.stdout))
  54. def test_line_d(self):
  55. output_str = """cat|name|a_median|a_number|a_range
  56. 1|first|192|3|1
  57. 2|second|181|41|6
  58. """
  59. self.assertModule("v.rast.stats", map="test_line", raster="map_a",
  60. method=["median", "number", "range"], flags="dc",
  61. column_prefix="a")
  62. v_db_select = SimpleModule("v.db.select", map="test_line")
  63. self.runModule(v_db_select)
  64. self.assertLooksLike(output_str, str(v_db_select.outputs.stdout))
  65. def test_line(self):
  66. output_str = """cat|name|a_median|a_number|a_range
  67. 1|first|192|5|2
  68. 2|second|181|27|5
  69. """
  70. self.assertModule("v.rast.stats", map="test_line", raster="map_a",
  71. method=["median", "number", "range"], flags="c",
  72. column_prefix="a")
  73. v_db_select = SimpleModule("v.db.select", map="test_line")
  74. self.runModule(v_db_select)
  75. self.assertLooksLike(output_str, str(v_db_select.outputs.stdout))
  76. class TestRastStatsFails(TestCase):
  77. def test_error_handling_a(self):
  78. # No vector map
  79. self.assertModuleFail("v.rast.stats", raster="map_a",
  80. column_prefix="a")
  81. def test_error_handling_b(self):
  82. # No raster map
  83. self.assertModuleFail("v.rast.stats", map="zone_map",
  84. column_prefix="a")
  85. def test_error_handling_d(self):
  86. # No column_prefix
  87. self.assertModuleFail("v.rast.stats", map="zone_map", raster="map_b")
  88. if __name__ == '__main__':
  89. from grass.gunittest.main import test
  90. test()