Changeset 4311 for cows/trunk/cows


Ignore:
Timestamp:
08/10/08 15:13:05 (11 years ago)
Author:
domlowe
Message:

Supporting code for bbox and temporal filtering. Methods not yet implemented.

Location:
cows/trunk/cows
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • cows/trunk/cows/model/filterencoding.py

    r4303 r4311  
    5555                f=Filter('GmlObjectId', value) 
    5656                self.filters.append(f) 
     57            elif elem.tag==OGC('BBOX'): 
     58                value=(1,2,3,4) 
     59                srsname='WGS84' 
     60                f=BBoxFilter(srsname, 'BBOX', value) 
     61                self.filters.append(f) 
     62                 
    5763         
    5864class Filter(object): 
     
    6470        self.filtertype = filtertype 
    6571        self.filtervalue = filtervalue 
     72 
     73class BBoxFilter(Filter): 
     74    """ As Filter, but with additional srsname attribute """ 
     75    def __init__(self, srsname, *args): 
     76        super(BBoxFilter, self).__init__(*args) 
     77        self.srsname=srsname 
    6678         
    6779class FEQueryProcessor(object): 
     
    7082    Assumptions: 
    7183        1) GmlObjectId is only used as a filter alone or with other GmlObjectId filters, not with other filter types. 
    72         2) Other filter types, such as bounding box or temporal range fitlers only appear once.  
    73      
     84        2) Other filter types, such as bounding box or temporal range filters only appear once.  
    7485     
    7586    """ 
     
    8091        temporalrangeresults=[] 
    8192        bboxresults=[] 
     93        temporalflag=False 
     94        bboxflag = False 
    8295        for filter in filters: 
     96            log.debug('Filtertype %s'%filter.filtertype) 
    8397            if filter.filtertype=='GmlObjectId':            
    8498                feature=self.featureset.getFeatureByGMLid(filter.filtervalue) 
     
    87101            else: 
    88102                #handle other filtertypes, bbox & temporal for now: 
    89                 if filter.filtertype=='BBox': 
    90                     bboxresults=self.featureset.getFeaturesByBBox()                     
    91                 if filter.filtertype=='TemporalRange': 
    92                     temporalrangeresults=self.featureset.getFeaturesByTemporalRange()            
    93                 self.resultset=self._combineresults([set(temporalrangeresults), set(bboxresults)]) 
     103                if filter.filtertype=='BBOX': 
     104                    bboxflag=True 
     105                    bboxresults=self.featureset.getFeaturesByBBox(filter.filtervalue, filter.srsname)                     
     106                elif filter.filtertype=='TemporalRange': 
     107                    temporalflag=True 
     108                    temporalrangeresults=self.featureset.getFeaturesByTemporalRange(filter.filtervalue)            
     109         
     110        #Now work out what the overlapping (if appropriate) resultset is. 
     111        log.debug('bboxflag %s'%bboxflag) 
     112        if temporalflag and bboxflag: #both filters applied 
     113            log.debug('results from temporal & bbox filter %s'%self.resultset) 
     114            self.resultset=self._combineresults([set(temporalrangeresults), set(bboxresults)]) 
     115        elif temporalflag: #only temporal filter 
     116            self.resultset=temporalrangeresults 
     117            log.debug('results from temporal only filter %s'%self.resultset) 
     118        elif bboxflag: #only bbox filter             
     119            self.resultset=bboxresults 
     120            log.debug('results from bbox only filter %s'%self.resultset) 
     121             
     122        log.debug('results from gml filter %s'%self.resultset) 
     123        #TODO, handle null filter                          
     124             
    94125                 
    95126    def _combineresults(self, results):       
  • cows/trunk/cows/service/imps/csmlbackend/wfs_csmllayer.py

    r4303 r4311  
    8585        return self.featureinstances[gmlid] 
    8686     
    87     def getFeaturesByBBox(self,bboxtuple): 
    88         return [] 
     87    def getFeaturesByBBox(self,bboxtuple, srsname): 
     88        #dummy   
     89        log.debug('GET FEATURES BY BBOX') 
     90        #dummy return value 
     91        #TODO, process bounding boxes for each feature                     
     92        return [self.featureinstances['BLcqIIBG']] 
     93 
    8994     
    9095    def getFeaturesByTemporalRange(self, range): 
  • cows/trunk/cows/service/wfs_iface.py

    r4303 r4311  
    2929        raise NotImplementedError 
    3030     
    31     def getFeaturesByBBox(self,bboxtuple): 
    32         """ return features within a bbox (llx, lly, urx, ury) 
     31    def getFeaturesByBBox(self,bboxtuple, srsname): 
     32        """ return features within a bbox (llx, lly, urx, ury) in a particular srs 
    3333        @return: zero or more IFeatureInstance  
    3434        """ 
Note: See TracChangeset for help on using the changeset viewer.