PyWPS / GRASS analýza viditelnosti / Verze 4

Z FreeGIS portál
Přejít na: navigace, hledání

Tato stránka popisuje čtvrtou verzi WPS služby pro výpočet viditelnosti. Implementováno pomocí PyWPS a GRASS GIS. GRASS lokace 'eu-dem-merc' je ke stažení zde.

Tato verze vychází z třetí verze služby pro výpočet viditelnosti a je upravena pro potřeby webové aplikace napsané pomocí OpenLayers.

Soubor se skriptem pojmenujeme viewshed-4.py, výsledek je ke stažení zde.

Úprava skriptu

Skript bude mít následující povinné vstupní parametry:

  • obs_x - x-ová souřadnice observačního bodu
  • obs_y - y-ová souřadnice observačního bodu

Volitelné vstupní parametry:

  • obs_h - výška observačního bodu nad terénem

Výstupní parameter:

  • output - rastr viditelnosti ve formátu PNG (Base64)

Výpočetní region bude odvozen z observačního bodu s offsetem 5km. Výsledný region bude vždy 10km x 10km.

Soubor se skriptem pojmenujeme viewshed-4.py, výsledek je ke stažení zde.

V konstruktoru třídy Process přidáme argument storeSupported a statusSupported:

          WPSProcess.__init__(self,
                              identifier="viewshed-4", # odpovídá názvu souboru
...
                              grassLocation=location, storeSupported = True, statusSupported = True)
...

Funkci pro definování výpočetního regionu upravíme tak, že bude nastavovat region s daným offsetem kolem observačního bodu:

     # výpočet viditelnosti v daném výpočetním regionu a observačního bodu (viewpoint)
     def execute(self, raster='dmt'):
          obs_point = (self.obs_x.getValue(), self.obs_y.getValue())
          # nastavení regionu
          self.set_region(raster, obs_point)
          ...

    # nastavení výpočetního regionu (rozlišení převzato ze vstupního rastru)
     def set_region(self, raster, obs_point, offset=3e3):
          run_command('g.region', rast=raster, n=obs_point[1]+offset, s=obs_point[1]-offset,
                      w=obs_point[0]-offset, e=obs_point[0]+offset)

Dále při exportu rastru viditelnosti do formátu PNG nastavíme hodnutu '0' na no-data:

     # exportovat výsledek do formátu PNG
     def export_to_png(self):
          png_file = self.view_map + '.png'
          run_command('r.out.gdal', input=self.view_map,
                      output=png_file,
                      format = 'PNG', type='Byte', nodata=0)
          self.output.setValue(png_file)

Test služby

  • DescribeProcess:
http://geo102.fsv.cvut.cz/services/yfsgwps?service=wps&version=1.0.0&identifier=viewshed-4&request=DescribeProcess
  • Execute:
http://geo102.fsv.cvut.cz/services/yfsgwps?service=wps&version=1.0.0&identifier=viewshed-4&datainputs=%5Bobs_x=1550820.86;obs_y=6542921.33%5D&request=execute

Webová aplikace

Tuto verzi služby publikujeme pomocí ukázkové webové aplikace vytvořené pomocí knihovny OpenLayers. Kód aplikace byl inspirován http://rsg.pml.ac.uk/wps/example/index.html.

http://geo102.fsv.cvut.cz/~landa/vyuka/155YFSG/viewshed/

Zdrojové kódy webová aplikace jsou ke stažení zde.

Užitečné odkazy