Ignore:
Timestamp:
14/01/08 17:03:23 (13 years ago)
Author:
mkochan
Message:

[UNTESTED] Added multiple views of GridSeries? data -- added splitting into folders by month and year. Made this configurable in the CSML2KML config file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • DPPP/kml/csml2kml/python/kmlfeatures.py

    r3210 r3214  
    2929 
    3030        # The time steps  
    31         self.timeSteps=timeSteps 
     31        self.timeSteps=timeSteps.split() 
    3232 
    3333        # Valid bounds of the individual timesteps 
    34         self.timeBounds=timeBounds 
     34        self.timeBounds=timeBounds.split() 
     35     
     36    def _getYMD(self, timestep): 
     37        matchObject = re.match("(\d+)\-(\d+)\-(\d+)T", timestep) 
     38        (sYear, sMonth, sDay) = matchObject.groups() 
     39        return (sYear, sMonth, sDay) 
    3540 
    36      
    3741    def _getLogicalTimeSpan(self, timestep, logicalYearTransform): 
    3842        '''Translate timestep to a timespan that covers a full month in a year 
     
    8892        return wmsRequest 
    8993 
    90     def outputKML(self, logicalYearTransform): 
     94    def outputKML(self, viewConfig): 
    9195        ''' method to output KML as ElementTree instance - returns a 'Folder' element which can be put into a KML Document element ''' 
    9296         
    93         # Build XML document structure -- call _buildWMSRequest to get individual request strings. 
     97        # Analyze view configuration -- this determines how data will be presented 
     98        sbText = viewConfig.find('SplitBy').text 
     99        lytText = viewConfig.find('LogicalYearTransform').text 
     100 
     101        viewElement=Element('Folder') 
     102        SubElement(viewElement, 'name').text='View_' + sbText 
     103        SubElement(viewElement, 'open').text='0' 
     104        SubElement(viewElement, 'visibility').text='0' 
     105         
     106        if lytText == 'DECADES_SINCE_1900': 
     107            logicalYearTransform = getDecadeSince1900 
     108        else: 
     109            logicalYearTransform = getSameYear 
     110 
     111        def split_by(timeStep): 
     112            (sYear, sMonth, sDay) = self._getYMD(timestep) 
     113            if sbText == '': 
     114                return timeStep 
     115            elif sbText == 'years': 
     116                return sYear 
     117            elif sbText == 'months': 
     118                return sMonth 
     119 
     120        def g(acc, x): 
     121            category = split_by(x) 
     122            if not acc.has_key(category): 
     123                acc[category] = [] 
     124            acc[category].append(x) 
     125 
     126        dict = reduce(g, timeSteps) 
     127         
     128        for category in dict: 
     129             
     130            # Build XML document structure -- call _buildWMSRequest to get individual request strings. 
    94131       
    95         folderElement=Element('Folder') 
    96         SubElement(folderElement, 'name').text=str(self.description) 
    97         SubElement(folderElement, 'open').text='0' 
    98         SubElement(folderElement, 'visibility').text='0' 
     132            folderElement=Element('Folder') 
     133            SubElement(folderElement, 'name').text='Folder_' + category 
     134            SubElement(folderElement, 'open').text='0' 
     135            SubElement(folderElement, 'visibility').text='0' 
    99136         
    100         for timestep in self.timeSteps.split(): 
     137            for timestep in dict[category]: 
    101138 
    102             goElement=SubElement(folderElement, 'GroundOverlay')       
    103             SubElement(goElement, 'name').text=self.name + ' ' + timestep 
    104             SubElement(goElement, 'open').text='0' 
    105             SubElement(goElement, 'visibility').text='0' 
     139                goElement=SubElement(folderElement, 'GroundOverlay')       
     140                SubElement(goElement, 'name').text=self.name + ' ' + timestep 
     141                SubElement(goElement, 'open').text='0' 
     142                SubElement(goElement, 'visibility').text='0' 
    106143 
    107             timespanElement=SubElement(goElement, 'TimeSpan') 
    108             (startTime, endTime) = self._getLogicalTimeSpan(timestep, logicalYearTransform) 
    109             SubElement(timespanElement, 'begin').text=startTime 
    110             SubElement(timespanElement, 'end').text=endTime 
     144                timespanElement=SubElement(goElement, 'TimeSpan') 
     145                (startTime, endTime) = self._getLogicalTimeSpan(timestep, logicalYearTransform) 
     146                SubElement(timespanElement, 'begin').text=startTime 
     147                SubElement(timespanElement, 'end').text=endTime 
    111148 
    112             # Include the WMS service call address 
    113             iconElement=SubElement(goElement,'icon') 
    114             SubElement(iconElement, 'href').text=self._buildWMSRequest(timestep) 
    115             SubElement(iconElement, 'refreshMode').text='onExpire' 
     149                # Include the WMS service call address 
     150                iconElement=SubElement(goElement,'icon') 
     151                SubElement(iconElement, 'href').text=self._buildWMSRequest(timestep) 
     152                SubElement(iconElement, 'refreshMode').text='onExpire' 
    116153 
    117             latlonboxElement=SubElement(goElement, 'LatLonBox') 
    118             SubElement(latlonboxElement, 'north').text=str(self.bBox.north) 
    119             SubElement(latlonboxElement, 'south').text=str(self.bBox.south) 
    120             SubElement(latlonboxElement, 'east' ).text=str(self.bBox.east) 
    121             SubElement(latlonboxElement, 'west' ).text=str(self.bBox.west) 
     154                latlonboxElement=SubElement(goElement, 'LatLonBox') 
     155                SubElement(latlonboxElement, 'north').text=str(self.bBox.north) 
     156                SubElement(latlonboxElement, 'south').text=str(self.bBox.south) 
     157                SubElement(latlonboxElement, 'east' ).text=str(self.bBox.east) 
     158                SubElement(latlonboxElement, 'west' ).text=str(self.bBox.west) 
    122159         
    123         return folderElement 
     160            SubElement(viewElement, folderElement) 
     161 
     162        return viewElement 
    124163 
    125164# ---------- These are defined *outside* the class -- i.e. they are plain functions  
Note: See TracChangeset for help on using the changeset viewer.