PyWPS / GRASS analýza viditelnosti / Verze 3
Z FreeGIS portál
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í:
- Export do PNG (r.out.gdal)
- 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/.