From 0783b00989edee959f57fda58460cdd06ba4247b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kom=D1=8Fpa?= Date: Sun, 10 Oct 2010 19:27:33 +0300 Subject: [PATCH] Support for merging consecutive lines text --- src/komap.py | 17 +++++++++-- src/libkomapnik.py | 73 +++++++++++++++++++++++++++++----------------- 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/komap.py b/src/komap.py index 38bc4bf..47a706d 100644 --- a/src/komap.py +++ b/src/komap.py @@ -183,6 +183,7 @@ for zoom, zsheet in mapniksheet.iteritems(): ## text pass sql = set() itags = set() + ttext = "" xml = xml_style_start() for entry in zsheet[zindex]: if entry["type"] in entry_types:#, "node", "line", "point"): @@ -195,11 +196,13 @@ for zoom, zsheet in mapniksheet.iteritems(): thradius= entry["style"].get("text-halo-radius","0") tplace= entry["style"].get("text-position","center") toffset= entry["style"].get("text-offset","0") + toverlap= entry["style"].get("text-allow-overlap",entry["style"].get("allow-overlap","false")) + xml += xml_rule_start() xml += x_scale rulestring = " or ".join([ "("+ " and ".join([i.get_mapnik_filter() for i in rule]) + ")" for rule in entry["rule"]]) xml += xml_filter(rulestring) - xml += xml_textsymbolizer(ttext,tface,tsize,tcolor, thcolor, thradius, tplace, toffset) + xml += xml_textsymbolizer(ttext,tface,tsize,tcolor, thcolor, thradius, tplace, toffset,toverlap) sql.update(entry["sql"]) itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom)) xml += xml_rule_end() @@ -207,7 +210,17 @@ for zoom, zsheet in mapniksheet.iteritems(): xml += xml_style_end() if sql: mfile.write(xml) - mfile.write(xml_layer("postgis", layer_type, itags, sql )) + if layer_type == "line": + sqlz = " OR ".join(sql) + itags = "\", \"".join(itags) + itags = "\""+ itags+"\"" + sqlz = """with aaa as (SELECT %s, way FROM planet_osm_line where "%s" is not NULL and (%s)), + bbb as (SELECT %s, way from aaa where way && !bbox! ) + select %s, ST_LineMerge(ST_Union(way)) as way from bbb group by %s + """%(itags,ttext,sqlz,itags,itags,itags) + mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz )) + else: + mfile.write(xml_layer("postgis", layer_type, itags, sql )) else: xml_nolayer() diff --git a/src/libkomapnik.py b/src/libkomapnik.py index 3ec1960..aeb7b03 100644 --- a/src/libkomapnik.py +++ b/src/libkomapnik.py @@ -92,13 +92,14 @@ def xml_polygonsymbolizer(color="#000000", opacity="1"): %s """%(color, float(opacity)) -def xml_textsymbolizer(text="name",face="DejaVu Sans Book",size="10",color="#000000", halo_color="#ffffff", halo_radius="0", placement="line", offset="0"): +def xml_textsymbolizer(text="name",face="DejaVu Sans Book",size="10",color="#000000", halo_color="#ffffff", halo_radius="0", placement="line", offset="0", overlap="false"): color = nicecolor(color) halo_color = nicecolor(halo_color) placement = {"center": "point"}.get(placement.lower(), placement) + return """ - - """%(text,face,size,color,halo_color,halo_radius,placement,offset) + + """%(text,face,size,color,halo_color,halo_radius,placement,offset,overlap) def xml_filter(string): return """ @@ -144,33 +145,51 @@ def xml_rule_end(): def xml_layer(type="postgis", geom="point", interesting_tags = "*", sql = ["true"] ): - 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) + layer_id = get_id(1) global substyles subs = "\n".join(["s%s"%i for i in substyles]) substyles = [] - - return """ - - %s - - - (select %s, way - from %s%s - where %s - ) as text - - postgis - %s - %s - %s - way - %s%s - -20037508.342789244, -20037508.342780735, 20037508.342789244, 20037508.342780709 - - """%(layer_id, db_proj, subs, interesting_tags, table_prefix, geom, sql, db_user, db_name, db_srid, table_prefix, geom) + if type == "postgis": + interesting_tags = "\", \"".join(interesting_tags) + interesting_tags = "\""+ interesting_tags+"\"" + sql = " OR ".join(sql) + return """ + + %s + + + (select %s, way + from %s%s + where %s + ) as text + + postgis + %s + %s + %s + way + %s%s + -20037508.342789244, -20037508.342780735, 20037508.342789244, 20037508.342780709 + + """%(layer_id, db_proj, subs, interesting_tags, table_prefix, geom, sql, db_user, db_name, db_srid, table_prefix, geom) + elif type == "postgis-process": + return """ + + %s + + + (%s + ) as text + + postgis + %s + %s + %s + way + %s%s + -20037508.342789244, -20037508.342780735, 20037508.342789244, 20037508.342780709 + + """%(layer_id, db_proj, subs, sql, db_user, db_name, db_srid, table_prefix, geom) def xml_nolayer(): global substyles