Changeset 3042


Ignore:
Timestamp:
23/11/07 10:33:38 (12 years ago)
Author:
domlowe
Message:

valid ragged section csml output after subsetting

Location:
TI02-CSML/trunk/csml
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml/API/ops_RaggedSectionFeature.py

    r3039 r3042  
    4848 
    4949def subsetByTime(self, outputdir=None, ncname='pointseries.nc' ,times=None): 
     50    descriptors=[] 
    5051    if outputdir is not None: 
    5152        self.outputdir=outputdir 
     
    101102        if testlen > maxlen: 
    102103            maxlen =testlen 
     104    #and store selected lengths: 
     105    selectedLengths=[l for l in lengths[minIndex:maxIndex+1]]         
     106     
    103107 
    104108    #assuming each timestep is in a separate file, minIndex and maxIndex refer to the position of files in the series.         
     
    115119     
    116120    #Write out CSML feature 
     121    #create a RaggedSectionCoverage 
     122    cvg=csml.parser.SectionCoverage() 
     123    cvg.id=csml.csmllibs.csmlextra.getRandomID() 
     124     
     125      
     126    #create a Domain (appropriate domain for a PointSeriesFeature 
     127    sect=csml.parser.SectionDomain() 
     128    sect.id=csml.csmllibs.csmlextra.getRandomID() 
     129     
     130    #get min and max profile lengths: 
     131     
     132    minl = maxl=eval(selectedLengths[0]) 
     133    for l in selectedLengths: 
     134        testl=eval(l) 
     135        if testl < minl: 
     136            minl=testl 
     137        if testl > maxl: 
     138            maxl=testl 
     139         
     140    lowlim=csml.parser.csString(minl) 
     141    highlim=csml.parser.csString(maxl) 
     142    sect.limits=csml.parser.GridEnvelope(low=lowlim, high=highlim) 
     143    sect.srsName=self.value.sectionDomain.srsName 
     144    sect.axisLabels=self.value.sectionDomain.axisLabels 
     145    sect.dimension=self.value.sectionDomain.dimension 
     146    sect.srsDimension=self.value.sectionDomain.srsDimension 
     147    sect.aLabels=self.value.sectionDomain.aLabels 
     148     
     149    sect.coordTransformTable=self.value.sectionDomain.coordTransformTable 
     150    descriptorid=csml.csmllibs.csmlextra.getRandomID() 
     151    sect.coordTransformTable.gridOrdinates.coordAxisValues.href='#'+descriptorid 
     152    vname=sect.coordTransformTable.gridOrdinates.coordAxisLabel 
     153    descriptors.append(csml.parser.NetCDFExtract(id=descriptorid,fileName=csml.parser.csString(ncname),variableName=vname,arraySize=csml.parser.csString(len(self._depths)))) 
     154         
     155    sdid=csml.csmllibs.csmlextra.getRandomID() # for the storage descriptor 
     156    #create a RangeSet 
     157    rs=csml.parser.RangeSet() 
     158    va=csml.parser.ValueArray() 
     159    vc=csml.parser.MeasureOrNullList() 
     160    vc.href='#%s'%sdid 
     161    vc.arcrole="http://ndg.nerc.ac.uk/xlinkUsage/insert#QuantityList" 
     162    vc.role="http://ndg.nerc.ac.uk/fileFormat/csmlStorageDescriptor" 
     163    vc.show='embed' 
     164     
     165     
     166    try: 
     167        vc.uom=self.value.rangeSet.valueArray.valueComponent.uom 
     168    except: 
     169        try: 
     170            vc.uom=self.value.rangeSet.arrayDescriptor.uom.CONTENT 
     171        except: 
     172            vc.uom = 'unknown'   
     173    va.valueComponent=vc 
     174    va.id=csml.csmllibs.csmlextra.getRandomID() 
     175    rs.valueArray=va 
     176     
     177     
     178    #Add the domain and rangeSet as attributes of the coverage 
     179    cvg.sectionDomain=sect 
     180    cvg.rangeSet=rs 
     181     
     182    descriptors.append(csml.parser.NetCDFExtract(id=sdid,fileName=csml.parser.csString(ncname),variableName=self.name,arraySize=csml.parser.csString(len(selectedTimes)))) 
     183     
     184    #the parameter of the feature is of type Phenomenon, here href creates "xlink:href=..." 
     185    param=self.parameter 
     186     
     187       
     188    #create a stand alone raggedsection feature containing this coverage 
     189    csmlWrap=csml.csmllibs.csmlfeaturewrap.CSMLWrapper() 
     190    subsettedFeature=csmlWrap.createRaggedSectionFeature(value=cvg,parameter=param, stationtimes=selectedTimes, stationlats=selectedLats, stationlons=selectedLons, profilelengths=selectedLengths,featureID=csml.csmllibs.csmlextra.getRandomID(),name=self.name,description=self.description) 
     191     
     192     
    117193         
    118194    #Write out NetCDF file 
     
    169245    nc.close()    
    170246    print 'NetCDF file written to %s'%pathToSubsetNetCDF 
    171     return None,None,None 
    172     #return subsettedFeature, pathToSubsetNetCDF, descriptor 
    173      
    174      
    175     #fextract=self.value.rangeSet.arrayDescriptor.components 
    176     #uom = self.value.rangeSet.arrayDescriptor.uom 
    177     #print minIndex 
    178     #print maxIndex 
    179     #data, fillvalue=fextract.getDataFromChunks(minIndex, maxIndex) 
    180     #print data 
    181      
    182     #return subsettedFeature, pathToSubsetNetCDF, descriptor 
     247    return subsettedFeature, pathToSubsetNetCDF, descriptors 
  • TI02-CSML/trunk/csml/csmllibs/csmlfeaturewrap.py

    r2758 r3042  
    5454        return feature 
    5555     
     56    def createRaggedSectionFeature(self,value, parameter=None,featureID=None, stationtimes=None, stationlats=None,stationlons=None,profilelengths=None,name=None, description=None): 
     57        feature=csml.parser.RaggedSectionFeature() 
     58        feature= self._createAbstractFeature(feature, value, parameter,featureID, name, description) 
     59        feature.stationTimes=csml.parser.csString(csml.csmllibs.csmlextra.stringify(stationtimes)) 
     60        stationlocations='' 
     61        for i in range(0, len(stationlats)): 
     62            stationlocations=stationlocations + str(stationlats[i]) + ' ' + str(stationlons[i]) + ' ' 
     63        feature.stationLocations=csml.parser.csString(stationlocations) 
     64        feature.profileLength=csml.parser.csString(csml.csmllibs.csmlextra.stringify(profilelengths)) 
     65        return feature 
     66     
    5667    #def setBoundingEnvelope(self,lowerCorner,upperCorner,timePosition1,timePosition2): 
    5768        ##set the bounding box envelope of the feature collection.  
Note: See TracChangeset for help on using the changeset viewer.