Changeset 5002 for cows


Ignore:
Timestamp:
20/02/09 13:10:02 (11 years ago)
Author:
domlowe
Message:

svn commit -m fixed WCS CRS handling so correct CRSs are advertised

Location:
cows/trunk/cows
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • cows/trunk/cows/pylons/templates/wcs_describecoverage_1_0_0.xml

    r4910 r5002  
    77?> 
    88 
     9  <?python   
     10def getCRSList(boundingBoxes): 
     11""" Builds a string of CRS names   from bounding boxes  """ 
     12crsstr='' 
     13for bb in boundingBoxes: 
     14        crsstr=crsstr + bb.crs + ' ' 
     15if len(crsstr) > 0: 
     16        crsstr=crsstr[:-1] #strip last space 
     17return crsstr 
     18  ?> 
     19 
    920<CoverageDescription xmlns:py="http://genshi.edgewall.org/" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" version="1.0.0"> 
    1021        <CoverageOffering py:for="cd in c.descriptions">         
     
    1223        <name py:content="cd.identifier"/>         
    1324        <label py:if="cd.titles is not None" py:content="cd.titles"/>         
    14         <lonLatEnvelope py:for="bb in cd.boundingBoxes"> 
     25        <lonLatEnvelope py:for="bb in cd.wgs84BoundingBoxes"> 
    1526                    <gml:pos>${bb.lowerCorner[0]}  ${bb.lowerCorner[1]}</gml:pos> 
    1627                    <gml:pos>${bb.upperCorner[0]}  ${bb.upperCorner[1]}</gml:pos> 
     
    5162        </rangeSet> 
    5263        <supportedCRSs> 
    53              <requestCRSs>${cd.crs}</requestCRSs> 
    54             <responseCRSs>${cd.crs}</responseCRSs> 
     64             <requestCRSs>${getCRSList(cd.boundingBoxes)}</requestCRSs> 
     65            <responseCRSs>${getCRSList(cd.boundingBoxes)}</responseCRSs> 
    5566        </supportedCRSs> 
    5667        <supportedFormats> 
  • cows/trunk/cows/pylons/wcs_controller.py

    r4955 r5002  
    110110            ds = WcsDatasetSummary(identifier=coverage.id, 
    111111                                 titles=coverage.title, 
    112                                  boundingBoxes=[BoundingBox([bbox[0],bbox[1]], [bbox[2],bbox[3]], 
    113                                  crs='CRS:84')],  
     112                                 boundingBoxes=[coverage.bboxes],  
    114113                                 description=coverage.description, 
    115114                                 abstracts=coverage.abstract, 
     
    205204        for cvgName, coverage in self.layers.items(): 
    206205            log.debug(cvgName) 
    207             if cvgName == requestCvg: 
    208                 log.debug('found match') 
    209                 wgs84BBox = WGS84BoundingBox(coverage.wgs84BBox[:2], 
    210                                          coverage.wgs84BBox[2:]) 
    211                 # Get CRS/BBOX pairs 
    212                 bboxObjs = [] 
    213                 for crs in coverage.crss: 
    214                     bbox = coverage.getBBox(crs) 
    215                     bboxObjs.append(BoundingBox(bbox[:2], bbox[2:], crs=crs)) 
    216                      
     206            if cvgName == requestCvg:                     
    217207                # Create the enhanced Dataset summary for thic coverage 
    218                 #TODO, the bounding box may include a Z dimension in WCS. 
    219                 #TODO, what extra information does this require over the normal dataset summary                 
     208                #TODO, the bounding box may include a Z dimension in WCS.                 
    220209                ds = CoverageDescription(identifier=coverage.id, 
    221210                                     titles=coverage.title, 
    222                                      boundingBoxes=[BoundingBox([bbox[0],bbox[1]], [bbox[2],bbox[3]], 
    223                                      crs='CRS:84')],  
     211                                     wgs84BoundingBoxes=[coverage.wgs84BBox], 
     212                                     boundingBoxes=coverage.bboxes,  
    224213                                     description=coverage.description, 
    225214                                     abstracts=coverage.abstract, 
  • cows/trunk/cows/service/imps/csmlbackend/wcs_csmllayer.py

    r4955 r5002  
    2222 
    2323from cows.model.wcs import WcsDatasetSummary 
     24from cows.model.common import BoundingBox, WGS84BoundingBox 
    2425from cows.service.imps.csmlbackend.csmlcommon import CSMLLayerMapper, CSMLConnector, extractToNetCDF 
    2526 
     
    4849        timelimits=[domain[tax][0],domain[tax][len(domain[tax])-1]]   
    4950        crs=feature.getNativeCRS() 
    50         log.debug(crs) 
    51         crss=[self._crscat.getCRS(crs).twoD] #TODO - populate cataloge for rotated grid 
     51        log.debug('crs %s'%crs) 
     52        crss=[self._crscat.getCRS(crs).twoD]  
    5253        if 'EPSG:4326' in crss: 
    5354            crss.append('CRS:84') 
    5455            crss.append('WGS84') 
    55         log.debug(crss) 
     56        log.debug('crss %s'%crss) 
    5657        #build definitions of any Z axes such as air_pressure: 
    5758        axisDescriptions=[]         
     
    107108        if len(layermap) > 0: 
    108109            self.layermapcache[fileoruri]=layermap 
    109             return layermap 
     110            return layermap  
    110111        else: 
    111112            raise ValueError 
     
    131132        self._feature=feature 
    132133        self.id=feature.id 
    133         try:  
    134             bb = self._feature.getCSMLBoundingBox().getBox() 
    135         except: 
    136             #default to global 
    137             bb=[-180,-90,180,90] 
    138              
    139         #convert 0 - 360 to -180, 180 as per common WXS convention 
    140         if abs(bb[2]-bb[0]) >= 359 and abs(bb[2]-bb[0]) < 361: 
    141             bb[0], bb[2]=-180, 180 
    142         self.wgs84BBox = bb 
     134        self.bboxes=[] 
     135                 
     136        csmlbb = self._feature.getCSMLBoundingBox() 
     137        twoDCRS=csmlbb.get2DCRSName() 
     138        #default to global bounding box: 
     139        bb=[-180,90,180,90] 
     140        if twoDCRS=='EPSG:4326': 
     141            try: 
     142                bb=csmlbb.getBox() 
     143                #convert 0 - 360 to -180, 180 as per common WXS convention 
     144                if abs(bb[2]-bb[0]) >= 359 and abs(bb[2]-bb[0]) < 361: 
     145                    bb[0], bb[2]=-180, 180         
     146            except: 
     147                #failed to get better bbox info from CSML file: 
     148                pass 
     149        self.wgs84BBox = WGS84BoundingBox(bb[:2], 
     150                                         bb[2:]) 
     151        #now create list of all other bounding boxes: 
     152        if twoDCRS not in ['EPSG:4326', None]: 
     153            #then add this bbox to the list: 
     154            alternativebbox=csmlbb.getBox() 
     155            self.bboxes.append(BoundingBox([alternativebbox[0],alternativebbox[1]], [alternativebbox[2],alternativebbox[3]], twoDCRS)) 
    143156        self.featureInfoFormats = ['text/html'] 
    144157        self.axisDescriptions = axisDescriptions 
Note: See TracChangeset for help on using the changeset viewer.