diff --git a/src/komap.py b/src/komap.py
index 28d0734..6011a24 100644
--- a/src/komap.py
+++ b/src/komap.py
@@ -20,6 +20,13 @@ from debug import debug, Timer
from mapcss import MapCSS
import sys
from libkomapnik import *
+
+try:
+ import psyco
+ psyco.full()
+except ImportError:
+ pass
+
minzoom = 10
maxzoom = 11
@@ -67,9 +74,15 @@ for zoom, zsheet in mapniksheet.iteritems():
mfile.write(xml_style_start())
for entry in zsheet[zindex]:
if entry["type"] in ("way", "area", "polygon"):
-
- sql.update(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
+ if "fill-color" in entry["style"]:
+ mfile.write(xml_rule_start())
+ mfile.write(x_scale)
+ rulestring = " or ".join([rule[0].get_mapnik_filter() for rule in entry["rule"]])
+ mfile.write(xml_filter(rulestring))
+ mfile.write(xml_polygonsymbolizer(entry["style"].get("fill-color", "black"), entry["style"].get("fill-opacity", "1")))
+ sql.update(entry["sql"])
+ itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
+ mfile.write(xml_rule_end())
sql = [i[1] for i in sql]
#print sql, itags
mfile.write(xml_style_end())
diff --git a/src/libkomapnik.py b/src/libkomapnik.py
index bcab01f..7cf9b20 100644
--- a/src/libkomapnik.py
+++ b/src/libkomapnik.py
@@ -28,6 +28,8 @@ db_user = "mapz"
db_name = "gis"
+substyles = []
+
last_id = 0
@@ -55,7 +57,8 @@ def xml_linesymbolizer(color="#000000", width="1", opacity="1", linecap="butt",
return """
%s
- %f
+ %s
+ %s
%s
%s
"""(color, float(width), float(opacity), linejoin, linecap)
@@ -63,15 +66,16 @@ def xml_linesymbolizer(color="#000000", width="1", opacity="1", linecap="butt",
def xml_polygonsymbolizer(color="#000000", opacity="1"):
color = nicecolor(color)
- linecap = {"none":"butt",}.get(linecap.lower(), linecap)
+
return """
-
- %s
- %f
-
- """(color, float(width), float(opacity), linejoin, linecap)
-
+
+ %s
+ %s
+ """%(color, float(opacity))
+def xml_filter(string):
+ return """
+ %s"""%string
def xml_scaledenominator(z1, z2=False):
z1, z2 = zoom_to_scaledenom(z1,z2)
@@ -92,7 +96,9 @@ def xml_end():
def xml_style_start():
+ global substyles
layer_id = get_id(1)
+ substyles.append(layer_id)
return """
"""
+def xml_rule_start():
+ return """
+ """
+
+def xml_rule_end():
+ return """
+ """
+
def xml_layer(type="postgis", geom="point", interesting_tags = "*", sql = ["true","d"] ):
- layer_id = get_id() ## increment by 0 - was incremented in style
+ layer_id = get_id(1) ## increment by 0 - was incremented in style
interesting_tags = "\", \"".join(interesting_tags)
interesting_tags = "\""+ interesting_tags+"\""
sql = " OR ".join(sql)
+ global substyles
+ subs = "\n".join(["s%s"%i for i in substyles])
+ substyles = []
+
return """
- s%s
+ %s
(select %s, way
@@ -121,4 +139,4 @@ def xml_layer(type="postgis", geom="point", interesting_tags = "*", sql = ["true
%s
%s
- """%(layer_id, db_proj, layer_id, interesting_tags, table_prefix, geom, sql, db_user, db_name)
\ No newline at end of file
+ """%(layer_id, db_proj, subs, interesting_tags, table_prefix, geom, sql, db_user, db_name)
\ No newline at end of file
diff --git a/src/mapcss/Condition.py b/src/mapcss/Condition.py
index 6ed4e7a..3b85fd4 100644
--- a/src/mapcss/Condition.py
+++ b/src/mapcss/Condition.py
@@ -101,6 +101,35 @@ class Condition:
return params[0], '"%s" IS NOT NULL'%(params[0])
except KeyError:
pass
+ def get_mapnik_filter(self):
+ params = [re.escape(x) for x in self.params]
+ t = self.type
+ try:
+ if t == 'eq':
+ return '[%s] = \'%s\''%(params[0], params[1])
+ if t == 'ne':
+ return 'not([%s] = \'%s\')'%(params[0], params[1])
+ if t == 'regex':
+ return '[%s].match(%s)'%(params[0], params[1])
+ if t == 'true':
+ return '[%s] = \'yes\''%(params[0])
+ if t == 'untrue':
+ return '[%s] = \'no\''%(params[0])
+ if t == 'set':
+ return 'not([%s] = \'\')'%(params[0])
+ if t == 'unset':
+ return '[%s] = \'\''%(params[0])
+
+ if t == '<':
+ return '"%s" < %s'%(params[0], float(params[1]))
+ if t == '<=':
+ return '"%s" <= %s'%(params[0], float(params[1]))
+ if t == '>':
+ return '"%s" > %s'%(params[0], float(params[1]))
+ if t == '>=':
+ return '"%s" >= %s'%(params[0], float(params[1]))
+ except KeyError:
+ pass
def __repr__(self):
return "%s %s "%(self.type, repr(self.params))
def Number(tt):