source: DPPP/kml/csml2kml/python/prototypes/KMLDocument.py @ 3287

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/DPPP/kml/csml2kml/python/prototypes/KMLDocument.py@3287
Revision 3287, 2.7 KB checked in by mkochan, 12 years ago (diff)

Made prototype use KMLDocument as a module.

Line 
1from cElementTree import ElementTree, Element, SubElement, XML
2
3class KMLDocument:
4
5    def __init__(self, name, basicKMLStyle = None):
6
7        self.name = name
8
9        self.documentElement = Element('Document')
10        SubElement(self.documentElement, 'name').text = name
11        SubElement(self.documentElement, 'open').text = '0'
12
13        if basicKMLStyle:
14            self.styles = [basicKMLStyle]
15        else:
16            self.styles = []
17        for style in self.styles:
18            self.documentElement.append(style.build())
19
20    def append(self, element):
21        '''Append directly to the <Document> element'''
22        self.documentElement.append(element)
23
24    def save(self, outputFilename):
25
26        # Auxiliary function, indents XML
27        def _indentXML(elem, level=0):
28            i = "\n" + level * "  "
29            if len(elem):
30                if not elem.text or not elem.text.strip():
31                    elem.text = i + "  "
32                for child in elem:
33                    _indentXML(child, level+1)
34                if not child.tail or not child.tail.strip():
35                    child.tail = i
36                if not elem.tail or not elem.tail.strip():
37                    elem.tail = i
38            else:
39                if level and (not elem.tail or not elem.tail.strip()):
40                    elem.tail = i
41
42        # Attach the Document element as a subelement of a root 'kml' element
43        kmlElement=Element('kml', xmlns='http://earth.google.com/kml/2.2')
44        kmlElement.append(self.documentElement)
45        _indentXML(kmlElement)
46
47        # Write the KML document to a file
48        t = ElementTree(kmlElement)       
49        f = open(outputFilename, 'w')
50        t.write(f)
51        f.close()
52
53class KMLStyle:
54
55    def __init__(self, id, iconURL, balloonTemplate):
56        self.id = id
57        self.iconURL = iconURL
58        self.balloonTemplate = balloonTemplate
59
60    def build(self):
61
62        styleElement = Element('Style')
63        styleElement.set('id', self.id)
64
65        # Build the IconStyle element (for assigning an icon to station placemarks)
66        iconStyleElement = SubElement(styleElement, 'IconStyle')
67        SubElement(iconStyleElement, 'scale').text = '1.2'
68        iconElement = SubElement(iconStyleElement, 'Icon')
69        SubElement(iconElement, 'href').text = self.iconURL
70
71        # Build the BalloonStyle element -- an HTML template for the balloons
72        ballonStyleElement = SubElement(styleElement, 'BalloonStyle')
73        SubElement(ballonStyleElement, 'text').text = self.balloonTemplate
74
75        return styleElement
76
77def getBasicKMLStyle(basicBalloonTemplate = ''):
78    basicIcon = 'http://maps.google.com/mapfiles/kml/shapes/target.png'
79    return KMLStyle('basic_style', basicIcon, basicBalloonTemplate)
Note: See TracBrowser for help on using the repository browser.