source: TI02-CSML/trunk/services/3rdParty/pywps-1.0.0/pywps/processes/visibility.py @ 2194

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/services/3rdParty/pywps-1.0.0/pywps/processes/visibility.py@2194
Revision 2194, 5.6 KB checked in by lawrence, 13 years ago (diff)

Adding various specs and 3rd party code of interest for the CSML
services development.

  • Property svn:executable set to *
Line 
1#!/usr/bin/python
2"""
3pywps process example:
4
5classify: Classify satellite image
6"""
7# Author:       Stepan Kafka
8# Lince:
9#
10# Web Processing Service implementation
11# Copyright (C) 2006 Jachym Cepicky
12#
13# This program is free software; you can redistribute it and/or modify
14# it under the terms of the GNU General Public License as published by
15# the Free Software Foundation; either version 2 of the License.
16#
17# This program is distributed in the hope that it will be useful,
18# but WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20# GNU General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, write to the Free Software
24# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
25
26import os,time,string,sys
27
28class Process:
29    #####################################################################
30    #
31    # Configuration part of the process
32    #
33    #####################################################################
34    def __init__(self):
35   
36        #
37        # Mandatory parameters
38        #
39       
40        # Identifier - name of this process
41        self.Identifier = "visibility"
42       
43        # processVersion - version of this process
44        self.processVersion = "0.1"
45       
46        # Title - title for this process
47        self.Title="Visibility analysis"
48        self.Abstract="GRASS processed line of sight analysis."
49        self.grassLocation="/home/bnhelp/grassdata/mylocation/"
50       
51        #
52        # Inputs
53        # Inputs is an array of input structure
54        # Inputs = [ {input1},{input2},{...} ]
55        #
56        self.Inputs = [
57                # 0
58                    {
59                        'Identifier': 'x',
60                        'Title': 'X coordinate',
61                        'LiteralData': {
62                            'values':["*"],
63                        },
64                        'dataType': type(0.0),
65                    },
66       
67                # 1
68                    {
69                        'Identifier': 'y',
70                        'Title': 'Y coordinate',
71                        'LiteralData': {
72                            'values':["*"],
73                        },
74                        'dataType': type(0.0),
75                    },
76                   
77                # 2
78                    {
79                        'Identifier':'maxdist',
80                        'Title': 'Maximal distance',
81                        'Abstract':'Maximal distance of visibility (meters)',
82                        'LiteralData': {
83                            'values':["*"],
84                        },
85                        'dataType': type(0.0),
86                    },
87       
88                # 3
89                    {
90                        'Identifier':'observer',
91                        'Title': 'Observer elevation',
92                        'Abstract':'The height of observer eye over the terrain (meters)',
93                        'LiteralData': {
94                            'values':["*"],
95                        },
96                        'dataType': type(0.0),
97                    }
98                ]
99       
100        #
101        # Output
102        # The structure is not much different from the input structure
103        #
104        self.Outputs = [
105                {
106                'Identifier': 'output',
107                'Title': 'Resulting output map',
108                'ComplexValueReference': {
109                    'Formats':["image/tiff"],
110                }
111            },
112        ]
113       
114        #
115        # Optional attributes
116        #
117        #
118        # storeSuport = "true" or "false" - should the resulting map be stored on our disk?
119        self.storeSupported = "true"
120       
121        #
122        # statusSupported = "true" or "false" - if statusLocation is set, the server
123        # will not wait for the end of the operation and will return the
124        # ExectuceResponce XML file immediately, without the ProcessOutput section
125        # but with the statusLocation parameter
126        self.statusSupported = "true"
127        # and many others
128       
129    #####################################################################
130    #
131    # Execute part of the process
132    #
133    #####################################################################
134    def execute(self):
135       
136        os.system("g.region -d")
137        dist = int(self.Inputs[2]['value'])
138        if dist > 20000:
139            return "Visibility Error: maximal distance 2000 exceeded (%d)" % dist
140        xmin=int(self.Inputs[0]['value']) - dist
141        ymin=int(self.Inputs[1]['value']) - dist
142        xmax=int(self.Inputs[0]['value']) + dist
143        ymax=int(self.Inputs[1]['value']) + dist
144        os.system("g.region w=%i s=%i e=%i n=%i align=dem_cr" % (xmin,ymin,xmax,ymax))
145        self.status=["Calculating visibility", ""]
146        os.system("r.los input=dem_cr output=output coordinate=%s,%s max_dist=%i obs_elev=%s" % \
147                (self.Inputs[0]['value'],self.Inputs[1]['value'],dist, self.Inputs[3]['value']))
148        self.status=["Creating output", ""]       
149        sys.stderr.write("r.los input=dem_cr output=output coordinate=%s,%s max_dist=%i obs_elev=%s\n"  %\
150               (self.Inputs[0]['value'],self.Inputs[1]['value'],dist, self.Inputs[3]['value']))
151        os.system("""r.mapcalc "output0=if(output,1,0)" """)
152        os.system("r.out.tiff -t -p input=output0 output=output0")
153        os.system("/usr/local/bin/gdal_translate -of GTiff output0.tif output.tif 1>&2")
154
155        # check the resulting file or any other variable, which interrests you
156        if "output.tif" in os.listdir(os.curdir):
157            self.Outputs[0]['value'] = "output.tif"
158            return
159        else:
160            return "Output file not created"
Note: See TracBrowser for help on using the repository browser.