PyWPS / GRASS analýza viditelnosti / Verze 2

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

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>
...