Ignore:
Timestamp:
07/04/06 16:33:46 (14 years ago)
Author:
domlowe
Message:

Scanner rewrite: GridSeriesFeatures? done

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/Scanner/csmllibs/csmlfeaturetypes.py

    r758 r771  
    88 
    99import csmllibs 
    10  
     10import sys 
    1111 
    1212class featureBuilder: 
     
    3434     
    3535    def createCSMLGridSeriesFeatures(self): 
    36         #This function is for model data and assumes that the variables (features) are shared across identically structured files 
    37         #should be supplied with a featurefilemap object (see csmlfiles for FileMapMaker), with a onetomany file map relationship.(not necessarily one to many) 
     36        #This function assumes that the variables (features) are shared across identically structured files 
     37        #should be supplied with a featurefilemap object (see csmlfiles for FileMapMaker) 
    3838         
    3939        representativeFiles=self.ffmap.getRepresentativeFiles() 
     
    6363            allVarNames=DI.getListofVariables() 
    6464            numFeatures=len(allVarNames) 
     65            #Create a GridSeriesFeature for each variable: 
    6566            for i in range(0, numFeatures): 
    6667                print allVarNames[i] 
     
    7071                    #it's an axis or bounds not a feature, try next variable 
    7172                    continue 
     73                 
    7274                GridSeriesFeature_element=csmllibs.Parser.GridSeriesFeature() 
    7375                GridSeriesFeature_element.id=str(allVarNames[i]) 
    74                  
    7576                #description: need to get the attribute called long_name (?? TODO - is this CF compliant??) 
    7677                #use Ag's getbestname from nappy package? 
     
    8687                #*********************************************************************** 
    8788                gsDomain=csmllibs.Parser.GridSeriesDomain() 
     89                 
     90                #*********************************************************************** 
     91                # domainReference element  
     92                #*********************************************************************** 
    8893                tpl=csmllibs.Parser.TimePositionList() 
     94                tpl.timePositions=timeString 
     95                gsDomain.domainReference=tpl 
    8996                grid=csmllibs.Parser.Grid() 
    90                      
    91                 gsDomain.domainReference=tpl 
    92                 gsDomain.domainComplement=grid# 
     97                 
    9398                GridSeriesFeature_element.gridSeriesDomain=gsDomain 
    94                      
    95                     # GridSeriesDomain_element=self.csml.createElement("GridSeriesDomain") 
    96 #                 #*********************************************************************** 
    97 #                 # gml:coverageFunction element (and sub-element MappingRule) 
    98 #                 #*********************************************************************** 
    99 #                 gml_coverageFunction_element=self.csml.createElement("gml:coverageFunction") 
    100 #                 MappingRule_element=self.csml.createElement("MappingRule") 
    101 #                 MappingRule_element.setAttribute('scanOrder',csmllibs.csmlextra.getMappingRule(len(dimNames))) 
    102 #                 gml_coverageFunction_element.appendChild(MappingRule_element) 
    103 #                 #*********************************************************************** 
    104 #                 # gml:rangeSet element (and sub-elements) 
    105 #                 #*********************************************************************** 
    106 #                 gml_rangeSet_element=self.csml.createElement("gml:rangeSet") 
    107 #                 AggregatedArray_element=self.csml.createElement("AggregatedArray") 
    108 #                 arraySize_element=self.csml.createElement("arraySize") 
    109 #                 #arrSz = getArraySize(var) 
    110 #                 arrSz = DI.getArraySizeOfVar() 
    111 #                 arraySize_element.appendChild(self.csml.createTextNode(str(arrSz))) 
    112 #                 uom_element=self.csml.createElement("uom") 
    113 #                 try: 
    114 #                     #strUom = var.units 
    115 #                     strUom = DI.getVariableAttribute('units') 
    116 #                 except AttributeError: 
    117 #                     #if units attribute doesn't exist: 
    118 #                     strUom ="dimensionless or units not determined" 
    119 #                 uom_element.appendChild(self.csml.createTextNode(strUom)) 
    120 #                 AggregatedArray_element.appendChild(uom_element) 
    121 #                 aggType_element=self.csml.createElement("aggType") 
    122 #                 aggType_element.appendChild(self.csml.createTextNode('new')) 
    123 #                 aggIndex_element=self.csml.createElement("aggIndex") 
    124 #                 aggIndex_element.appendChild(self.csml.createTextNode('1')) 
    125 #                 AggregatedArray_element.appendChild(arraySize_element) 
    126 #                 AggregatedArray_element.appendChild(aggType_element) 
    127 #                 AggregatedArray_element.appendChild(aggIndex_element) 
    128 #                 component_element=self.csml.createElement("component") 
    129 #                 #FileExtract element will be NetCDF/GRIB/PPExtract element (As defined earlier in ExtractType) 
    130 #                 FileExtract_element=self.csml.createElement(self.extractType) 
    131 #                 arraySize_element=self.csml.createElement("arraySize") 
    132 #                 #varSize =var.shape 
    133 #                 varSize=DI.getShapeOfVar() 
    134 #                 arraySize_element.appendChild(self.csml.createTextNode(csmllibs.csmlextra.cleanString1(str(varSize)))) 
    135 #                 FileExtract_element.appendChild(arraySize_element) 
    136 #                 fileName_element=self.csml.createElement("fileName") 
    137 #                 FileExtract_element.appendChild(fileName_element) 
    138 #                 #This is the problem: too many filenames >>templating/wildcard needed 
    139 #                 #fileName_element.appendChild(csmldoc.createTextNode(cleanString2(str(allFileNames)))) 
    140 #                 #fileName_element.appendChild(csmldoc.createTextNode("WILDCARDNEEDED")) 
    141 #                 #fileName_element.appendChild(csmldoc.createTextNode(os.path.dirname(templateFileList[k]) + '/*')) 
    142 #                 fileName_element.appendChild(self.csml.createTextNode(filesinDir)) 
    143 #                 variableName_element=self.csml.createElement("variableName") 
    144 #                 variableName_element.appendChild(self.csml.createTextNode(allVarNames[i])) 
    145 #                 FileExtract_element.appendChild(variableName_element) 
    146 #                 component_element.appendChild(FileExtract_element) 
    147 #                 AggregatedArray_element.appendChild(component_element) 
    148 #                 gml_rangeSet_element.appendChild(AggregatedArray_element) 
    149 #                 ############################################## 
    150 #                 #*********************************************************************** 
    151 #                 # domainReference element (and sub-elements)           
    152 #                 #*********************************************************************** 
    153 #                 domainReference_element=self.csml.createElement("domainReference") 
    154 #                 gml_timePositionList_element = self.csml.createElement("gml:TimePositionList") 
    155 #                 gml_timePositionList_element.appendChild(self.csml.createTextNode(timeString)) 
    156 #                 domainReference_element.appendChild(gml_timePositionList_element) 
    157 #                 #*********************************************************************** 
     99                #*********************************************************************** 
     100                #coverageFunction 
     101                mr =csmllibs.Parser.MappingRule(csmllibs.csmlextra.getMappingRule(len(dimNames))) 
     102             
     103                GridSeriesFeature_element.coverageFunction=mr  
     104 
     105               #*********************************************************************** 
     106              # gml:rangeSet element  
     107              #*********************************************************************** 
     108                arrSz = DI.getArraySizeOfVar() 
     109              
     110                try: 
     111                    strUom = DI.getVariableAttribute('units') 
     112                except AttributeError: 
     113    #                if units attribute doesn't exist: 
     114                        strUom ="dimensionless or units not determined" 
     115 
     116                rs=csmllibs.Parser.RangeSet() 
     117                aa=csmllibs.Parser.AggregatedArray() 
     118                aa.arraySize=str(arrSz) 
     119                aa.uom=strUom 
     120                aa.aggType='new' #can it be anything else? 
     121                aa.aggIndex='1' 
     122                #FileExtract (fe) element will be NetCDF/GRIB/PPExtract element (As defined earlier in ExtractType) 
     123                if self.extractType=='NetCDFExtract': 
     124                    fe = csmllibs.Parser.NetCDFExtract() 
     125                if self.extractType=='NASAAmesExtract': 
     126                    fe = csmllibs.Parser.NASAAmesExtract() 
     127                if self.extractType=='GRIBExtract': 
     128                    fe = csmllibs.Parser.GRIBExtract() 
     129                if self.extractType=='PPExtract': 
     130                    fe = csmllibs.Parser.PPExtract() 
     131                     
     132                varSize=DI.getShapeOfVar() 
     133                fe.arraySize=csmllibs.csmlextra.cleanString1(str(varSize)) 
     134                fe.fileName=filesinDir 
     135                fe.variableName=allVarNames[i] 
     136                aa.component=[fe] 
     137                rs.aggregatedArray=aa 
     138                GridSeriesFeature_element.rangeSet=rs 
     139                ###################################################### 
     140 
     141 
    158142#                 #*********************************************************************** 
    159143#                 # domainComplement element (and sub-elements) 
    160144#                 #*********************************************************************** 
    161 #                 domainComplement_element=self.csml.createElement("domainComplement") 
    162 #                 Grid_element=self.csml.createElement("Grid") 
    163 #                 #need to get no. of spatial dimensions (corresponds to axis in domainComplement) 
    164 #                 numSpDims=len(varSize) -1 
    165 #                 #numSpDims = len(var.shape) - 1 #assuming one dimension is non-spatial (time) 
    166 #                 Grid_element.setAttribute('srsName', 'urn:SomeProjection') 
    167 #                 Grid_element.setAttribute( 'srsDimension', str(numSpDims)) 
    168 #                 Grid_element.setAttribute('dimension' ,str(numSpDims)) 
    169 #                 gml_GridEnvelope_element=self.csml.createElement("gml:GridEnvelope") 
    170 #                 gml_limits_element=self.csml.createElement("gml:limits") 
    171 #                 gml_low_element=self.csml.createElement("gml:low") 
    172 #                 gml_high_element=self.csml.createElement("gml:high") 
    173 #                 lowLimits=DI.getLowLimits() 
    174 #                 highLimits=DI.getHighLimits() 
    175 #                 gml_low_element.appendChild(self.csml.createTextNode(lowLimits)) 
    176 #                 gml_high_element.appendChild(self.csml.createTextNode(highLimits)) 
    177 #                 gml_GridEnvelope_element.appendChild(gml_low_element) 
    178 #                 gml_GridEnvelope_element.appendChild(gml_high_element) 
    179 #                 gml_limits_element.appendChild(gml_GridEnvelope_element) 
    180 #                 Grid_element.appendChild(gml_limits_element) 
    181 #                 #add an axisName element for  each spatial dimension. 
    182 #                 for i in range (1, len(dimNames)): 
    183 #                     gml_axisName_element=self.csml.createElement("gml:axisName") 
    184 #                     gml_axisName_element.appendChild(self.csml.createTextNode("dim" + str(i))) 
    185 #                     Grid_element.appendChild(gml_axisName_element) 
    186 #                  
    187 #                 #Add ordinate element and sub elements: 
    188 #                 for i in range (1, len(dimNames)): 
    189 #                     ordinate_element=self.csml.createElement("ordinate") 
    190 #                     gridAxesSpanned_element=self.csml.createElement("gridAxesSpanned") 
    191 #                     gridAxesSpanned_element.appendChild(self.csml.createTextNode("dim" + str(i))) 
    192 #                     sequenceRule_element=self.csml.createElement("sequenceRule") 
    193 #                     sequenceRule_element.appendChild(self.csml.createTextNode(csmllibs.csmlextra.getSeqRule(len(dimNames)))) 
    194 #                     definesAxis_element=self.csml.createElement("definesAxis") 
    195 #                     dimName = dimNames[len(dimNames)-i] 
    196 #                     definesAxis_element.appendChild(self.csml.createTextNode(dimName)) 
    197 #                     axisValues_element=self.csml.createElement("axisValues") 
    198 #                     #look up file extract name in dictionary 
    199 #                     #(axisid stored in dictionary = current filename + variable name) 
    200 #                     axisid = repfilename + dimName 
    201 #                     axisValues = self.fileExtractDictionary[axisid] 
    202 #                     axisValues_element.appendChild(self.csml.createTextNode(axisValues)) 
    203 #                     ordinate_element.appendChild(gridAxesSpanned_element) 
    204 #                     ordinate_element.appendChild(sequenceRule_element) 
    205 #                     ordinate_element.appendChild(definesAxis_element) 
    206 #                     ordinate_element.appendChild(axisValues_element) 
    207 #                     Grid_element.appendChild(ordinate_element) 
    208 #                      
    209 #                 domainComplement_element.appendChild(Grid_element) 
    210 #                 GridSeriesDomain_element.appendChild(domainReference_element) 
    211 #                 GridSeriesDomain_element.appendChild(domainComplement_element) 
    212 #                 GridSeriesFeature_element.appendChild(GridSeriesDomain_element) 
    213 #                 GridSeriesFeature_element.appendChild(gml_rangeSet_element) 
    214 #                 GridSeriesFeature_element.appendChild(gml_coverageFunction_element) 
    215 #                 gml_featureMember_element.appendChild(GridSeriesFeature_element) 
    216 #                 self.gml_FeatureCollection_element.appendChild(gml_featureMember_element) 
     145                grid.srsName='urn:EPSG:GeographicCRS:4326' 
     146                numSpDims=len(varSize) -1  
     147                grid.srsDimension=str(numSpDims) 
     148                grid.dimension=str(numSpDims) 
     149                ge =csmllibs.Parser.GridEnvelope(low=DI.getLowLimits(), high=DI.getHighLimits()) 
     150                grid.limits=ge 
     151 
    217152                 
     153                #add an axisName element(s) for  each spatial dimension. 
     154                # and an ordinate element 
     155                for i in range (1, len(dimNames)): 
     156                    #axisNames 
     157                    axes=[] 
     158                    axisname ='dim'+str(i) 
     159                    axes.append(axisname) 
     160                    grid.axisNames=axes 
     161                     
     162                    #ordinates 
     163                    grid.ordinates=[] 
     164                    for i in range (1, len(dimNames)): 
     165                        ord=csmllibs.Parser.GridOrdinateDescription() 
     166                        ord.gridAxesSpanned='dim' + str(i) 
     167                        ord.sequenceRule=csmllibs.csmlextra.getSeqRule(len(dimNames)) 
     168                        dimName=dimNames[len(dimNames)-i] 
     169                        ord.definesAxis=dimName 
     170                        #look up file extract name in dictionary 
     171                         #(axisid stored in dictionary = current filename + variable name) 
     172                        axisid=repfilename+dimName 
     173                        ord.axisValues=self.fileExtractDictionary[axisid] 
     174                         
     175                        grid.ordinates.append(ord) 
     176 
     177                gsDomain.domainComplement=grid 
    218178                self.fms.append(GridSeriesFeature_element) 
    219179            DI.closeFile() 
Note: See TracChangeset for help on using the changeset viewer.