Changeset 3219 for DPPP/kml


Ignore:
Timestamp:
15/01/08 11:40:07 (12 years ago)
Author:
mkochan
Message:
 
Location:
DPPP/kml/csml2kml/python
Files:
2 edited

Legend:

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

    r3214 r3219  
    4545 
    4646        # Create and populate a separate folder for each view 
    47         for view in self.config.getRoot().findall('View'): 
    48             splitByText = view.find('SplitBy').text 
    49             logicalYearTransformText = view.find('LogicalYearTransform').text 
    50             print 'Split by %s, using %s' % (splitByText, logicalYearTransformText) 
     47        for viewConfig in self.config.getRoot().findall('View'): 
     48            kmlViewElement = Element('Folder') 
     49            SubElement(kmlViewElement, 'name').text=view.get('name') 
     50            SubElement(kmlViewElement, 'open').text='1' 
    5151             
    5252            # Create a separate KML folder for each feature 
     53            features = self.ds.featureCollection.featureMembers 
    5354            for feature in features: 
    5455                 
    5556                # GridSeriesFeatureWrapper allows extended querying of a GridSeriesFeature object 
    56                 gsFeature=GridSeriesFeatureWrapper(feature)  
    57  
    58                 description = feature.description.CONTENT      
     57                gsFeature=GridSeriesFeatureWrapper(feature) 
     58                description = feature.description.CONTENT    
    5959                name = feature.name.CONTENT 
    6060                bBox = gsFeature.getBBox() 
     
    6767                    ) 
    6868 
    69                 # Call the outputKML method of this object to generate a populated KML Folder element 
    70                 kmlViewElement = gsKML.outputKML(view) 
    71  
    72                 # Append the folder to the kml document. 
    73                 kmlDocumentElement.append(kmlViewElement) 
     69                # Generate a populated KML folder containing the feature, append it to the view 
     70                kmlFeatureElement = gsKML.exportFeature(viewConfig) 
     71                kmlViewElement.append(kmlFeatureElement) 
     72             
     73            kmlDocumentElement.append(kmlViewElement) 
    7474             
    7575        # Attach the Document element as a subelement of the root 'kml' element 
  • DPPP/kml/csml2kml/python/kmlfeatures.py

    r3214 r3219  
    6767        # Set request configuration parameters 
    6868        c = self.config 
    69         url = c.get('URL') 
    70         serviceVersion = c.get('ServiceVersion') 
    71         imageFormat = c.get('ImageFormat') 
    72         imageWidth = c.get('ImageWidth') 
    73         imageHeight = c.get('ImageHeight') 
    74         crs = c.get('CRS') 
    75         layerName = c.get('LayerName') 
     69        xDir = 'CSMLGridSeriesFeatureWMSRequest/' 
     70        url = c.get(xDir + 'URL') 
     71        serviceVersion = c.get(xDir + 'ServiceVersion') 
     72        imageFormat = c.get(xDir + 'ImageFormat') 
     73        imageWidth = c.get(xDir + 'ImageWidth') 
     74        imageHeight = c.get(xDir + 'ImageHeight') 
     75        crs = c.get(xDir + 'CRS') 
     76        layerName = c.get(xDir + 'LayerName') 
    7677        filenameWithoutPath = self.parentFilename.split('/')[-1] 
    7778        filenameExcludingSuffix = string.join(filenameWithoutPath.split('.')[:-1], '.') 
     
    9293        return wmsRequest 
    9394 
    94     def outputKML(self, viewConfig): 
     95    def exportFeature(self, viewConfig): 
    9596        ''' method to output KML as ElementTree instance - returns a 'Folder' element which can be put into a KML Document element ''' 
    9697         
    9798        # Analyze view configuration -- this determines how data will be presented 
    98         sbText = viewConfig.find('SplitBy').text 
     99        splitBy = viewConfig.find('SplitTimeStepsBy').text 
     100 
    99101        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          
    106102        if lytText == 'DECADES_SINCE_1900': 
    107103            logicalYearTransform = getDecadeSince1900 
     
    109105            logicalYearTransform = getSameYear 
    110106 
    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 
     107        featureElement=Element('Folder') 
     108        SubElement(featureElement, 'name').text=name  # feature name 
     109        SubElement(featureElement, 'open').text='0' 
     110        SubElement(featureElement, 'visibility').text='0' 
    119111 
    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) 
     112        if splitBy == None: 
    125113 
    126         dict = reduce(g, timeSteps) 
     114            for timeStep in self.timeSteps: 
     115                goElement = self.buildGroundOverlayElement(timeStep) 
     116                SubElement(featureElement, goElement) 
     117 
     118        else: 
     119             
     120            def split_by(timeStep): 
     121                (sYear, sMonth, sDay) = self._getStringYMD(timeStep) 
     122                if splitBy == None: 
     123                    return timeStep 
     124                elif splitBy == 'years': 
     125                    return sYear 
     126                elif splitBy == 'months': 
     127                    return sMonth 
     128 
     129            dict = {} 
     130 
     131            for timeStep in self.timeSteps: 
     132                category = split_by(timeStep) 
     133                if not dict.has_key(category): 
     134                    dict[category] = [] 
     135                    dict[category].append(timeStep) 
     136 
     137            for category in dict: 
     138             
     139                categoryElement=Element('Folder') 
     140                SubElement(categoryElement, 'name').text='Category_' + category 
     141                SubElement(categoryElement, 'open').text='0' 
     142                SubElement(categoryElement, 'visibility').text='0' 
    127143         
    128         for category in dict: 
    129              
    130             # Build XML document structure -- call _buildWMSRequest to get individual request strings. 
    131        
    132             folderElement=Element('Folder') 
    133             SubElement(folderElement, 'name').text='Folder_' + category 
    134             SubElement(folderElement, 'open').text='0' 
    135             SubElement(folderElement, 'visibility').text='0' 
    136          
    137             for timestep in dict[category]: 
     144                for timeStep in dict[category]: 
     145                    goElement = self.buildGroundOverlayElement(timeStep) 
     146                    SubElement(categoryElement, goElement) 
     147                             
     148            SubElement(featureElement, categoryElement) 
    138149 
    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' 
     150        return featureElement 
    143151 
    144                 timespanElement=SubElement(goElement, 'TimeSpan') 
    145                 (startTime, endTime) = self._getLogicalTimeSpan(timestep, logicalYearTransform) 
    146                 SubElement(timespanElement, 'begin').text=startTime 
    147                 SubElement(timespanElement, 'end').text=endTime 
     152    def buildGroundOverlayElement(self, timeStep): 
    148153 
    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' 
     154        goElement=SubElement(folderElement, 'GroundOverlay')       
     155        SubElement(goElement, 'name').text=self.name + ' ' + timestep 
     156        SubElement(goElement, 'open').text='0' 
     157        SubElement(goElement, 'visibility').text='0' 
    153158 
    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) 
    159          
    160             SubElement(viewElement, folderElement) 
     159        timespanElement=SubElement(goElement, 'TimeSpan') 
     160        (startTime, endTime) = self._getLogicalTimeSpan(timestep, logicalYearTransform) 
     161        SubElement(timespanElement, 'begin').text=startTime 
     162        SubElement(timespanElement, 'end').text=endTime 
    161163 
    162         return viewElement 
     164        # Include the WMS service call address 
     165        iconElement=SubElement(goElement,'icon') 
     166        SubElement(iconElement, 'href').text=self._buildWMSRequest(timestep) 
     167        SubElement(iconElement, 'refreshMode').text='onExpire' 
     168 
     169        latlonboxElement=SubElement(goElement, 'LatLonBox') 
     170        SubElement(latlonboxElement, 'north').text=str(self.bBox.north) 
     171        SubElement(latlonboxElement, 'south').text=str(self.bBox.south) 
     172        SubElement(latlonboxElement, 'east' ).text=str(self.bBox.east) 
     173        SubElement(latlonboxElement, 'west' ).text=str(self.bBox.west) 
     174 
     175        return goElement 
    163176 
    164177# ---------- These are defined *outside* the class -- i.e. they are plain functions  
Note: See TracChangeset for help on using the changeset viewer.