Changeset 4995


Ignore:
Timestamp:
18/02/09 16:21:29 (11 years ago)
Author:
cbyrom
Message:

Fix parsing of spatial data in granulite - now gets max/min boundaries
for any polygon specified + add keyword, initialiseAtom, to
processGranuilte to allow a fresh atom to be set when re-using the
object.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ndgCommon/trunk/ndg/common/src/lib/granulite.py

    r4964 r4995  
    327327            logging.debug("Spatial data specified in POLYGON format - extracting data from this") 
    328328            vals = re.findall('([\-\d\.]+)', geomString) 
    329             # assume we're dealing with a rectangle normal to the equator... 
    330             if len(vals) == 10: 
    331                 self._atom.minX = vals[0] 
    332                 self._atom.minY = vals[1] 
    333                 self._atom.maxX = vals[4] 
    334                 self._atom.maxY = vals[5] 
     329            # we're just going to extract max/min vals to create a rectangle normal to equator 
     330            # - NB, the data is specified in pairs of values 
     331            # NB, firstly need to convert data into floats to do comparisons 
     332            newVals = [] 
     333            for val in vals: 
     334                newVals.append(float(val)) 
     335             
     336            if len(newVals) >= 8: 
     337                # start with some initial values 
     338                self._atom.minX = newVals[0] 
     339                self._atom.minY = newVals[1] 
     340                self._atom.maxX = newVals[0] 
     341                self._atom.maxY = newVals[1] 
     342                 
     343                for i in range(len(newVals) - 1): 
     344                    # process array in pairs - so skip every second int 
     345                    if i % 2: 
     346                        continue 
     347                     
     348                    if newVals[i] < self._atom.minX: 
     349                        self._atom.minX = newVals[i] 
     350                    if newVals[i] > self._atom.maxX: 
     351                        self._atom.maxX = newVals[i] 
     352                    if newVals[i + 1] < self._atom.minY: 
     353                        self._atom.minY = newVals[i + 1] 
     354                    if newVals[i + 1] > self._atom.maxY: 
     355                        self._atom.maxY = newVals[i + 1] 
     356            else: 
     357                logging.debug("- insufficient data points to specify POLYGON - skipping") 
    335358        else: 
    336359            errorMessage = "Spatial coverage data not stored in POLYGON format - please correct and rerun" 
     
    565588 
    566589         
    567     def processGranulite(self, replaceAtom = False): 
     590    def processGranulite(self, replaceAtom = False, initialiseAtom = False): 
    568591        ''' 
    569592        Complete the required granulite actions 
     
    575598        @keyword replaceAtom: if True, allow granule atoms to replace existing 
    576599        atoms with the same ID - if False, throw a DuplicationError 
     600        @keyword initialiseAtom: if True, use a new atom object - otherwise 
     601        continue to use what is currently loaded 
    577602        @raise DumplicationError: if allowBackups = False and an atom is found 
    578603        with the same ID as that to be created   
     
    580605        ''' 
    581606        logging.info("Processing granulite data") 
     607        if initialiseAtom: 
     608            self.__initialiseGranule() 
     609             
    582610        # load in the granulite details 
    583611        inputs = self.__getGranuliteDetails() 
Note: See TracChangeset for help on using the changeset viewer.