test_r_viewshed.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import grass.gunittest
  2. from grass.gunittest.gmodules import call_module
  3. class TestViewshed(grass.gunittest.TestCase):
  4. def test_limits(self):
  5. obs_elev = '1.72'
  6. viewshed = 'limits_obs_elev'
  7. self.assertModule('r.viewshed', input='elevation',
  8. coordinates=(634720,216180), output=viewshed, obs_elev=obs_elev)
  9. self.assertRasterMinMax(map=viewshed, refmin=0, refmax=180,
  10. msg="Viewing angle above the ground must be between 0 and 180 deg")
  11. class TestViewshedAgainstReference(grass.gunittest.TestCase):
  12. """
  13. Data created using NC data set::
  14. g.region n=216990 s=215520 w=633730 e=635950 res=10 -p
  15. r.out.ascii elevation out=data/elevation.ascii
  16. r.viewshed input=elevation output=lake_viewshed coordinates=634720,216180 obs_elev=1.72
  17. r.out.ascii lake_viewshed out=data/lake_viewshed.ascii
  18. """
  19. # precision for comparisons
  20. precision = 0.0001
  21. @classmethod
  22. def setUpClass(cls):
  23. cls.use_temp_region()
  24. call_module('g.region', n=216990, s=215520, e=635950, w=633730, res=10)
  25. cls.elevation = 'ref_elevation'
  26. cls.runModule('r.in.ascii', input='data/elevation.ascii',
  27. output=cls.elevation)
  28. @classmethod
  29. def tearDownClass(cls):
  30. cls.del_temp_region()
  31. cls.runModule('g.remove', flags='f', type='rast', pattern=cls.elevation)
  32. def test_viewshed(self):
  33. ref_viewshed = 'reference_viewshed'
  34. viewshed = 'actual_viewshed'
  35. obs_elev = '1.72'
  36. self.runModule('r.in.ascii',
  37. input='data/lake_viewshed.ascii', output=ref_viewshed)
  38. print "assertModule..."
  39. self.assertModule('r.viewshed', input=self.elevation,
  40. coordinates=(634720,216180), output=viewshed, obs_elev=obs_elev)
  41. # check we have expected values
  42. print "assertRasterMinMax..."
  43. self.assertRasterMinMax(map=viewshed, refmin=0, refmax=180,
  44. msg="Viewshed in degrees must be between 0 and 180")
  45. # check against reference data
  46. print "assertRastersNoDifference..."
  47. self.assertRastersNoDifference(actual=viewshed, reference=ref_viewshed,
  48. precision=self.precision)
  49. # TODO: add self.assertRasterFitsUnivar()
  50. if __name__ == '__main__':
  51. grass.gunittest.test()