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

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

CRS classes refined

Line 
1import string
2
3class CRSystem(object):
4    def __init__(self, srsName, axes):
5        self.srsName=srsName
6        self.axes=axes
7        self.timeAxis=None
8        self.lonAxis=None
9        self.latAxis=None
10        self.srsDimension=len(self.axes)
11        self.axisLabels=''
12        for axis in self.axes:
13            self.axisLabels=self.axisLabels + axis + ' '
14
15class CRSCatalogue(object):
16    def __init__(self):
17        # dictionary to hold known CRSystems:
18        self.systems={}
19       
20        # define lon lat pressure time CRS:       
21        crs=CRSystem(srsName='ndg:crs:xypt', axes =['Lon', 'Lat','Pressure','Time'])
22        crs.lonAxis=0
23        crs.latAxis=1
24        crs.timeAxis=3
25        self.systems['ndg:crs:xypt']=crs
26       
27        # define lon lat height time CRS:       
28        crs=CRSystem(srsName='ndg:crs:xyht', axes =['Lon', 'Lat','Height','Time'])
29        crs.lonAxis=0
30        crs.latAxis=1
31        crs.timeAxis=3
32        self.systems['ndg:crs:xyht']=crs
33       
34        # define lon lat time CRS:
35        crs=CRSystem(srsName='ndg:crs:xyt', axes =['Lon', 'Lat','Time'])
36        self.systems['ndg:crs:xyt']=crs
37       
38        #define unknown CRS:
39        crs=CRSystem(srsName='ndg:crs:unknown', axes=['unknown'])
40        self.systems['ndg:crs:unknown']=crs
41       
42    def getCRS(self, axes, units):
43        #given any list of axis names and a list of units for these axes attempt to determine the CRS
44        crs=self.systems['ndg:crs:unknown']
45        if len(axes)==3:
46            #it's a 3d crs
47            for axis in axes:
48                for unit in units:
49                    if string.lower(unit) in ['second', 'seconds', 's', 'mins','minute','minutes','hour','hours','h','hr','hrs','day','days']:
50                        #unit is time
51                        return self.systems['ndg:crs:xyt']
52        elif len(axes)==4:
53            #it's a 4d crs
54            pass       
55        return crs
56       
57def main():
58    cat=CRSCatalogue()
59   
60    #test getting various crs
61    print 'TEST 1:'
62    print '*************************************'
63    axs=['longitude', 'latitude', 'pressure', 't']
64    uns=['','','Pa','s']
65    print 'AXES: %s'%axs
66    print 'UNITS: %s'%uns
67    crs= cat.getCRS(axes=axs, units=uns)
68    print 'srsName = %s' %crs.srsName
69    print 'srsDimension = %s' %crs.srsDimension
70    print 'axisLabels =%s' %crs.axisLabels
71    print '**************************************'
72   
73    print 'TEST 2:'
74    print '*************************************'
75    axs=['longitude', 'latitude', 't']
76    uns=['','','s'] 
77    print 'AXES: %s'%axs
78    print 'UNITS: %s'%uns
79    crs=cat.getCRS(axes=axs, units=uns)
80    print 'srsName = %s' %crs.srsName
81    print 'srsDimension = %s' %crs.srsDimension
82    print 'axisLabels = %s' %crs.axisLabels
83
84if __name__=="__main__":
85    main()
Note: See TracBrowser for help on using the repository browser.