source: subversion/applications/rendering/mapnik/legend.py @ 23338

Last change on this file since 23338 was 13138, checked in by crschmidt, 11 years ago

Add a simple legend generating tool.

File size: 2.8 KB
Line 
1#!/usr/bin/python
2
3"""A simple script to help visualize the Mapnik stylesheet. This file puts
4   out poly/line symbols into an HTML file, with their associated filters.
5   Not particularly complex at the moment, but a useful visualization tool if
6   you're hacking on the osm.xml file. Works against the osm-template.xml
7   at the moment."""
8
9__author__ = "Christopher Schmidt"
10__license__ = "Public Domain"
11
12
13import xml.dom.minidom as m
14
15def run():
16    """Parses the osm-template.xml file, and `print`s out an HTML table.""" 
17    doc = m.parse("osm-template.xml")
18    styles = doc.getElementsByTagName("Style")
19    for style in styles:
20        table_started = False
21        for r in style.getElementsByTagName("Rule"):
22            filters = r.getElementsByTagName("Filter")
23            text = ""
24            if len(filters):
25                text = filters[0].firstChild.nodeValue
26            polys = r.getElementsByTagName("PolygonSymbolizer")     
27            poly_text = [] 
28            poly_style = {}
29            if len(polys):
30                css = polys[0].getElementsByTagName("CssParameter")
31                for c in css:
32                    poly_style[ c.getAttribute("name") ] = c.firstChild.nodeValue
33            pfill = r.getElementsByTagName("PolygonPatternSymbolizer")
34            if len(pfill):
35                pfill = pfill[0]
36                poly_style['fill'] = '<img src="%s" title="%s"/>' % (pfill.getAttribute("file").replace("%SYMBOLS_DIR%", "symbols"), pfill.getAttribute("file").replace("%SYMBOLS_DIR%", "symbols"))
37            for key, value in poly_style.items():
38                poly_text.append("%s: %s" % (key, value))
39            poly_text = "<br />".join(poly_text)
40            lines = r.getElementsByTagName("LineSymbolizer")     
41            line_text = [] 
42            line_style = {}
43            if len(lines):
44                css = lines[0].getElementsByTagName("CssParameter")
45                for c in css:
46                    line_style[ c.getAttribute("name") ] = c.firstChild.nodeValue
47                for key, value in line_style.items():
48                    line_text.append("%s: %s" % (key, value))
49            line_text = "<br />".join(line_text)
50            if text and (poly_text or line_text):
51                if not table_started:
52   
53                    print "<h2>%s</h2>" % style.getAttribute("name").title()
54                    print "<table><tr><td>filter</td><td>poly</td><td>stroke</td></tr>"
55                    table_started = True
56                print "<tr><td>%s</td>" % text
57                print "<td style='background-color: %s'>%s</td>" % (poly_style.get('fill', ''),  poly_text)   
58                print "<td style='background-color: %s'>%s</td></tr>" % (line_style.get('stroke', ''),  line_text)   
59   
60        if table_started:
61            print "</table>"
62if __name__ == "__main__":
63    run()
Note: See TracBrowser for help on using the repository browser.