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

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

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

Line 
1"""
2pywps process example:
3
4addvalue: Adds some value to raster map
5"""
6# Author:       Jachym Cepicky
7#               http://les-ejk.cz
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,shutil
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        # 'Identifier' = 'addvalue'
42        self.Identifier = "addvalue"
43
44        # processVersion - version of this process
45        # processVersion = "0.1"
46        self.processVersion = "0.1"
47
48        # Title - title for this process
49        # Title = "Add some value to the raster map"
50        self.Title="Add some value to raster map"
51
52        #
53        # Inputs
54        # Inputs is an array of input structure
55        # Inputs = [ {input1},{input2},{...} ]
56        #
57        self.Inputs = [
58                # This module has 2 inputs:
59                # 1) Input raster map
60                # 2) Value to be added
61
62                # First input
63                    {
64                        'Identifier':'input',
65                        'Title': 'Input raster map',
66                        'ComplexValueReference': {
67                            'Formats': [ "image/tiff" ]
68                        },
69                    },
70
71                # Second input
72                    {
73                        'Identifier': 'value',
74                        'Title': 'Value to be added',
75                        'LiteralValue': {'values':["*"]},
76                        'dataType' : type(0.0), # you should set this for input params controll
77                        'value':None
78                    },
79                # 2
80                    {
81                        'Identifier': 'noth',
82                        'Title': 'Array',
83                        'LiteralValue': {'values':[10,20]},
84                        'dataType' : type(0.0), # you should set this for input params controll
85                        'value':10,
86                        'MinimumOccurs': 3,
87                    },
88                # 3
89                    {
90                        'Identifier': 'bbox',
91                        'Title': 'Bounding Box',
92                        'Abstract': 'Required BoundibgBox',
93                        'BoundingBoxValue': {},
94                        'value':True
95                    },
96
97                ]
98
99        #
100        # Output
101        # The structure is not much different from the input structure
102        #
103        self.Outputs = [
104                {
105                    'Identifier': 'outputVal',
106                    'Title': 'Resulting output map',
107                    'ComplexValueReference': {
108                        'Formats':["image/tiff"],
109                        },
110                    'value':None
111                },
112                {
113                    'Identifier': 'outputRef',
114                    'Title': 'Resulting output map',
115                    'ComplexValueReference': {
116                        'Formats':["image/tiff"],
117                        },
118                    'value':None
119                },
120                {
121                    'Identifier': 'bbox',
122                    'Title': 'Bounding box of the map',
123                    'BoundingBoxValue': {},
124                    'value':[]
125                },
126                {
127                    'Identifier': 'litval',
128                    'Title': 'literal value',
129                    'LiteralValue': {'UOMs':["km"]},
130                    'value':" ahoj "
131                }
132
133
134
135            ]
136
137        #
138        # Optional attributes
139        #
140        #
141        # storeSuported = "true" or "false" - should the resulting map be stored on our disk?
142        self.storeSupported = "true"
143
144        #
145        # statusSupported = "true" or "false" - if statusLocation is set, the server
146        # will not wait for the end of the operation and will return the
147        # ExectuceResponce XML file immediately, without the ProcessOutput section
148        # but with the statusLocation parameter
149        self.statusSupported = "true"
150        # and many others
151
152    #####################################################################
153    #
154    # Execute part of the process
155    #
156    #####################################################################
157    def execute(self):
158        """
159        This function
160            1) Imports the raster map
161            2) runs r.mapcalc out=in+value
162            3) Exports the raster map
163            4) returns the new file name or 'None' if something went wrong
164        """
165
166        os.system("r.in.gdal -o in=%s out=input >&2" %\
167                (self.DataInputs['input']))
168
169        self.status = ["Ahoj, svete", 10]
170
171        for gdalinfoln in os.popen("gdalinfo %s" % \
172                (self.DataInputs['input'])):
173            if gdalinfoln.split()[0] == "Band" and gdalinfoln.split()[1] == "3":
174                os.system("""g.region rast=input.red >&2""")
175                os.system("r.composite r=input.red b=input.blue g=input.green out=input >&2")
176        os.system("""g.region rast=input >&2""")
177        os.system("r.mapcalc output=input+%f >&2" % \
178                (float(self.DataInputs['value'])))
179        os.system("r.out.gdal type=Int32 in=output out=%s 1>&2" % "output.tif")
180        self.status = ["Ahoj, svete", 90]
181
182        # boundingbox
183        region = {}
184        for b in os.popen("g.region -g"):
185            b = b.strip()
186            key,val = b.split("=")
187            region[key] = val
188
189        #time.sleep(10)
190        #os.system("r.out.tiff in=output out=output >&2")
191        if "output.tif" in os.listdir(os.curdir):
192            shutil.copy("output.tif","output2.tif")
193            self.DataOutputs['outputVal'] = "output.tif"
194            self.DataOutputs['outputRef'] = "output2.tif"
195            self.DataOutputs['bbox'] = [region['s'],region['e'],region['n'],region['w']]
196            return 
197        else:
198            return "Output file not created!"
Note: See TracBrowser for help on using the repository browser.