Ignore:
Timestamp:
21/02/08 15:36:03 (12 years ago)
Author:
mkochan
Message:

Added support for storing datetimes in the WMSCapabilities.BottomWMSLayer class. Added a convertor class WMSCapabilities.WmsLayersConvertor? for conversion into KML.

File:
1 edited

Legend:

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

    r3479 r3497  
     1from pylab import dates     # a very good date/time module from matplotviz -- allows years < 1970 
     2 
    13wmsXmlNamespace = 'http://www.opengis.net/wms' 
    24 
     
    1618        return WMSLayer(name, title, abstract, childWmsLayers) 
    1719    else: 
    18         return BottomWMSLayer(name, title, abstract) 
     20        dimensionElements = layerElement.findall('{%s}Dimension' % wmsXmlNamespace) 
     21        for dimensionElement in dimensionElements: 
     22            if dimensionElement.get('name') == 'time': 
     23                times = map( dates.dateutil.parser.parse, dimensionElement.text.split(',') ) 
     24        return BottomWMSLayer(name, title, abstract, times) 
    1925 
    2026class WMSLayer: 
     
    2935        self.children = children 
    3036 
    31         def parseXML(self, layerElement): 
    32             raise NotImplementedError('Use the wmsLayerFactory() function instead.') 
     37    def parseXML(self, layerElement): 
     38        raise NotImplementedError('Use the wmsLayerFactory() function instead.') 
     39 
     40    def __repr__(self): 
     41        return str(vars(self)) 
     42 
     43class BottomWMSLayer(WMSLayer): 
     44 
     45    '''[DOC]''' 
     46     
     47    def __init__(self, name, title, abstract, times): 
     48 
     49        self.name = name 
     50        self.title = title 
     51        self.abstract = abstract 
     52        # but no self.children 
     53        self.times = times 
    3354 
    3455    def _parseName(self): 
     
    4566        return (modelName, scenarioName, sampleTimespan) 
    4667 
    47     def __repr__(self): 
    48         return str(vars(self)) 
    49  
    50 class BottomWMSLayer(WMSLayer): 
    51  
    52     '''[DOC]''' 
    53      
    54     def __init__(self, name, title, abstract): 
    55  
    56         self.name = name 
    57         self.title = title 
    58         self.abstract = abstract 
    59         # but no self.children 
    60  
    6168    def getModelName(self): 
    6269        return self._parseName()[0] 
     
    6774    def getSampleTimespan(self): 
    6875        return self._parseName()[2] 
     76 
     77    def toKML(self): 
     78        # Return a KML.KMLFolder object representing a <kml:Folder> element with lots of <kml:GroundOverlay> elements, 
     79        # each standing for a different  
    6980 
    7081class WMSCapabilities: 
     
    8192    def __repr__(self): 
    8293        if self.topWmsLayer: 
    83             return repr(self.topWmsLayer) 
     94            return '--- WMSCapabilities object with top layer as follows): ' + repr(self.topWmsLayer) + ' ---' 
    8495        else: 
    85             return '(WMSCapabilities object with no top layer)' 
     96            return '--- WMSCapabilities object with no top layer ---' 
     97 
     98class WMSLayersConvertor: 
     99     
     100    def __init__(self, topWmsLayer, config, baseKmlOutputDirectory): 
     101        self.topWmsLayer = topWmsLayer 
     102        self.config = config 
     103        self.baseKmlOutputDirectory = baseKmlOutputDirectory 
     104        self.maxDirDepth = 10 
     105        # [a:D,r:DEBUG] self.maxDirDepth = self.config(...)  
     106         
     107    def convert(self): 
     108 
     109        def _convertToKML(wmsLayer): 
     110            return kmlElement 
     111         
     112        def _convertToDirectory(wmsLayer, parentDir, currentLevel): 
     113             
     114            if currentLevel < self.maxDirDepth: 
     115                currentDir = parentDir + '/' + wmsLayer.name 
     116                ###os.mkdir(currentDir) 
     117                print 'Created directory "%s"' % currentDir 
     118                if not isinstance(wmsLayer, BottomWMSLayer): 
     119                    for child in wmsLayer.children: 
     120                        _convertToDirectory(child, currentDir, currentLevel+1) 
     121            elif currentLevel == self.maxDirDepth: 
     122                # Create a KML document with no styles 
     123                ###kmlDocument = KMLDocument(wmsLayer.name, [])   # [?] dir name?? 
     124                ###kmlDocument.elements.append(_convertToKML(wmsLayer)) 
     125                filename = parentDir + '/' + wmsLayer.name + '.kml' 
     126                ###kmlDocument.save(filename) 
     127                print 'Saved file "%s"' % filename 
     128            else: 
     129                pass 
     130 
     131        #### topWmsLayer = wmsLayerFactory(topLayerElement) 
     132        _convertToDirectory(self.topWmsLayer, self.baseKmlOutputDirectory, 0) 
Note: See TracChangeset for help on using the changeset viewer.