PyWPS / GRASS analýza viditelnosti / Verze 2
Tato stránka popisuje druhou 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 jsou definovány vstupní parametry (viz přehled níže), výstupem je výměra (v mapových jednotkách) území viditelného z daného bodu.
Povinné vstupní parametry:
-
bbox
- bounding box definující rozsah výpočetního regionu (minx,miny,maxx,maxy) -
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
Soubor se skriptem pojmenujeme viewshed-2.py, výsledek je ke stažení zde.
Definice vstupních parametrů služby
Úprava skriptu
V konstruktoru třídy Process
definuje vstupní parametry následujícím způsobem:
# vstupní parametry
# - výpočetní region (bbox)
self.bbox=self.addBBoxInput(identifier = "bbox",
title = "Rozsah výpočetního regionu (w,s,e,n)",
crss=['EPSG:3857'])
# - observační bod
self.obs_x=self.addLiteralInput(identifier = "obs_x",
title = "Observační bod: souřadnice X",
type = types.FloatType)
self.obs_y=self.addLiteralInput(identifier = "obs_y",
title = "Observační bod: souřadnice Y",
type = types.FloatType)
# - výška nad terénem
self.obs_h=self.addLiteralInput(identifier = "obs_h",
title = "Observační bod: výška nad terénem",
type = types.FloatType, default=1.75)
Dále upravíme metody pro nastavení regionu a výpočtu 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())
# 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())
# nastavení výpočetního regionu (rozlišení převzato ze vstupního rastru)
def set_region(self, raster, bbox):
run_command('g.region', rast=raster, n=bbox.coords[1][1], s=bbox.coords[0][1],
w=bbox.coords[0][0], e=bbox.coords[1][0])
# výpočet viditelnosti
def viewshed(self, elev, coord):
run_command('r.viewshed', input=elev, output=self.view_map,
coord=coord, flags='b', obs_elev=self.obs_h.getValue())
Test definice vstupních parametrů
http://geo102.fsv.cvut.cz/cgi-bin/pywps.cgi?service=wps&version=1.0.0&request=describeProcess&identifier=viewshed-2
...
<DataInputs>
<Input minOccurs="0" maxOccurs="1">
<ows:Identifier>obs_h</ows:Identifier>
<ows:Title>Observační bod: výška nad terénem</ows:Title>
<LiteralData>
<ows:DataType ows:reference="http://www.w3.org/TR/xmlschema-2/#float">float</ows:DataType>
<ows:AnyValue />
<DefaultValue>1.75</DefaultValue>
</LiteralData>
</Input>
<Input minOccurs="1" maxOccurs="1">
<ows:Identifier>obs_x</ows:Identifier>
<ows:Title>Observační bod: souřadnice X</ows:Title>
<LiteralData>
<ows:DataType ows:reference="http://www.w3.org/TR/xmlschema-2/#float">float</ows:DataType>
<ows:AnyValue />
</LiteralData>
</Input>
<Input minOccurs="1" maxOccurs="1">
<ows:Identifier>obs_y</ows:Identifier>
<ows:Title>Observační bod: souřadnice Y</ows:Title>
<LiteralData>
<ows:DataType ows:reference="http://www.w3.org/TR/xmlschema-2/#float">float</ows:DataType>
<ows:AnyValue />
</LiteralData>
</Input>
<Input minOccurs="1" maxOccurs="1">
<ows:Identifier>bbox</ows:Identifier>
<ows:Title>Rozsah výpočetního regionu (w,s,e,n)</ows:Title>
<BoundingBoxData>
<Default>
<CRS>EPSG:3358</CRS>
</Default>
<Supported>
<CRS>EPSG:3358</CRS>
</Supported>
</BoundingBoxData>
</Input>
</DataInputs>
...
Test služby
http://geo102.fsv.cvut.cz/services/yfsgwps?service=wps&version=1.0.0&identifier=viewshed-2&datainputs=%5Bobs_x=1550820.86;obs_y=6542921.33;bbox=1545808.36,6537908.83,1555833.36,6547933.83%5D&request=execute
...
<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>
...
Když snížíme výšku observačního bodu nad terénem z výchozí hodnoty 1.75 na 0.5m (obs_h=0.5
), tak se výměra viditelného území přiměřeně zmenší (z 1028ha na 566ha).
http://geo102.fsv.cvut.cz/services/yfsgwps?service=wps&version=1.0.0&identifier=viewshed-2&datainputs=%5Bobs_h=0.5;obs_x=1550820.86;obs_y=6542921.33;bbox=1545808.36,6537908.83,1555833.36,6547933.83%5D&request=execute
...
<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">566</wps:LiteralData>
</wps:Data>
</wps:Output>
...