PyWPS / GRASS analýza viditelnosti / Verze 3

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

Tato stránka popisuje třetí 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.

Na rozdíl od první verze a druhé verze zapisuje výsledek do PNG souboru.

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

Úprava skriptu

Máme hned několik možností:

  1. Export do PNG (r.out.gdal)
  2. Nastavení výstupního formátu PNG (r.external.out)

Přidáme další výstupní parametr, do kterého uložíme URL výsledného PNG souboru (rastru viditelnosti):

...
          self.answer=self.addLiteralOutput(identifier = "visible_area",
                                            title = "Výměra viditelného území v hektarech")

          # cesta k PNG souboru
          self.png_file = self.addComplexOutput(identifier = "output",
                                                title = "Výstupní rastr viditelnosti",
                                                formats = [ {"mimeType":"image/png"} ],
                                                asReference = True)
...

Export do PNG (r.out.gdal)

Přídáme metodu pro export rastrové mapy viditelnosti do formátu PNG:

     # exportovat výsledek do formátu PNG
     def export_to_png(self, path='/var/www/pywps/outputs', url='http://geo102.fsv.cvut.cz/pywps/outputs'):
          png_file = os.path.join(path, self.view_map) + '.png'
          run_command('r.out.gdal', input=self.view_map,
                      output=png_file,
                      format = 'PNG', type='Byte')
          
          self.png_file.setValue(png_file)

Tuto metodu zavoláme v execute()

     # výpočet viditelnosti v daném výpočetním regionu a observačního bodu (viewpoint)
     def execute(self, raster='elevation'):
          # nastavení regionu
          self.set_region(raster, self.bbox.getValue())
          # výpočet viditelnosti
          self.viewshed(raster, (self.obs_x.getValue(), self.obs_y.getValue()))
          # nastavení výstupní hodnoty
          self.answer.setValue(self.get_visible_area())
          # export výsledku do formátu PNG
          self.export_to_png()

Nastavení PNG jako výstupního formátu (r.external.out)

Definujeme metodu pro nastavení výstupního formátu

    # nastavit výstupní formát                                                                                                                                        
     def set_output_to_png(self, path='/var/www/pywps/outputs'):
          run_command('r.external.out', directory=path, format='PNG', extension='png')

a tuto metodu zavoláme před samotným výpočtem viditelnosti.

     # výpočet viditelnosti v daném výpočetním regionu a observačního bodu (viewpoint)
     def execute(self, raster='dmt'):
          # nastavení regionu
          self.set_region(raster, self.bbox.getValue())
          # před vytvořením výstupu nastavit výstupní formát
          self.set_output_to_png()
          # výpočet viditelnosti
          self.viewshed(raster, (self.obs_x.getValue(), self.obs_y.getValue()))
          # nastavení výstupní hodnoty
          self.answer.setValue(self.get_visible_area())

Test služby

http://geo102.fsv.cvut.cz/services/yfsgwps?service=wps&version=1.0.0&identifier=viewshed-3&datainputs=%5Bobs_x=1550820.86;obs_y=6542921.33;bbox=1545808.36,6537908.83,1555833.36,6547933.83%5D&request=execute
<wps:ProcessOutputs>
 <wps:Output>
  <ows:Identifier>output</ows:Identifier>
  <ows:Title>Výstupní rastr viditelnosti</ows:Title>
  <wps:Reference href="http://geo102.fsv.cvut.cz/pywps/outputs/output-8e7a1dc4-ca1f-11e3-9cf4-0024e83789c1.png" mimeType="image/png"/>
 </wps:Output>
  <wps:Output>
   <ows:Identifier>visible_area</ows:Identifier>
   <ows:Title>Výměra viditelného území v hektarech</ows:Title>
   <wps:Data><wps:LiteralData dataType="integer">1028</wps:LiteralData></wps:Data>
  </wps:Output>
</wps:ProcessOutputs>

Výsledný soubor ve formátu PNG je zapsán do adresáře http://geo102.fsv.cvut.cz/pywps/outputs/.

Příklad výstupu ve formátu PNG