source: TI02-CSML/trunk/csml/csmllibs/csmlcrs.py @ 1968

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

crs idenfication tests real model data

Line 
1import string
2import cdms # just while testing
3
4class CRSystem(object):
5    def __init__(self, srsName, axes):
6        self.srsName=srsName
7        self.axes=axes
8        self.timeAxis=None
9        self.lonAxis=None
10        self.latAxis=None
11        self.srsDimension=len(self.axes)
12        self.axisLabels=''
13        for axis in self.axes:
14            self.axisLabels=self.axisLabels + axis + ' '
15
16class CRSCatalogue(object):
17    def __init__(self):
18        # dictionary to hold known CRSystems:
19        self.systems={}
20       
21        # define lon lat pressure time CRS:       
22        crs=CRSystem(srsName='ndg:crs:xypt', axes =['Lon', 'Lat','Pressure','Time'])
23        crs.lonAxis=0
24        crs.latAxis=1
25        crs.timeAxis=3
26        self.systems['ndg:crs:xypt']=crs
27       
28        # define lon lat height time CRS:       
29        crs=CRSystem(srsName='ndg:crs:xyht', axes =['Lon', 'Lat','Height','Time'])
30        crs.lonAxis=0
31        crs.latAxis=1
32        crs.timeAxis=3
33        self.systems['ndg:crs:xyht']=crs
34       
35        # define lon lat time CRS:
36        crs=CRSystem(srsName='ndg:crs:xyt', axes =['Lon', 'Lat','Time'])
37        self.systems['ndg:crs:xyt']=crs
38       
39        #define unknown CRS:
40        crs=CRSystem(srsName='ndg:crs:unknown', axes=['unknown'])
41        self.systems['ndg:crs:unknown']=crs
42       
43    def getCRS(self, axes, units):
44        #given any list of axis names and a list of units for these axes attempt to determine the CRS
45        crs=self.systems['ndg:crs:unknown']
46        if len(axes)==3:
47            #it's a 3d crs
48            for axis in axes:
49                for unit in units:
50                    if string.lower(unit) in ['second', 'seconds', 's', 'mins','minute','minutes','hour','hours','h','hr','hrs','day','days']:
51                        #unit is time
52                        return self.systems['ndg:crs:xyt']
53        elif len(axes)==4:
54            #it's a 4d crs
55            pass       
56        return crs
57       
58def main():
59    cat=CRSCatalogue()
60   
61    #test getting various crs
62    print 'TEST 1:'
63    print '*************************************'
64    axs=['longitude', 'latitude', 'pressure', 't']
65    uns=['','','Pa','s']
66    print 'AXES: %s'%axs
67    print 'UNITS: %s'%uns
68    crs= cat.getCRS(axes=axs, units=uns)
69    print 'srsName = %s' %crs.srsName
70    print 'srsDimension = %s' %crs.srsDimension
71    print 'axisLabels =%s' %crs.axisLabels
72    print '**************************************'
73   
74    print 'TEST 2:'
75    print '*************************************'
76    axs=['longitude', 'latitude', 't']
77    uns=['','','s'] 
78    print 'AXES: %s'%axs
79    print 'UNITS: %s'%uns
80    crs=cat.getCRS(axes=axs, units=uns)
81    print 'srsName = %s' %crs.srsName
82    print 'srsDimension = %s' %crs.srsDimension
83    print 'axisLabels = %s' %crs.axisLabels
84   
85   
86   
87    crsdictionary={}
88    f=cdms.open('/home/dom/Desktop/SVN/trunk/csml/testfiles/gridseries/xaaqda@pxs19c1.nc')
89    for var in f.variables:
90        v=f.variables[var]
91        axes=v.getAxisIds()
92 #   print axes
93        units =[]
94        for axis in axes:
95            ax=f.getAxis(axis)
96            units.append(ax.attributes['units'])
97#    print units
98        crsdictionary[str(axes)]=units
99    print crsdictionary
100    n=2
101    #test each definition in dictionary
102    for key in crsdictionary:
103        n=n+1
104        print 'TEST %d'%n
105        print '*************************************'
106        axs =key
107        uns=crsdictionary[key]
108        print 'AXES: %s'%axs
109        print 'UNITS: %s'%uns
110        crs= cat.getCRS(axes=axs, units=uns)
111        print 'srsName = %s' %crs.srsName
112        print 'srsDimension = %s' %crs.srsDimension
113        print 'axisLabels =%s' %crs.axisLabels
114        print '**************************************'
115   
116   
117   
118   
119   
120
121if __name__=="__main__":
122    main()
Note: See TracBrowser for help on using the repository browser.