source: TI02-CSML/trunk/csml/API/csmlutils.py @ 2209

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/csml/API/csmlutils.py@2209
Revision 2209, 3.1 KB checked in by domlowe, 13 years ago (diff)

removing rogue print statements

Line 
1'''csml utils contains useful  utility functions'''
2import csml
3
4def listify(item):
5    ''' listify checks if an item is a list, if it isn't it puts it inside a list and returns it. Always returns a list object'''
6    if type(item) is list:
7        return item
8    else:
9        return [item]
10   
11   
12   
13#deal with longitude requests
14#if the request is in -ve,+ve eg (-30,30) but the data is in (0,360) need to handle this by changing the args.
15def fixLongitude(request, kwargs):
16    for key in request.keys():
17        if kwargs.has_key(key):
18            if type(kwargs[key]) is not tuple:
19                continue
20            elif key == 'longitude': #how do we test if it is longitude properly?
21                for val in request[key]:
22                    if val < 0:
23                        pass
24                    else:
25                        if kwargs[key][0] < 0:
26                            kwargs[key]=(kwargs[key][0]+360,kwargs[key][1])
27                        if kwargs[key][1] < 0:
28                            kwargs[key]=(kwargs[key][0],kwargs[key][1]+360)
29    return kwargs
30                       
31                       
32                       
33def nudgeSingleValuesToAxisValues(value, axisValues):
34        """
35        Takes a value and checks if it is in the axisValues array. If not, it nudges the
36        value to the nearest neighbour in axis. It returns the new value twice along
37        with a message describing the change.
38        """
39
40        rtMessage=""
41        newValue=None
42       
43        def __fixTimes(value, axisValues):
44            newValue = csml.csmllibs.csmltime.getTimeAsValue(value)
45            newAxisValues=[]
46            for ax in axisValues:
47                newAxisValues.append(csml.csmllibs.csmltime.getTimeAsValue(ax))
48            return newValue, newAxisValues               
49       
50        if value in axisValues:
51            newValue=value
52        else:           
53            if str(value).find('T') != -1:
54                value, axisValues=__fixTimes(value,axisValues)
55            sortedAxis=[]
56            for i in axisValues:
57                sortedAxis.append(i)
58            sortedAxis.sort()   
59            if value<sortedAxis[0]:
60                newValue=sortedAxis[0]
61            elif value>sortedAxis[-1]:
62                newValue=sortedAxis[-1]
63            else:
64                for i in range(len(axisValues)):
65                    if i<(len(axisValues)-1):
66                        (current, nextone)=(axisValues[i], axisValues[i+1])
67                        if current>nextone:
68                            tempc=nextone
69                            nextone=current
70                            current=tempc
71                        if value>current and value<nextone:
72                            lowergap=value-current
73                            uppergap=nextone-value
74                            if uppergap==lowergap:
75                                newValue=nextone
76                            elif uppergap>lowergap:
77                                newValue=current
78                            elif uppergap<lowergap:
79                                newValue=nextone                       
80                            break
81            if newValue==None:
82                rtMessage="%s axis selected value '%s' nudged to nearest value in real axis '%s' ;" % (axisType, value, newValue)       
83        #        print rtMessag
84        if type(newValue) is float:
85            if len(str(int(newValue))) ==14: # it's a time
86                newValue=csml.csmllibs.csmltime.convertValueToCSML(newValue)   
87        return (newValue)                           
Note: See TracBrowser for help on using the repository browser.