diff --git a/src/__init__.py b/src/__init__.py
deleted file mode 100644
index 40a96af..0000000
--- a/src/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/src/backend/__init__.py b/src/backend/__init__.py
deleted file mode 100644
index 40a96af..0000000
--- a/src/backend/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/src/backend/postgis/__init__.py b/src/backend/postgis/__init__.py
deleted file mode 100644
index f8e2f0a..0000000
--- a/src/backend/postgis/__init__.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-# from debug import debug
-from twms import projections
-import psycopg2
-import shapely.wkb
-
-
-class Empty:
- def copy(self):
- a = Empty()
- a.tags = self.tags.copy()
- a.coords = self.coords[:]
- a.center = self.center
- a.cs = self.cs[:]
- return a
-
-
-class Way:
- def __init__(self, tags, geom):
-
- self.cs = []
- # print [x.split("=") for x in tags.split(";")]
- self.tags = tags
- # calculating center point
- # c= geom
- # sumz = [(c[0],c[1])]
- # for k in range(2, len(c), 2):
- # sumz.append((c[k], c[k + 1]))
- self.coords = geom
- # left for the better times:
- self.center = reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), self.coords)
- self.center = (self.center[0] / len(self.coords), self.center[1] / len(self.coords))
- # debug(self.center)
-
- def copy(self):
- a = Empty()
- a.tags = self.tags.copy()
- a.coords = self.coords[:]
- a.center = self.center
- a.cs = self.cs[:]
- return a
-
-
-class PostGisBackend:
- """
- A class that gives out vector data on demand.
- """
-
- def __init__(self, database="dbname=gis user=mapz host=komzpa.net", max_zoom=16, proj="EPSG:3857", path="tiles", lang="ru", ):
-
- # debug("Bakend created")
- self.database = database
- self.max_zoom = max_zoom # no better tiles available
- self.path = path # path to tile files
- self.lang = lang # map language to use
- self.tiles = {} # loaded vector tiles go here
- self.proj = proj # which projection used to cut map in tiles
- self.keep_tiles = 190 # a number of tiles to cache in memory
- self.tile_load_log = [] # used when selecting which tile to unload
-
- def get_vectors(self, bbox, zoom, sql_hint=None, tags_hint=None):
- """
- Fetches vectors for given bbox.
- sql_hint is a list of sets of (key, sql_for_key)
- """
- a = psycopg2.connect(self.database)
- b = a.cursor()
- bbox = tuple(projections.from4326(bbox, self.proj))
- ### FIXME: hardcoded EPSG:3857 in database
- tables = ("planet_osm_line", "planet_osm_polygon") # FIXME: points
- resp = {}
- for table in tables:
- add = ""
- taghint = "*"
- if sql_hint:
- adp = []
-
- for tp in sql_hint:
- add = []
- b.execute("SELECT * FROM %s LIMIT 1;" % table)
- names = [q[0] for q in b.description]
-
- for j in tp[0]:
- if j not in names:
- break
- else:
- add.append(tp[1])
- if add:
- add = " OR ".join(add)
- add = "(" + add + ")"
- adp.append(add)
-
- if tags_hint:
- taghint = ", ".join(['"' + j + '"' for j in tags_hint if j in names]) + ", way, osm_id"
-
- adp = " OR ".join(adp)
-
- req = "SELECT %s FROM %s WHERE (%s) and way && SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913);" % (taghint, table, adp, bbox[0], bbox[1], bbox[2], bbox[3])
- print req
- b.execute(req)
- names = [q[0] for q in b.description]
-
- for row in b.fetchall():
-
- row_dict = dict(map(None, names, row))
- for k, v in row_dict.items():
- if not v:
- del row_dict[k]
- geom = shapely.wkb.loads(row_dict["way"].decode('hex'))
- ### FIXME: a dirty hack to basically support polygons, needs lots of rewrite
- try:
- geom = list(geom.coords)
- except NotImplementedError:
- "trying polygons"
- try:
- geom = geom.boundary
- geom = list(geom.coords)
- row_dict[":area"] = "yes"
- except NotImplementedError:
- "multipolygon"
- continue
- ### FIXME
-
- # geom = projections.to4326(geom, self.proj)
- del row_dict["way"]
- oid = row_dict["osm_id"]
- del row_dict["osm_id"]
- w = Way(row_dict, geom)
- # print row_dict
- resp[oid] = w
- a.close()
- del a
-
- return resp
diff --git a/src/backend/vtile/__init__.py b/src/backend/vtile/__init__.py
deleted file mode 100644
index 1160fe2..0000000
--- a/src/backend/vtile/__init__.py
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-
-from twms import projections
-import twms.bbox
-
-
-class Empty:
- def copy(self):
- a = Empty()
- a.tags = self.tags.copy()
- a.coords = self.coords[:]
- a.center = self.center
- a.cs = self.cs[:]
- a.bbox = self.bbox
- return a
-
-
-class Way:
- def __init__(self, tags, coords):
-
- self.cs = []
- # print [x.split("=") for x in tags.split(";")]
- self.tags = dict((x.split("=") for x in tags.split(";")))
- # calculating center point
- c = coords
- sumz = [(c[0], c[1])]
- for k in range(2, len(c), 2):
- sumz.append((c[k], c[k + 1]))
- self.coords = sumz
- # left for the better times:
- self.center = reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), self.coords)
- self.center = (self.center[0] / len(self.coords), self.center[1] / len(self.coords))
- self.bbox = reduce(lambda x, y: (min(x[0], y[0]), min(x[1], y[1]), max(x[2], y[0]), max(x[3], y[1])), self.coords, (9999, 9999, -9999, -9999))
- # debug(self.center)
-
- def copy(self):
- a = Empty()
- a.tags = self.tags.copy()
- a.coords = self.coords[:]
- a.center = self.center
- a.cs = self.cs[:]
- a.bbox = self.bbox
- return a
-
-
-class QuadTileBackend:
- """
- A class that gives out vector data on demand.
- """
-
- def __init__(self, max_zoom=16, proj="EPSG:4326", path="tiles", lang="ru"):
-
- self.max_zoom = max_zoom # no better tiles available
- self.path = path # path to tile files
- self.lang = lang # map language to use
- self.tiles = {} # loaded vector tiles go here
- self.proj = proj # which projection used to cut map in tiles
- self.keep_tiles = 15 # a number of tiles to cache in memory
- self.tile_load_log = [] # used when selecting which tile to unload
-
- def filename(self, (z, x, y)):
-
- return "%s/z%s/%s/x%s/%s/y%s.vtile" % (self.path, z, x / 1024, x, y / 1024, y)
-
- def load_tile(self, k):
- # debug("loading tile: %s"% (k,))
- try:
- f = open(self.filename(k))
- except IOError:
- print ("Failed open: '%s'" % self.filename(k))
- return {}
- t = {}
- for line in f:
- # debug(line)
- a = line.split(" ")
- w = Way(a[0], [float(x) for x in a[2:]])
- t[int(a[1])] = w
- f.close()
- return t
-
- def collect_garbage(self):
- """
- Cleans up some RAM by removing least accessed tiles.
- """
- if len(self.tiles) > self.keep_tiles:
- # debug("Now %s tiles cached, trying to kill %s"%(len(self.tiles),len(self.tiles)-self.keep_tiles))
- for tile in self.tile_load_log[0:len(self.tiles) - self.keep_tiles]:
- try:
- del self.tiles[tile]
- self.tile_load_log.remove(tile)
- # debug ("killed tile: %s" % (tile,))
- except KeyError, ValueError:
- pass
- # debug ("tile killed not by us: %s" % (tile,))
-
- def get_vectors(self, bbox, zoom, sql_hint=None, itags=None):
- zoom = int(zoom)
- zoom = min(zoom, self.max_zoom) # If requested zoom is better than the best, take the best
- zoom = max(zoom, 0) # Negative zooms are nonsense
- a, d, c, b = [int(x) for x in projections.tile_by_bbox(bbox, zoom, self.proj)]
- resp = {}
-
- hint = set()
- for j in [x[0] for x in sql_hint]:
- hint.update(j)
-
- for tile in set([(zoom, i, j) for i in range(a, c + 1) for j in range(b, d + 1)]):
- # Loading current vector tile
- try:
- ti = self.tiles[tile]
- except KeyError:
- ti = self.load_tile(tile)
- self.tiles[tile] = ti
- try:
- self.tile_load_log.remove(tile)
- except ValueError:
- pass
- self.tile_load_log.append(tile)
-
- for obj in ti:
- "filling response with interesting-tagged objects"
- need = False
- for tag in ti[obj].tags:
- # if tag in hint:
- need = True
- break
- if need:
- if twms.bbox.bbox_is_in(bbox, ti[obj].bbox, fully=False):
- resp[obj] = ti[obj]
-
- self.collect_garbage()
- return resp
diff --git a/src/debug.py b/src/debug.py
deleted file mode 100644
index a324ffc..0000000
--- a/src/debug.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-import datetime
-import sys
-
-
-def debug(st):
- """
- Debug write to stderr
- """
-
- sys.stderr.write(str(st) + "\n")
- sys.stderr.flush()
-
-
-class Timer:
- """
- A small timer for debugging
- """
- def __init__(self, comment):
- self.time = datetime.datetime.now()
- self.comment = comment
- debug("%s started" % comment)
-
- def stop(self):
- debug("%s finished in %s" % (self.comment, str(datetime.datetime.now() - self.time)))
diff --git a/src/generate_image.py b/src/generate_image.py
deleted file mode 100644
index fbf2693..0000000
--- a/src/generate_image.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-
-from debug import debug, Timer
-from backend.vtile import QuadTileBackend as DataBackend
-# from backend.postgis import PostGisBackend as DataBackend
-# from style import Styling
-from mapcss import MapCSS
-
-from render import RasterTile
-
-svg = False
-
-if svg:
- import cairo
-
-
-style = MapCSS(1, 19) # zoom levels
-style.parse(open("styles/default.mapcss", "r").read())
-
-
-bbox = (27.115768874532, 53.740327031764, 28.028320754378, 54.067187302158)
-
-w, h = 630 * 4, 364 * 4
-z = 10
-
-db = DataBackend()
-# style = Styling()
-
-res = RasterTile(w, h, z, db)
-if svg:
- file = open("test.svg", "wb")
- res.surface = cairo.SVGSurface(file.name, w, h)
-res.update_surface(bbox, z, style)
-
-
-if not svg:
- res.surface.write_to_png("test.png")
-else:
- res.surface.finish()
diff --git a/src/generate_map_key.py b/src/generate_map_key.py
deleted file mode 100644
index feaae07..0000000
--- a/src/generate_map_key.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from mapcss import MapCSS
-import mapcss.webcolors
-whatever_to_hex = mapcss.webcolors.webcolors.whatever_to_hex
-
-import json
-
-import cairo
-
-import sys
-
-reload(sys)
-sys.setdefaultencoding("utf-8")
-
-minzoom = 0
-maxzoom = 18
-
-sample_width = 80
-
-style = MapCSS(minzoom, maxzoom)
-style.parse(open(sys.argv[1], "r").read(), clamp=False)
-
-
-tags = [json.loads(x) for x in open("data/tags.list", "r")]
-print len(tags)
-# a = cairo.PDFSurface("legend.pdf",100,100*len(tags))
-
-maxzoom += 1
-
-a = cairo.ImageSurface(cairo.FORMAT_ARGB32, maxzoom * sample_width, 50 * len(tags))
-cr = cairo.Context(a)
-cr.translate(0, 0.5)
-
-
-i = 0
-icons = {}
-for tag in tags:
- had_lines = False
- for zoom in range(minzoom, maxzoom):
- styles = style.get_style_dict("node", tag, zoom, olddict={})
- styles = style.get_style_dict("area", tag, zoom, olddict=styles.copy())
- styles = style.get_style_dict("line", tag, zoom, olddict=styles.copy())
-
- styles = styles.values()
- styles.sort(key=lambda x: x.get('z-index', 0))
- if len(styles) > 0:
- for st in styles:
- if "fill-color" in st and st.get("fill-opacity", 1) > 0:
- color = st.get('fill-color', (0., 0., 0.))
- cr.set_source_rgba(color[0], color[1], color[2], st.get("fill-opacity", 1))
- cr.move_to(0 + sample_width * zoom, 20 + 50 * i)
- cr.line_to(sample_width + sample_width * zoom, 20 + 50 * i)
- cr.line_to(sample_width + sample_width * zoom, 55 + 50 * i)
- cr.line_to(0 + sample_width * zoom, 20 + 50 * i)
- had_lines = True
- cr.fill()
- for st in styles:
- if "casing-width" in st and st.get("casing-opacity", 1) > 0:
- color = st.get('casing-color', (0., 0., 0.))
- cr.set_source_rgba(color[0], color[1], color[2], st.get("casing-opacity", 1))
- cr.set_line_width(st.get("width", 0) + 2 * st.get("casing-width", 0))
- cr.set_dash(st.get('casing-dashes', st.get('dashes', [])))
- cr.move_to(0 + sample_width * zoom, 50 + 50 * i)
- cr.line_to(sample_width + sample_width * zoom, 50 + 50 * i)
- had_lines = True
- cr.stroke()
- for st in styles:
- if "width" in st and st.get("opacity", 1) > 0:
- color = st.get('color', (0., 0., 0.))
- cr.set_source_rgba(color[0], color[1], color[2], st.get("opacity", 1))
- cr.set_line_width(st.get("width", 0))
- cr.set_dash(st.get('dashes', []))
- cr.move_to(0 + sample_width * zoom, 50 + 50 * i)
- cr.line_to(sample_width + sample_width * zoom, 50 + 50 * i)
- had_lines = True
- cr.stroke()
- if "icon-image" in st:
- icons[st["icon-image"]] = icons.get(st["icon-image"], set())
- icons[st["icon-image"]].add('[' + ']['.join([k + "=" + v for k, v in tag.iteritems()]) + ']')
-
- if had_lines:
- cr.move_to(0 + sample_width * zoom, 25 + 50 * i)
- cr.set_source_rgb(0, 0, 0)
- cr.show_text('z' + str(zoom))
-
- if had_lines:
- text = '[' + ']['.join([k + "=" + v for k, v in tag.iteritems()]) + ']'
- cr.move_to(10, 20 + 50 * i)
- cr.set_source_rgb(0, 0, 0)
- cr.show_text(text)
- cr.set_line_width(1)
- cr.set_dash([])
- cr.move_to(0, 60 + 50 * i)
- cr.line_to(maxzoom * sample_width, 60 + 50 * i)
-
- cr.stroke()
- i += 1
-# a.finish()\
-ss = open("icons.html", "w")
-print >> ss, "
"
-for k, v in icons.iteritems():
- print >> ss, " | %s | %s |
\n" % (k.lower(), k.lower(), "
".join(list(v)))
-print >> ss, "
"
-a.write_to_png("legend.png")
diff --git a/src/gtk-app.py b/src/gtk-app.py
deleted file mode 100644
index aaa44fb..0000000
--- a/src/gtk-app.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-import pygtk
-pygtk.require('2.0')
-import gtk
-import cairo
-import math
-import string
-import threading
-import time
-import Queue
-import os
-
-
-# from backend.postgis import PostGisBackend as DataBackend
-from backend.vtile import QuadTileBackend as DataBackend
-from mapcss import MapCSS as Styling
-from gtk_widget import KothicWidget
-
-
-try:
- import psyco
- psyco.full()
-except ImportError:
- pass
-# debug("Psyco import failed. Program may run slower. Ir you run it on i386 machine, please install Psyco to get best performance.")
-
-
-class KothicApp:
- def __init__(self):
- self.width, self.height = 800, 480
-
- self.center_coord = (27.6549791, 53.8698)
- self.zoom = 17.
- self.data_projection = "EPSG:4326"
- self.data = DataBackend()
- self.load_style()
-
- self.request_d = (0, 0)
- self.window = gtk.Window()
-
- self.window.set_size_request(self.width, self.height)
-
- self.window.connect("destroy", gtk.main_quit)
-
- self.window.set_title("Kothic renderer")
- menu = gtk.MenuBar()
-
- filemenu = gtk.Menu()
- filem = gtk.MenuItem("File")
- filem.set_submenu(filemenu)
- i = gtk.MenuItem("Reload style")
- i.connect("activate", self.load_style)
- filemenu.append(i)
-
- stylemenu = gtk.Menu()
- stylem = gtk.MenuItem("Style")
- stylem.set_submenu(stylemenu)
- styles = [name for name in os.listdir("styles") if ".mapcss" in name]
- for style in styles:
- i = gtk.MenuItem(style)
- i.StyleName = style
- i.connect("activate", self.reload_style)
- stylemenu.append(i)
-
- i = gtk.MenuItem("Exit")
- i.connect("activate", gtk.main_quit)
- filemenu.append(i)
-
- menu.append(filem)
- menu.append(stylem)
-
- vbox = gtk.VBox(False, 2)
- vbox.pack_start(menu, False, False, 0)
-
- self.KothicWidget = KothicWidget(self.data, self.style)
- self.KothicWidget.set_zoom(self.zoom)
- self.KothicWidget.jump_to(self.center_coord)
-
- vbox.pack_end(self.KothicWidget)
-
- self.window.add(vbox)
-
- def load_style(self):
- self.style = Styling(0, 25)
- self.style.parse(open("styles/osmosnimki-maps.mapcss", "r").read())
-
- def reload_style(self, w):
- self.style = Styling(0, 25)
- self.style.parse(open("styles/%s" % w.StyleName, "r").read())
- self.KothicWidget.style_backend = self.style
- self.KothicWidget.redraw()
-
- def main(self):
-
- self.window.show_all()
- gtk.main()
- exit()
-if __name__ == "__main__":
-
- gtk.gdk.threads_init()
- kap = KothicApp()
- kap.main()
diff --git a/src/gtk_widget.py b/src/gtk_widget.py
deleted file mode 100644
index 263dea8..0000000
--- a/src/gtk_widget.py
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-import pygtk
-pygtk.require('2.0')
-import gtk
-import gobject
-import cairo
-import math
-import string
-import threading
-import datetime
-import time
-import Queue
-import os
-from render import RasterTile
-from debug import debug, Timer
-import twms.bbox
-from twms import projections
-
-
-class KothicWidget(gtk.DrawingArea):
- def __init__(self, data, style):
- gtk.DrawingArea.__init__(self)
- self.data_backend = data
- self.style_backend = style
- self.request_d = (0, 0)
- self.tiles = TileSource(data, style, callback=self.redraw)
- self.dx = 0
- self.dy = 0
- self.drag_x = 0
- self.drag_y = 0
- self.drag = False
- self.rastertile = None
- self.f = True
- self.width = 0
- self.height = 0
- self.max_zoom = 25
-
- self.zoom = 0
- self.center_coord = (0.0, 0.0)
- self.old_zoom = 1
- self.old_center_coord = (0.0, 0.1)
- self.tilebox = [] # bbox of currently seen tiles
- self.bbox = []
-
- self.add_events(gtk.gdk.BUTTON1_MOTION_MASK)
- self.add_events(gtk.gdk.POINTER_MOTION_MASK)
- self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- self.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- self.add_events(gtk.gdk.SCROLL)
-# self.window.add_events(gtk.gdk.BUTTON1_MOTION_MASK)
- self.connect("expose_event", self.expose_ev)
- self.connect("motion_notify_event", self.motion_ev)
- self.connect("button_press_event", self.press_ev)
- self.connect("button_release_event", self.release_ev)
- self.connect("scroll_event", self.scroll_ev)
-
-# self.surface = cairo.ImageSurfaceicreate(gtk.RGB24, self.width, self.height)
-
- def set_zoom(self, zoom):
- self.zoom = zoom
- self.queue_draw()
-
- def jump_to(self, lonlat):
- self.center_coord = lonlat
- self.queue_draw()
-
- def zoom_to(self, bbox):
- self.zoom = twms.bbox.zoom_for_bbox(bbox, (self.width, self.height), {"proj": "EPSG:3857", "max_zoom": self.max_zoom}) - 1
- print "Zoom:", self.zoom
- self.center_coord = ((bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2)
- print self.center_coord
- self.redraw()
-
- def motion_ev(self, widget, event):
-
- if self.drag:
- self.dx = event.x - self.drag_x
- self.dy = event.y - self.drag_y
- # if((abs(self.dx) > 3 or abs(self.dy) > 3) and self.f):
- if True:
- # x = event.x
- # y = event.y
- # lo1, la1, lo2, la2 = self.tilebox
- # self.center_coord = projections.coords_by_tile(self.zoom,1.*x/self.width*(lo2-lo1)+lo1, la1+(1.*y/(self.height)*(la2-la1)),"EPSG:3857")
- widget.queue_draw()
-
- def press_ev(self, widget, event):
- if event.button == 1:
- # debug("Start drag")
- self.drag = True
- self.drag_x = event.x
- self.drag_y = event.y
- self.timer = Timer("Drag")
- # elif event.button == 2:
- # debug("Button2")
- # elif event.button == 3:
- # debug("Button3")
-
- def release_ev(self, widget, event):
- if event.button == 1:
- # debug("Stop drag")
- self.drag = False
- self.timer.stop()
- # debug("dd: %s,%s "%(self.dx, self.dy))
- x = event.x
- y = event.y
- lo1, la1, lo2, la2 = projections.from4326(self.bbox, "EPSG:3857")
- print lo1, la1, lo2, la2
- # self.center_coord = projections.to4326((0.5*(self.width+self.dx)/self.width*(lo1-lo2)+lo2, la1+(0.5*(self.height+self.dy)/self.height*(la2-la1))),"EPSG:3857")
-
- self.center_coord = projections.to4326((0.5 * (self.width + 2 * self.dx) / self.width * (lo1 - lo2) + lo2, la1 + (0.5 * (self.height + 2 * self.dy) / self.height * (la2 - la1))), "EPSG:3857")
- # self.rastertile.screen2lonlat(self.rastertile.w/2 - self.dx, self.rastertile.h/2 - self.dy);
- self.dx = 0
- self.dy = 0
- self.redraw()
-
- def scroll_ev(self, widget, event):
- if event.direction == gtk.gdk.SCROLL_UP:
- if self.zoom + 0.5 <= self.max_zoom:
- self.zoom += 0.5
- # debug("Zoom in")
- elif event.direction == gtk.gdk.SCROLL_DOWN:
- if self.zoom >= 0: # negative zooms are nonsense
- self.zoom -= 0.5
- # debug("Zoom out")
- # self.redraw()
- debug("new zoom: %s" % (self.zoom))
- widget.queue_draw()
-
- def redraw(self):
- """
- Force screen redraw.
- """
- # res = RasterTile(3*self.width, 3*self.height, self.zoom, self.data_backend)
- # res.update_surface_by_center(self.center_coord, self.zoom, self.style_backend)
- # self.rastertile = res
- self.queue_draw()
-
- def expose_ev(self, widget, event):
- if(widget.allocation.width != self.width or widget.allocation.height != self.height):
- # debug("Rrresize!")
- self.width = widget.allocation.width
- self.height = widget.allocation.height
-
- cr = widget.window.cairo_create()
- if self.old_center_coord != self.center_coord or self.old_zoom != self.zoom:
- # print "Recentered!"
- xy = projections.from4326(self.center_coord, "EPSG:3857")
- xy1 = projections.to4326((xy[0] - 40075016. * (0.5 ** (self.zoom)) / self.tiles.tilewidth * self.width, xy[1] - 40075016. * (0.5 ** (self.zoom)) / self.tiles.tileheight * self.height), "EPSG:3857")
- xy2 = projections.to4326((xy[0] + 40075016. * (0.5 ** (self.zoom)) / self.tiles.tilewidth * self.width, xy[1] + 40075016. * (0.5 ** (self.zoom)) / self.tiles.tileheight * self.height), "EPSG:3857")
- self.bbox = (xy1[0], xy1[1], xy2[0], xy2[1])
- self.tilebox = projections.tile_by_bbox(self.bbox, self.zoom, "EPSG:3857")
- self.old_center_coord = self.center_coord
- self.old_zoom = self.zoom
- from_tile_x, from_tile_y, to_tile_x, to_tile_y = self.tilebox
- dx = 1. * (from_tile_x - int(from_tile_x)) * self.tiles.tilewidth
- dy = 1. * (from_tile_y - int(from_tile_y)) * self.tiles.tileheight
- print dx, dy
- # print self.dx, self.dy
- onscreen_tiles = set()
- for x in range(int(from_tile_x), int(to_tile_x) + 1):
- for y in range(int(to_tile_y), int(from_tile_y) + 1):
- onscreen_tiles.add((self.zoom, x, y))
- self.tiles.onscreen = onscreen_tiles
- for z, x, y in onscreen_tiles:
- tile = self.tiles[(self.zoom, x, y)]
- # print dx+(x-from_tile_x)*self.tiles.tilewidth-self.width
- # print dy+(y-from_tile_y)*self.tiles.tileheight-self.height
- # cr.set_source_surface(tile, int(self.dx-dx+(x-int(from_tile_x))*self.tiles.tilewidth-self.width), int(self.dy-dy-(int(from_tile_y)-y)*self.tiles.tileheight+self.height))
- cr.set_source_surface(tile, int(self.dx - dx + (x - int(from_tile_x)) * self.tiles.tilewidth), int(self.dy - dy - (int(from_tile_y) - y) * self.tiles.tileheight + self.height))
- cr.paint()
- # cr.set_source_surface(self.rastertile.surface, self.dx-self.width + self.rastertile.offset_x, self.dy - self.height + self.rastertile.offset_y)
-
- # self.comm[3].release()
-
-
-class TileSource:
- def __init__(self, data, style, callback=lambda: None):
- self.tiles = {}
- self.tilewidth = 2048
- self.tileheight = 2048
- self.max_tiles = 32
- self.data_backend = data
- self.style_backend = style
- self.callback = callback
- self.onscreen = set()
- self._singlethread = False
- self._prerender = True
-
- def __getitem__(self, (z, x, y), wait=False):
-
- try:
- # if "surface" in self.tiles[(z,x,y)] and not wait:
- # self._callback((z,x,y), True)
- print "Tiles count:", len(self.tiles)
- return self.tiles[(z, x, y)]["surface"]
- except:
- self.tiles[(z, x, y)] = {"tile": RasterTile(self.tilewidth, self.tileheight, z, self.data_backend)}
- self.tiles[(z, x, y)]["start_time"] = datetime.datetime.now()
- if self._singlethread:
-
- self.tiles[(z, x, y)]["surface"] = self.tiles[(z, x, y)]["tile"].surface
- self.tiles[(z, x, y)]["tile"].update_surface(projections.bbox_by_tile(z, x, y, "EPSG:3857"), z, self.style_backend, lambda p=False: self._callback((z, x, y), p))
-
- del self.tiles[(z, x, y)]["tile"]
- else:
- self.tiles[(z, x, y)]["surface"] = self.tiles[(z, x, y)]["tile"].surface.create_similar(cairo.CONTENT_COLOR_ALPHA, self.tilewidth, self.tileheight)
- self.tiles[(z, x, y)]["thread"] = threading.Thread(None, self.tiles[(z, x, y)]["tile"].update_surface, None, (projections.bbox_by_tile(z, x, y, "EPSG:3857"), z, self.style_backend, lambda p=False: self._callback((z, x, y), p)))
- self.tiles[(z, x, y)]["thread"].start()
- if wait:
- self.tiles[(z, x, y)]["thread"].join()
- return self.tiles[(z, x, y)]["surface"]
-
- def _callback(self, (z, x, y), last):
- # if last:
- # print last, "dddddddddddddddddd"
- if not self._singlethread:
- if ((z, x, y) in self.onscreen or last) and "tile" in self.tiles[(z, x, y)]:
- cr = cairo.Context(self.tiles[(z, x, y)]["surface"])
- cr.set_source_surface(self.tiles[(z, x, y)]["tile"].surface, 0, 0)
- cr.paint()
-
- if last:
- try:
- del self.tiles[(z, x, y)]["thread"]
- del self.tiles[(z, x, y)]["tile"]
- except KeyError:
- pass
- self.tiles[(z, x, y)]["finish_time"] = datetime.datetime.now() - self.tiles[(z, x, y)]["start_time"]
- gobject.idle_add(self.callback)
- self.collect_grabage()
- if last and self._prerender:
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z - 1, x / 2, y / 2), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z + 1, x * 2, y * 2), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z + 1, x * 2 + 1, y * 2), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z + 1, x * 2, y * 2 + 1), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z + 1, x * 2 + 1, y * 2 + 1), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z, x + 1, y), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z, x, y + 1), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z, x - 1, y), True)
- if (z, x, y) in self.onscreen:
- a = self.__getitem__((z, x, y - 1), True)
-
- def collect_grabage(self):
- if len(self.tiles) > self.max_tiles:
- # let's kick out the fastest rendered tiles - it's easy to rerender those
- # don't touch onscreen tiles
- cand = set(self.tiles.keys())
- cand.difference_update(self.onscreen)
- cand = [i for i in cand if "finish_time" in self.tiles[i]]
- cand.sort(lambda i, j: self.tiles[i]["finish_time"] < self.tiles[i]["finish_time"])
- while cand:
- if (len(self.tiles) > self.max_tiles):
- c = cand.pop()
- try:
- print "Killed tile ", c, " - finished in ", str(self.tiles[c]["finish_time"]), ", ago:", str(datetime.datetime.now() - self.tiles[c]["start_time"])
- del self.tiles[c]
- except KeyError:
- pass
- else:
- break
-
-
-if __name__ == "__main__":
-
- gtk.gdk.threads_init()
- kap = KothicApp()
- kap.main()
diff --git a/src/javascript/canvas.js b/src/javascript/canvas.js
deleted file mode 100755
index 2755c87..0000000
--- a/src/javascript/canvas.js
+++ /dev/null
@@ -1,26 +0,0 @@
-CanvasRenderingContext2D.prototype.dashTo = function (X2, Y2, Ptrn) { // segment of dasked line set
- // X2 Y2 : X & Y to go TO ; internal X1 Y1 to go FROM
- // Ptrn as [6,4, 1,4] // mark-space pairs indexed by Seg
- // supply Ptrn only for the first point of a dashed line set
-
- if (Ptrn) {
- this.Obj = {Patn:Ptrn, Seg:0, Phs:0, X1:X2, Y1:Y2} ; return }
- var XDis, YDis, Dist, X, More, T, Ob = this.Obj
- XDis = X2 - Ob.X1 // DeltaX
- YDis = Y2 - Ob.Y1 // DeltaY
- Dist = Math.sqrt(XDis*XDis + YDis*YDis) // length
- //if (Dist<0.00000001){return}
- this.save()
- this.translate(Ob.X1, Ob.Y1)
- this.rotate(Math.atan2(YDis, XDis))
- this.moveTo(0, 0) ; X = 0 // Now dash pattern from 0,0 to Dist,0
- do {
- T = Ob.Patn[Ob.Seg] // Full segment
- X += T - Ob.Phs // Move by unused seg
- More = X < Dist // Not too far?
- if (!More) { Ob.Phs = T - (X - Dist) ; X = Dist } // adjust
- Ob.Seg%2 ? this.moveTo(X, 0) : this.lineTo(X, 0)
- if (More) { Ob.Phs = 0 ; Ob.Seg = ++Ob.Seg % Ob.Patn.length }
- } while (More)
- Ob.X1 = X2 ; Ob.Y1 = Y2
- this.restore() };
\ No newline at end of file
diff --git a/src/javascript/excanvas.js b/src/javascript/excanvas.js
deleted file mode 100755
index 19163fe..0000000
--- a/src/javascript/excanvas.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2006 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-document.createElement("canvas").getContext||(function(){var s=Math,j=s.round,F=s.sin,G=s.cos,V=s.abs,W=s.sqrt,k=10,v=k/2;function X(){return this.context_||(this.context_=new H(this))}var L=Array.prototype.slice;function Y(b,a){var c=L.call(arguments,2);return function(){return b.apply(a,c.concat(L.call(arguments)))}}var M={init:function(b){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var a=b||document;a.createElement("canvas");a.attachEvent("onreadystatechange",Y(this.init_,this,a))}},init_:function(b){b.namespaces.g_vml_||
-b.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");b.namespaces.g_o_||b.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!b.styleSheets.ex_canvas_){var a=b.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=b.getElementsByTagName("canvas"),d=0;for(;d','","");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};i.stroke=function(b){var a=[],c=P(b?this.fillStyle:this.strokeStyle),d=c.color,f=c.alpha*this.globalAlpha;a.push("g.x)g.x=e.x;if(h.y==null||e.yg.y)g.y=e.y}}a.push(' ">');if(b)if(typeof this.fillStyle=="object"){var m=this.fillStyle,r=0,n={x:0,y:0},o=0,q=1;if(m.type_=="gradient"){var t=m.x1_/this.arcScaleX_,E=m.y1_/this.arcScaleY_,p=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),
-z=this.getCoords_(t,E);r=Math.atan2(z.x-p.x,z.y-p.y)*180/Math.PI;if(r<0)r+=360;if(r<1.0E-6)r=0}else{var p=this.getCoords_(m.x0_,m.y0_),w=g.x-h.x,x=g.y-h.y;n={x:(p.x-h.x)/w,y:(p.y-h.y)/x};w/=this.arcScaleX_*k;x/=this.arcScaleY_*k;var R=s.max(w,x);o=2*m.r0_/R;q=2*m.r1_/R-o}var u=m.colors_;u.sort(function(ba,ca){return ba.offset-ca.offset});var J=u.length,da=u[0].color,ea=u[J-1].color,fa=u[0].alpha*this.globalAlpha,ga=u[J-1].alpha*this.globalAlpha,S=[],l=0;for(;l')}else a.push('');else{var K=this.lineScale_*this.lineWidth;if(K<1)f*=K;a.push("')}a.push("");this.element_.insertAdjacentHTML("beforeEnd",a.join(""))};i.fill=function(){this.stroke(true)};i.closePath=function(){this.currentPath_.push({type:"close"})};i.getCoords_=function(b,a){var c=this.m_;return{x:k*(b*c[0][0]+a*c[1][0]+c[2][0])-v,y:k*(b*c[0][1]+a*c[1][1]+c[2][1])-v}};i.save=function(){var b={};O(this,b);this.aStack_.push(b);this.mStack_.push(this.m_);this.m_=y(I(),this.m_)};i.restore=function(){O(this.aStack_.pop(),
-this);this.m_=this.mStack_.pop()};function ha(b){var a=0;for(;a<3;a++){var c=0;for(;c<2;c++)if(!isFinite(b[a][c])||isNaN(b[a][c]))return false}return true}function A(b,a,c){if(!!ha(a)){b.m_=a;if(c)b.lineScale_=W(V(a[0][0]*a[1][1]-a[0][1]*a[1][0]))}}i.translate=function(b,a){A(this,y([[1,0,0],[0,1,0],[b,a,1]],this.m_),false)};i.rotate=function(b){var a=G(b),c=F(b);A(this,y([[a,c,0],[-c,a,0],[0,0,1]],this.m_),false)};i.scale=function(b,a){this.arcScaleX_*=b;this.arcScaleY_*=a;A(this,y([[b,0,0],[0,a,
-0],[0,0,1]],this.m_),true)};i.transform=function(b,a,c,d,f,h){A(this,y([[b,a,0],[c,d,0],[f,h,1]],this.m_),true)};i.setTransform=function(b,a,c,d,f,h){A(this,[[b,a,0],[c,d,0],[f,h,1]],true)};i.clip=function(){};i.arcTo=function(){};i.createPattern=function(){return new U};function D(b){this.type_=b;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}D.prototype.addColorStop=function(b,a){a=P(a);this.colors_.push({offset:b,color:a.color,alpha:a.alpha})};function U(){}G_vmlCanvasManager=
-M;CanvasRenderingContext2D=H;CanvasGradient=D;CanvasPattern=U})();
\ No newline at end of file
diff --git a/src/javascript/geomops.js b/src/javascript/geomops.js
deleted file mode 100644
index 3cd6845..0000000
--- a/src/javascript/geomops.js
+++ /dev/null
@@ -1,104 +0,0 @@
-function ST_Simplify( points, tolerance ) {
-
- // helper classes
- var Vector = function( x, y ) {
- this.x = x;
- this.y = y;
-
- };
- var Line = function( p1, p2 ) {
- this.p1 = p1;
- this.p2 = p2;
-
- this.distanceToPoint = function( point ) {
- // slope
- var m = ( this.p2.y - this.p1.y ) / ( this.p2.x - this.p1.x );
- // y offset
- var b = this.p1.y - ( m * this.p1.x );
- var d = [];
- // distance to the linear equation
- d.push( Math.abs( point.y - ( m * point.x ) - b ) / Math.sqrt( Math.pow( m, 2 ) + 1 ) )
- // distance to p1
- d.push( Math.sqrt( Math.pow( ( point.x - this.p1.x ), 2 ) + Math.pow( ( point.y - this.p1.y ), 2 ) ) )
- // distance to p2
- d.push( Math.sqrt( Math.pow( ( point.x - this.p2.x ), 2 ) + Math.pow( ( point.y - this.p2.y ), 2 ) ) );
- // return the smallest distance
- return d.sort( function( a, b ) {
- return ( a - b ) //causes an array to be sorted numerically and ascending
- } )[0];
- }
- };
-
- var douglasPeucker = function( points, tolerance ) {
- var returnPoints = [];
- if ( points.length <= 2 ) {
- return [points[0]];
- }
- // make line from start to end
- var line = new Line( points[0], points[points.length - 1] );
- // find the largest distance from intermediate poitns to this line
- var maxDistance = 0;
- var maxDistanceIndex = 0;
- for( var i = 1; i <= points.length - 2; i++ ) {
- var distance = line.distanceToPoint( points[ i ] );
- if( distance > maxDistance ) {
- maxDistance = distance;
- maxDistanceIndex = i;
- }
- }
- // check if the max distance is greater than our tollerance allows
- if ( maxDistance >= tolerance ) {
- var p = points[maxDistanceIndex];
- line.distanceToPoint( p, true );
- // include this point in the output
- returnPoints = returnPoints.concat( douglasPeucker( points.slice( 0, maxDistanceIndex + 1 ), tolerance ) );
- // returnPoints.push( points[maxDistanceIndex] );
- returnPoints = returnPoints.concat( douglasPeucker( points.slice( maxDistanceIndex, points.length ), tolerance ) );
- } else {
- // ditching this point
- var p = points[maxDistanceIndex];
- line.distanceToPoint( p, true );
- returnPoints = [points[0]];
- }
- return returnPoints;
- };
- var arr = douglasPeucker( points, tolerance );
- // always have to push the very last point on so it doesn't get left off
- arr.push( points[points.length - 1 ] );
- return arr;
-};
-
-
-function ST_AngleAndCoordsAtLength(geom, len){
- var length = 0;
- var seglen = 0;
- var x,y,p,l;
- var pc = geom[0];
- //alert(len);
- for (c in geom){
- c = geom[c];
- if (c==pc) continue;
- seglen = Math.sqrt(((pc[0]-c[0])*(pc[0]-c[0]))+((pc[1]-c[1])*(pc[1]-c[1])));
- if ((length+seglen)>=len){
- length = len - length;
- x = (c[0]-pc[0])*length/seglen + pc[0]; //x on length
- y = (c[1]-pc[1])*length/seglen + pc[1]; //y on length
- p = Math.atan2(c[1]-pc[1],c[0]-pc[0]); // angle on length
- l = Math.sqrt(((x-c[0])*(x-c[0]))+((y-c[1])*(y-c[1]))); // how many pixels left with same angle
- return [p,x,y,l];
- }
- pc=c;
- length += seglen;
- }
-}
-
-function ST_Length(geom){ // length for a line formed by coordinates array
- var length = 0;
- var pc = geom[0];
- for (c in geom){
- c = geom[c];
- length += Math.sqrt((pc[0]-c[0])*(pc[0]-c[0])+(pc[1]-c[1])*(pc[1]-c[1]));
- pc=c;
- }
- return length;
-}
\ No newline at end of file
diff --git a/src/javascript/imagesq.js b/src/javascript/imagesq.js
deleted file mode 100755
index 8cca818..0000000
--- a/src/javascript/imagesq.js
+++ /dev/null
@@ -1 +0,0 @@
-imagesQ={onComplete:function(){},onLoaded:function(){},current:null,qLength:0,images:[],inProcess:false,queue:[],queue_images:function(){var arg=arguments;for(var i=0;i0){this.load_image(this.queue.shift())}this.inProcess=false},load_image:function(imageSrc){var th=this;var im=new Image;im.onload=function(){th.current=im;th.images.push(im);(th.onLoaded)();if(th.queue.length>0&&!th.inProcess){th.process_queue()}if(th.qLength==th.images.length){(th.onComplete)()}};im.src='icons/'+imageSrc}}
\ No newline at end of file
diff --git a/src/javascript/jsondraw.js b/src/javascript/jsondraw.js
deleted file mode 100755
index 057d113..0000000
--- a/src/javascript/jsondraw.js
+++ /dev/null
@@ -1,157 +0,0 @@
-function pathGeoJSON(ctx, val, ws, hs, gran, dashes, fill){
- ctx.beginPath();
- //alert(val.type);
- if (val.type == "Polygon"){
- var firstpoint = val.coordinates[0][0]
- for (coordseq in val.coordinates) {
- coordseq = val.coordinates[coordseq];
- ctx.moveTo(ws*coordseq[0][0], hs*(gran-coordseq[0][1]));
- var prevcoord = coordseq[0];
- if (fill){
- for (coord in coordseq) {
- coord = coordseq[coord];
- ctx.lineTo(ws*coord[0], hs*(gran-coord[1]));
- };
- }
- else {
- for (coord in coordseq) {
- coord = coordseq[coord];
- if ((prevcoord[0]==coord[0]&&(coord[0]==0||coord[0]==gran)) ||(prevcoord[1]==coord[1]&&(coord[1]==0||coord[1]==gran))) //hide boundaries
- {ctx.moveTo(ws*coord[0], hs*(gran-coord[1]));}
- else
- {ctx.lineTo(ws*coord[0], hs*(gran-coord[1]));};
- };
- };
- ctx.moveTo(ws*firstpoint[0], hs*(gran-firstpoint[1]));
- };
- }
- if (val.type == "LineString"){
- if (dashes!="aaa"){ctx.dashTo(ws*val.coordinates[0][0], hs*(gran-val.coordinates[0][1]),dashes);};
- for (coord in val.coordinates) {
- coord = val.coordinates[coord];
- if (dashes=="aaa") {ctx.lineTo(ws*coord[0], hs*(gran-coord[1]));}
- else {ctx.dashTo(ws*coord[0], hs*(gran-coord[1]));}
- };
- }
-}
-function textOnGeoJSON(ctx, val, ws, hs, gran, halo, collide, text){
- if (val.type == "LineString"){
- var projcoords = new Array();
- var textwidth = 0;
- var i = 0;
- while (itextwidth) {
- //alert("text: "+text+" width:"+textwidth+" space:"+linelength);
- var widthused = 0;
- var i = 0;
- var prevangle = "aaa";
- var positions = new Array();
- var solution = 0;
-
- var flipcount = 0;
- var flipped = false;
- while (solution < 2) {
- if (solution == 0) widthused = linelength-textwidth/2;
- if (solution == 1) widthused = 0;
- flipcount = 0;
- i = 0;
- prevangle = "aaa";
- positions = new Array();
- while (i=linelength || !axy){
- //alert("cannot fit text: "+text+" widthused:"+ widthused +" width:"+textwidth+" space:"+linelength+" letter:"+letter+" aspect:"+aspect);
- solution++;
- positions = new Array();
- if (flipped) {projcoords.reverse(); flipped=false;}
- break;
- } // cannot fit
- if (prevangle=="aaa") prevangle = axy[0];
- if (
- collide.checkPointWH([axy[1], axy[2]],
- 2.5*letterwidth,
- 2.5*letterwidth)
- || Math.abs(prevangle-axy[0])>0.2){
- i = 0;
- positions = new Array();
- letter = text.substr(i,1);
- widthused += letterwidth;
- continue;
- }
- /*while (letterwidth > axy[3] && i0.2){
- i = 0;
- positions = new Array();
- letter = text.substr(i,1);
- break;
- }
-
- }*/
- if (axy[0]>Math.PI/2||axy[0]<-Math.PI/2){flipcount+=letter.length};
- prevangle = axy[0];
- axy.push(letter);
- positions.push(axy);
- widthused += letterwidth;
- i++;
- }
- if (flipped && flipcount>text.length/2) {projcoords.reverse(); flipped=false;positions = new Array(); solution++; flipcount=0;}
- if (!flipped && flipcount>text.length/2) {projcoords.reverse(); flipped=true;positions = new Array();}
- if (solution>=2){ return}
- if (positions.length>0) {break}
- }
- if (solution>=2){ return}
- i = 0;
-
- while (halo && i=0&&b<=20)){style["default"]["fill-color"]="#C4D4F5"}if(((a=="Polygon")&&b>=0&&b<=20&&c.natural=="coastline")){style["default"]["fill-color"]="#fcf8e4"}if(((a=="Polygon")&&b>=3&&b<=20&&c.natural=="glacier")){style["default"]["fill-image"]="glacier.png";style["default"]["fill-color"]="#fcfeff"}if(((a=="Polygon")&&b>=10&&b<=20&&c.place=="city")||((a=="Polygon")&&b>=10&&b<=20&&c.place=="town")){style["default"]["z-index"]=1;style["default"]["fill-color"]="#FAF7F7";style["default"]["fill-opacity"]=0.6}if(((a=="Polygon")&&b>=10&&b<=20&&c.place=="hamlet")||((a=="Polygon")&&b>=10&&b<=20&&c.place=="village")||((a=="Polygon")&&b>=10&&b<=20&&c.place=="locality")){style["default"]["z-index"]=1;style["default"]["fill-color"]="#f3eceb";style["default"]["fill-opacity"]=0.6}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="residential")||((a=="Polygon")&&b>=10&&b<=20&&c.residential=="urban")){style["default"]["z-index"]=2;style["default"]["fill-color"]="#F7EFEB"}if(((a=="Polygon")&&b>=10&&b<=20&&c.residential=="rural")){style["default"]["z-index"]=2;style["default"]["fill-color"]="#f4d7c7"}if(((a=="Polygon")&&b>=16&&b<=20&&c.landuse=="residential")){style["default"]["color"]="#cb8904";style["default"]["width"]=0.3;style["default"]["z-index"]=2}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="allotments")||((a=="Polygon")&&b>=10&&b<=15&&c.leisure=="garden")||((a=="Polygon")&&b>=10&&b<=15&&c.landuse=="orchard")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#edf2c1"}if(((a=="Polygon")&&b>=10&&b<=20&&c.leisure=="park")){style["default"]["fill-image"]="parks2.png";style["default"]["z-index"]=3;style["default"]["fill-color"]="#c4e9a4"}if(((a=="Polygon")&&b>=16&&b<=20&&c.leisure=="garden")||((a=="Polygon")&&b>=16&&b<=20&&c.landuse=="orchard")){style["default"]["fill-image"]="sady10.png";style["default"]["z-index"]=3}if(((a=="Polygon")&&b>=12&&b<=20&&c.natural=="scrub")){style["default"]["fill-image"]="kust1.png";style["default"]["z-index"]=3;style["default"]["fill-color"]="#e5f5dc"}if(((a=="Polygon")&&b>=12&&b<=20&&c.natural=="heath")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#ecffe5"}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="industrial")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="military")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#ddd8da"}if(((a=="Polygon")&&b>=15&&b<=20&&c.amenity=="parking")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#ecedf4"}if(((a=="Polygon")&&b>=4&&b<=20&&c.natural=="desert")){style["default"]["fill-image"]="desert22.png"}if(((a=="Polygon")&&b>=4&&b<=20&&c.natural=="forest")||((a=="Polygon")&&b>=4&&b<=20&&c.natural=="wood")||((a=="Polygon")&&b>=4&&b<=20&&c.landuse=="forest")||((a=="Polygon")&&b>=4&&b<=20&&c.landuse=="wood")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#d6f4c6"}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="garages")){style["default"]["z-index"]=3;style["default"]["fill-color"]="#ddd8da"}if(((a=="Polygon")&&b>=10&&b<=20&&c.natural=="forest")||((a=="Polygon")&&b>=10&&b<=20&&c.natural=="wood")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="forest")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="wood")){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Serif Italic";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="green";style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=12&&b<=20&&c.landuse=="grass")||((a=="Polygon")&&b>=12&&b<=20&&c.natural=="grass")||((a=="Polygon")&&b>=12&&b<=20&&c.natural=="meadow")||((a=="Polygon")&&b>=12&&b<=20&&c.landuse=="meadow")||((a=="Polygon")&&b>=12&&b<=20&&c.landuse=="recreation_ground")){style["default"]["z-index"]=4;style["default"]["fill-color"]="#f4ffe5"}if(((a=="Polygon")&&b>=10&&b<=20&&c.natural=="wetland")){style["default"]["fill-image"]="swamp_world2.png";style["default"]["z-index"]=4}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="farmland")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="farm")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="field")){style["default"]["z-index"]=5;style["default"]["fill-color"]="#fff5c4"}if(((a=="Polygon")&&b>=6&&b<=9&&c.place=="city")||((a=="Polygon")&&b>=6&&b<=9&&c.place=="town")){style["default"]["z-index"]=5;style["default"]["fill-color"]="#ffe1d0";style["default"]["fill-opacity"]=0.6}if(((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="cemetery")){style["default"]["fill-image"]="cemetry7_2.png";style["default"]["z-index"]=5;style["default"]["fill-color"]="#e5f5dc"}if(((a=="Polygon")&&b>=13&&b<=20&&c.aeroway=="aerodrome")){style["default"]["color"]="#008ac6";style["default"]["width"]=0.8;style["default"]["z-index"]=5;style["default"]["fill-image"]="bull2.png"}if(((a=="Polygon")&&b>=12&&b<=20&&c.leisure=="stadium")||((a=="Polygon")&&b>=12&&b<=20&&c.leisure=="pitch")){style["default"]["z-index"]=5;style["default"]["fill-color"]="#e3deb1"}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=10&&c.waterway=="river")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.6;style["default"]["z-index"]=9}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=10&&c.waterway=="stream")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.3;style["default"]["z-index"]=9}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=14&&c.waterway=="river")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.7;style["default"]["z-index"]=9}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.waterway=="river")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.9;style["default"]["z-index"]=9}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=20&&c.waterway=="stream")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.5;style["default"]["z-index"]=9}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=20&&c.waterway=="canal")){style["default"]["color"]="#abc4f5";style["default"]["width"]=0.6;style["default"]["z-index"]=9}if(((a=="Polygon")&&b>=5&&b<=20&&c.waterway=="riverbank")||((a=="Polygon")&&b>=5&&b<=20&&c.natural=="water")||((a=="Polygon")&&b>=10&&b<=20&&c.landuse=="reservoir")){style["default"]["color"]="#C4D4F5";style["default"]["width"]=0.1;style["default"]["z-index"]=9;style["default"]["fill-color"]="#C4D4F5"}if(((a=="Polygon")&&b>=9&&b<=20&&c.natural=="water")){style["default"]["font-size"]=10;style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#285fd1";style["default"]["text-offset"]=1;style["default"]["font-family"]="DejaVu Serif Italic";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=16&&c.highway=="construction")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=2;style["default"]["dashes"]="9,9";style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.highway=="construction")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=3;style["default"]["dashes"]="9,9";style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.highway=="footway")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.highway=="path")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.highway=="cycleway")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.highway=="pedestrian")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.3;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=0.2;style["default"]["dashes"]="2,2";style["default"]["casing-color"]="#bf96ce"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.highway=="steps")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#bf96ce";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["linecap"]="butt";style["default"]["casing-width"]=0.3;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=3;style["default"]["dashes"]="1,1";style["default"]["casing-color"]="#ffffff"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="road")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="track")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="residential")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=9&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=10&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="service"&&c.living_street!="yes"&&c.service!="parking_aisle")){style["default"]["opacity"]=0.6;style["default"]["width"]=0.3;style["default"]["z-index"]=10;style["default"]["color"]="#996703";style["default"]["-x-mapnik-layer"]="bottom"}if(((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="road")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="track")){style["default"]["opacity"]=0.5;style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#996703";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=0.6;style["default"]["-x-mapnik-layer"]="bottom"}if(((a=="Polygon"||a=="LineString")&&b>=14&&b<=16&&c.highway=="road")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=16&&c.highway=="track")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=9;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=1.5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.highway=="road")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.highway=="track")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=9;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=2.5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="residential")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.3;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=1.2;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="service"&&c.living_street=="yes")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="service"&&c.service=="parking_aisle")){style["default"]["opacity"]=0.5;style["default"]["width"]=0.2;style["default"]["z-index"]=10;style["default"]["color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.highway=="service"&&c.living_street=="yes")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.highway=="service"&&c.service=="parking_aisle")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.3;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=1.2;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=14&&b<=15&&c.highway=="residential")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=15&&c.highway=="unclassified")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="service"&&c.living_street!="yes"&&c.service!="parking_aisle")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=2.5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="residential")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="unclassified")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="living_street")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="service"&&c.living_street!="yes"&&c.service!="parking_aisle")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=3.5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.highway=="residential")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.highway=="unclassified")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.highway=="living_street")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.highway=="service"&&c.living_street!="yes"&&c.service!="parking_aisle")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffffff";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=10;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=4.5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=10&&c.highway=="secondary")){style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["width"]=1.2;style["default"]["z-index"]=11;style["default"]["casing-width"]=0.35;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="tertiary")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.35;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=1.4;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.35;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=3;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.35;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["width"]=4;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=6;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=7;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=8;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="secondary")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="secondary_link")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="tertiary")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="tertiary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcffd1";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=11;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=9;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=7&&c.highway=="primary")){style["default"]["color"]="#fcea97";style["default"]["width"]=1;style["default"]["z-index"]=12}if(((a=="Polygon"||a=="LineString")&&b>=8&&b<=8&&c.highway=="primary")){style["default"]["color"]="#fcea97";style["default"]["width"]=2;style["default"]["z-index"]=12}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=9&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=9&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=2;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=10&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=10&&b<=10&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=3;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=4;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=6;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=7;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=8;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=9;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=10;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="primary_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#fcea97";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=12;style["default"]["casing-width"]=0.5;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=11;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=6&&b<=6&&c.highway=="trunk")){style["default"]["color"]="#fbcd40";style["default"]["width"]=0.9;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=6&&b<=6&&c.highway=="motorway")){style["default"]["color"]="#fc9265";style["default"]["width"]=1;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=7&&c.highway=="trunk")){style["default"]["color"]="#fbcd40";style["default"]["width"]=1;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=7&&c.highway=="motorway")){style["default"]["color"]="#fc9265";style["default"]["width"]=1.2;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=8&&b<=8&&c.highway=="trunk")){style["default"]["color"]="#fbcd40";style["default"]["width"]=2;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=8&&b<=8&&c.highway=="motorway")){style["default"]["color"]="#fc9265";style["default"]["width"]=2;style["default"]["z-index"]=13}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=9&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=9&&c.highway=="motorway")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=3;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=10&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=10&&b<=10&&c.highway=="motorway")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=4;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=11&&b<=11&&c.highway=="motorway")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=5;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=12&&b<=12&&c.highway=="motorway")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=7;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=13&&c.highway=="motorway")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=8;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=14&&b<=14&&c.highway=="motorway_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=9;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=15&&c.highway=="motorway_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=10;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=16&&b<=16&&c.highway=="motorway_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=11;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=17&&b<=17&&c.highway=="motorway_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=12;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=18&&b<=18&&c.highway=="motorway_link")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#ffd780";style["default"]["text-position"]="line";style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#404040";style["default"]["z-index"]=13;style["default"]["casing-width"]=1;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["width"]=13;style["default"]["casing-color"]="#996703"}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.highway=="trunk")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.highway=="trunk_link")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.highway=="motorway")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.highway=="motorway_link")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=20&&c.highway=="primary")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=20&&c.highway=="primary_link")){if(!("centerline" in style)){style.centerline=new Object}style.centerline["color"]="#fa6478";style.centerline["width"]=0.3;style.centerline["z-index"]=14;style.centerline["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=17&&b<=20&&c.oneway=="yes")){style["default"]["line-style"]="arrows";style["default"]["z-index"]=15;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=7&&c.railway=="rail")){style["default"]["color"]="#303030";style["default"]["width"]=0.5;style["default"]["z-index"]=15}if(((a=="Polygon"||a=="LineString")&&b>=7&&b<=7&&c.railway=="rail")){if(!("ticks" in style)){style.ticks=new Object}style.ticks["color"]="#ffffff";style.ticks["width"]=0.3;style.ticks["z-index"]=16;style.ticks["dashes"]="3,3"}if(((a=="Polygon"||a=="LineString")&&b>=8&&b<=8&&c.railway=="rail")){style["default"]["color"]="#303030";style["default"]["width"]=0.6;style["default"]["z-index"]=15}if(((a=="Polygon"||a=="LineString")&&b>=8&&b<=8&&c.railway=="rail")){if(!("ticks" in style)){style.ticks=new Object}style.ticks["color"]="#ffffff";style.ticks["width"]=0.35;style.ticks["z-index"]=16;style.ticks["dashes"]="3,3"}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.railway=="rail")){style["default"]["color"]="#606060";style["default"]["width"]=1.4;style["default"]["z-index"]=15}if(((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.railway=="rail")){if(!("ticks" in style)){style.ticks=new Object}style.ticks["color"]="#ffffff";style.ticks["width"]=1;style.ticks["z-index"]=16;style.ticks["dashes"]="6,6"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=20&&c.railway=="subway")){style["default"]["opacity"]=0.3;style["default"]["color"]="#072889";style["default"]["linecap"]="butt";style["default"]["width"]=3;style["default"]["z-index"]=15;style["default"]["dashes"]="3,3";style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.barrier=="fence")){style["default"]["color"]="black";style["default"]["width"]=0.3;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=16&&b<=20&&c.barrier=="wall")){style["default"]["color"]="black";style["default"]["width"]=0.5;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&!("colour" in c)&&!("color" in c))){style["default"]["color"]="#a0a0a0";style["default"]["width"]=0.5;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.colour=="white")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.color=="white")){style["default"]["color"]="white";style["default"]["width"]=1;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.colour=="red")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.color=="red")){style["default"]["color"]="#c00000";style["default"]["width"]=1;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.colour=="black")||((a=="Polygon"||a=="LineString")&&b>=15&&b<=20&&c.marking=="sport"&&c.color=="black")){style["default"]["color"]="black";style["default"]["width"]=1;style["default"]["z-index"]=16;style["default"]["-x-mapnik-layer"]="top"}if(((a=="Point")&&b>=15&&b<=20&&c.amenity=="bus_station")){style["default"]["icon-image"]="aut2_16x16_park.png"}if(((a=="Point")&&b>=16&&b<=20&&c.highway=="bus_stop")){style["default"]["icon-image"]="autobus_stop_14x10.png"}if(((a=="Point")&&b>=16&&b<=20&&c.railway=="tram_stop")){style["default"]["icon-image"]="tramway_14x13.png"}if(((a=="Point")&&b>=15&&b<=20&&c.amenity=="fuel")){style["default"]["icon-image"]="tankstelle1_10x11.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="pharmacy")){style["default"]["icon-image"]="med1_11x14.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="cinema")){style["default"]["icon-image"]="cinema_14x14.png"}if(((a=="Point")&&b>=15&&b<=20&&c.amenity=="museum")){style["default"]["icon-image"]="mus_13x12.png"}if(((a=="Point")&&b>=16&&b<=20&&c.tourism=="zoo")){style["default"]["icon-image"]="zoo4_14x14.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="courthouse")){style["default"]["icon-image"]="sud_14x13.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="theatre")){style["default"]["icon-image"]="teater_14x14.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="university")){style["default"]["icon-image"]="univer_15x11.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="toilets")){style["default"]["icon-image"]="wc-3_13x13.png"}if(((a=="Point")&&b>=16&&b<=20&&c.amenity=="place_of_worship"&&c.religion=="christian")){style["default"]["icon-image"]="pravosl_kupol_11x15.png"}if(((a=="Polygon")&&b>=16&&b<=20&&c.amenity=="place_of_worship"&&c.religion=="christian")){style["default"]["icon-image"]="pravosl_kupol_11x15.png"}if(((a=="Point")&&b>=14&&b<=20&&c.amenity=="place_of_worship")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#623f00";style["default"]["text-offset"]=3;style["default"]["font-family"]="DejaVu Serif Italic";style["default"]["max-width"]=70;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=14&&b<=20&&c.amenity=="place_of_worship")){style["default"]["text-opacity"]=1;style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["color"]="#111111";style["default"]["fill-opacity"]=0.5;style["default"]["text-halo-color"]="#ffffff";style["default"]["text-color"]="#623f00";style["default"]["z-index"]=16;style["default"]["fill-color"]="#777777";style["default"]["text-offset"]=3;style["default"]["font-family"]="DejaVu Serif Italic";style["default"]["max-width"]=70;style["default"]["width"]=0.1}if(((a=="Point")&&b>=17&&b<=20&&c.amenity=="kindergarten")){style["default"]["icon-image"]="kindergarten_14x14.png"}if(((a=="Point")&&b>=17&&b<=20&&c.amenity=="school")){style["default"]["icon-image"]="school_13x13.png"}if(((a=="Point")&&b>=17&&b<=20&&c.amenity=="library")){style["default"]["icon-image"]="lib_13x14.png"}if(((a=="Point")&&b>=17&&b<=20&&c.tourism=="hotel")){style["default"]["icon-image"]="hotell_14x14.png"}if(((a=="Point")&&b>=17&&b<=20&&c.amenity=="post_office")){style["default"]["icon-image"]="post_14x11.png"}if(((a=="Point")&&b>=17&&b<=20&&c.amenity=="restaurant")){style["default"]["icon-image"]="rest_14x14.png"}if(((a=="Point")&&b>=17&&b<=20&&"shop" in c)){style["default"]["icon-image"]="superm_12x12.png"}if(((a=="Polygon")&&b>=0&&b<=20&&c.boundary=="administrative"&&c.admin_level=="2")){style["default"]["color"]="#202020";style["default"]["width"]=0.5;style["default"]["z-index"]=16;style["default"]["opacity"]=0.7;style["default"]["dashes"]="6,4"}if(((a=="Polygon")&&b>=3&&b<=3&&c.boundary=="administrative"&&c.admin_level=="3")){style["default"]["color"]="#7e0156";style["default"]["width"]=0.4;style["default"]["z-index"]=16;style["default"]["opacity"]=0.5;style["default"]["dashes"]="3,3"}if(((a=="Polygon")&&b>=4&&b<=20&&c.boundary=="administrative"&&c.admin_level=="3")){style["default"]["color"]="#ff99cc";style["default"]["width"]=1.3;style["default"]["z-index"]=16;style["default"]["opacity"]=0.5}if(((a=="Polygon")&&b>=10&&b<=20&&c.boundary=="administrative"&&c.admin_level=="6")){style["default"]["color"]="#101010";style["default"]["width"]=0.5;style["default"]["z-index"]=16.1;style["default"]["opacity"]=0.6;style["default"]["dashes"]="1,2"}if(((a=="Polygon")&&b>=4&&b<=5&&c.boundary=="administrative"&&c.admin_level=="4")){style["default"]["color"]="#000000";style["default"]["width"]=0.3;style["default"]["z-index"]=16.3;style["default"]["opacity"]=0.8;style["default"]["dashes"]="1,2"}if(((a=="Polygon")&&b>=6&&b<=20&&c.boundary=="administrative"&&c.admin_level=="4")){style["default"]["color"]="#000000";style["default"]["width"]=0.7;style["default"]["z-index"]=16.3;style["default"]["opacity"]=0.8;style["default"]["dashes"]="1,2"}if(((a=="Polygon"||a=="LineString")&&b>=12&&b<=20&&c.railway=="tram")){style["default"]["line-style"]="rway44.png";style["default"]["z-index"]=17}if(((a=="Point")&&b>=9&&b<=20&&c.railway=="station"&&c.transport!="subway")){style["default"]["font-size"]=9;style["default"]["font-family"]="DejaVu Sans Mono Book";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="rw_stat_stanzii_2_blue.png";style["default"]["text-color"]="#000d6c";style["default"]["text-offset"]=7;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=12&&b<=15&&c.railway=="station"&&c.transport=="subway")){style["default"]["icon-image"]="metro_others6.png";style["default"]["z-index"]=17}if(((a=="Point")&&b>=12&&b<=15&&c.railway=="station"&&c.transport=="subway")){style["default"]["font-size"]=9;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=2;style["default"]["text-color"]="#1300bb";style["default"]["text-offset"]=11;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=16&&b<=20&&c.railway=="subway_entrance")){style["default"]["icon-image"]="metro_others6.png";style["default"]["z-index"]=17}if(((a=="Point")&&b>=16&&b<=20&&c.railway=="subway_entrance"&&"name" in c)){style["default"]["font-size"]=9;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=2;style["default"]["text-color"]="#1300bb";style["default"]["text-offset"]=11;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=10&&b<=20&&c.aeroway=="aerodrome")){style["default"]["font-size"]=9;style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="airport_world.png";style["default"]["z-index"]=17;style["default"]["text-color"]="#1e7ca5";style["default"]["text-offset"]=12;style["default"]["font-family"]="DejaVu Sans Condensed Bold";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=3&&b<=6&&c.capital=="yes"&&c.population>5000000)){style["default"]["allow-overlap"]="true";style["default"]["icon-image"]="adm_5.png"}if(((a=="Point")&&b>=3&&b<=3&&c.capital=="yes"&&c.population>5000000)){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#505050";style["default"]["text-offset"]=4;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff";style["default"]["text-align"]="left"}if(((a=="Point")&&b>=4&&b<=6&&c.capital=="yes"&&c.population>5000000)){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#303030";style["default"]["text-offset"]=6;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff";style["default"]["text-align"]="left"}if(((a=="Point")&&b>=4&&b<=5&&"place" in c&&c.population<100000&&"capital" in c&&c.admin_level<5)){style["default"]["font-size"]=7;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm_4.png";style["default"]["text-color"]="#404040";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=4&&b<=5&&"place" in c&&c.population>=100000&&c.population<=5000000&&"capital" in c&&c.admin_level<5)){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm_5.png";style["default"]["z-index"]=1;style["default"]["text-color"]="#404040";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=5&&b<=5&&c.place=="town"&&"capital" in c)){style["default"]["icon-image"]="town_4.png"}if(((a=="Point")&&b>=6&&b<=6&&c.place=="city"&&c.population<100000)||((a=="Point")&&b>=6&&b<=6&&c.place=="town"&&c.population<100000&&"admin_level" in c)){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm1_4_6.png";style["default"]["text-color"]="#202020";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=7&&c.place=="city"&&c.population<100000)||((a=="Point")&&b>=7&&b<=7&&c.place=="town"&&c.population<100000)){style["default"]["font-size"]=9;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="town_6.png";style["default"]["text-color"]="#202020";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=7&&c.place=="town"&&!("population" in c))||((a=="Point")&&b>=7&&b<=7&&c.place=="city"&&!("population" in c))){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="town_6.png";style["default"]["text-color"]="#202020";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=8&&b<=8&&c.place=="town")){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="town_6.png";style["default"]["text-color"]="#202020";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=6&&b<=8&&c.place=="city"&&c.population>=100000&&c.population<=1000000)||((a=="Point")&&b>=6&&b<=6&&c.place=="town"&&c.population>=100000&&c.population<=1000000&&"admin_level" in c)){style["default"]["font-size"]=9;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm1_5.png";style["default"]["text-color"]="#303030";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=8&&c.place=="city"&&c.population>=100000&&c.population<=1000000)||((a=="Point")&&b>=7&&b<=7&&c.place=="town"&&c.population>=100000&&c.population<=1000000)){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm1_5.png";style["default"]["text-color"]="#303030";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=6&&b<=6&&c.place=="city"&&c.population>1000000)){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm1_6_test2.png";style["default"]["z-index"]=1;style["default"]["text-color"]="#404040";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=8&&c.place=="city"&&c.population>1000000&&c.population<5000000)){style["default"]["font-size"]=11;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm1_6_test2.png";style["default"]["z-index"]=2;style["default"]["text-color"]="#404040";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=8&&c.place=="city"&&c.population>=5000000)){style["default"]["font-size"]=12;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["icon-image"]="adm_6.png";style["default"]["z-index"]=3;style["default"]["text-color"]="#404040";style["default"]["text-offset"]=5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=9&&b<=11&&c.place=="city"&&c.capital=="yes")){style["default"]["font-size"]=14;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=4;style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["text-offset"]=-20;style["default"]["-x-mapnik-min-distance"]=50;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=9&&b<=11&&c.place=="city"&&c.capital!="yes")){style["default"]["font-size"]=14;style["default"]["font-family"]="DejaVu Sans Bold";style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=2;style["default"]["text-color"]="#101010";style["default"]["z-index"]=1;style["default"]["text-offset"]=-20;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=11&&b<=11&&c.place=="town")){style["default"]["font-size"]=12;style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=12&&b<=12&&c.place=="town")){style["default"]["text-opacity"]=0.2;style["default"]["font-size"]=20;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=12&&b<=12&&c.place=="city")){style["default"]["text-opacity"]=0.3;style["default"]["font-size"]=25;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=13&&b<=13&&c.place=="town")){style["default"]["text-opacity"]=0.2;style["default"]["font-size"]=40;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=13&&b<=13&&c.place=="city")){style["default"]["text-opacity"]=0.3;style["default"]["font-size"]=50;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=14&&b<=20&&c.place=="town")){style["default"]["text-opacity"]=0.2;style["default"]["font-size"]=80;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=14&&b<=20&&c.place=="city")){style["default"]["text-opacity"]=0.3;style["default"]["font-size"]=100;style["default"]["text-allow-overlap"]="true";style["default"]["text-color"]="#101010";style["default"]["z-index"]=20;style["default"]["font-family"]="DejaVu Sans Book"}if(((a=="Point")&&b>=9&&b<=20&&c.place=="village")){style["default"]["font-size"]=9;style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#606060";style["default"]["text-offset"]=1;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=9&&b<=20&&c.place=="hamlet")){style["default"]["font-size"]=8;style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#505050";style["default"]["text-offset"]=1;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=9&&b<=20&&c.landuse=="nature_reserve")||((a=="Polygon")&&b>=11&&b<=20&&c.leisure=="park")){style["default"]["font-size"]=10;style["default"]["text-allow-overlap"]="false";style["default"]["text-halo-radius"]=0;style["default"]["text-color"]="#3c8000";style["default"]["text-offset"]=1;style["default"]["font-family"]="DejaVu Serif Italic";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon"||a=="LineString")&&b>=10&&b<=20&&c.waterway=="stream")||((a=="Polygon"||a=="LineString")&&b>=9&&b<=20&&c.waterway=="river")||((a=="Polygon"||a=="LineString")&&b>=13&&b<=20&&c.waterway=="canal")){style["default"]["font-size"]=9;style["default"]["text-halo-radius"]=1;style["default"]["text-position"]="line";style["default"]["text-color"]="#547bd1";style["default"]["font-family"]="DejaVu Sans Oblique";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=0&&b<=3&&c.place=="continent")){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#202020";style["default"]["z-index"]=-1;style["default"]["text-offset"]=-10;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=2&&b<=3&&c.place=="continent")){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#202020";style["default"]["z-index"]=-1;style["default"]["text-offset"]=-10;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=0&&b<=6&&c.place=="ocean")){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Oblique";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#202020";style["default"]["z-index"]=-1;style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=20&&c.place=="ocean")){style["default"]["font-size"]=11;style["default"]["font-family"]="DejaVu Sans Oblique";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#202020";style["default"]["z-index"]=-1;style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=0&&b<=6&&c.place=="sea")){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans Oblique";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#4976d1";style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=20&&c.place=="sea")){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans Oblique";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#4976d1";style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=3&&b<=4&&c.natural=="peak"&&c.ele>4500)){style["default"]["font-size"]=7;style["default"]["font-family"]="DejaVu Sans Mono Book";style["default"]["text-color"]="#664229";style["default"]["text-halo-radius"]=0;style["default"]["icon-image"]="mountain_peak6.png";style["default"]["text-offset"]=3;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=5&&b<=6&&c.natural=="peak"&&c.ele>3500)){style["default"]["font-size"]=7;style["default"]["font-family"]="DejaVu Sans Mono Book";style["default"]["text-color"]="#664229";style["default"]["text-halo-radius"]=0;style["default"]["icon-image"]="mountain_peak6.png";style["default"]["text-offset"]=3;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=7&&b<=12&&c.natural=="peak"&&c.ele>2500)){style["default"]["font-size"]=7;style["default"]["font-family"]="DejaVu Sans Mono Book";style["default"]["text-color"]="#664229";style["default"]["text-halo-radius"]=0;style["default"]["icon-image"]="mountain_peak6.png";style["default"]["text-offset"]=3;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=12&&b<=20&&c.natural=="peak")){style["default"]["font-size"]=7;style["default"]["font-family"]="DejaVu Sans Mono Book";style["default"]["text-color"]="#664229";style["default"]["text-halo-radius"]=0;style["default"]["icon-image"]="mountain_peak6.png";style["default"]["text-offset"]=3;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=2&&b<=3&&c.place=="country")){style["default"]["font-size"]=10;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#dd5875";style["default"]["z-index"]=1;style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=4&&b<=8&&c.place=="country")){style["default"]["font-size"]=13;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="red";style["default"]["z-index"]=1;style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=8&&b<=10&&c.place=="country")){style["default"]["font-size"]=16;style["default"]["font-family"]="DejaVu Sans Book";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="red";style["default"]["z-index"]=1;style["default"]["text-offset"]=0;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=3&&b<=5&&c.boundary=="administrative"&&c.admin_level=="3")){style["default"]["font-size"]=8;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["text-halo-radius"]=0;style["default"]["text-color"]="#101010";style["default"]["text-offset"]=-5;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["max-width"]=50;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=6&&b<=10&&c.boundary=="administrative"&&c.admin_level=="4")){style["default"]["font-size"]=14;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#606060";style["default"]["text-offset"]=17;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-color"]="#ffffff"}if(((a=="Polygon")&&b>=10&&b<=20&&c.boundary=="administrative"&&c.admin_level=="6")){style["default"]["font-size"]=12;style["default"]["text-halo-radius"]=1;style["default"]["text-color"]="#7848a0";style["default"]["text-offset"]=-10;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["text-halo-color"]="#ffffff"}if(((a=="Point")&&b>=12&&b<=20&&c.place=="suburb")){style["default"]["font-size"]=12;style["default"]["font-family"]="DejaVu Sans ExtraLight";style["default"]["z-index"]=20;style["default"]["text-color"]="#7848a0"}if(((a=="Polygon")&&b>=13&&b<=20&&"building" in c)){style["default"]["color"]="#cca352";style["default"]["width"]=0.3;style["default"]["z-index"]=17}if(((a=="Polygon")&&b>=15&&b<=20&&c.building=="yes")){style["default"]["z-index"]=17;style["default"]["fill-color"]="#E7CCB4"}if(((a=="Polygon")&&b>=15&&b<=20&&c.building=="public")){style["default"]["z-index"]=17;style["default"]["fill-color"]="#edc2ba"}if(((a=="Polygon")&&b>=15&&b<=20&&"building" in c&&c.building!="yes"&&c.building!="public")){style["default"]["z-index"]=17;style["default"]["fill-color"]="#D8D1D1"}if(((a=="Polygon")&&b>=15&&b<=16&&"building" in c)){style["default"]["opacity"]=0.8;style["default"]["font-size"]=7;style["default"]["text-halo-radius"]=1;style["default"]["text-position"]="center";style["default"]["-x-mapnik-min-distance"]=10}if(((a=="Polygon")&&b>=17&&b<=20&&"building" in c)){style["default"]["opacity"]=0.8;style["default"]["font-size"]=8;style["default"]["text-halo-radius"]=1;style["default"]["text-position"]="center";style["default"]["-x-mapnik-min-distance"]=10}if(((a=="Point")&&b>=13&&b<=20&&c.highway=="milestone"&&"pk" in c)){style["default"]["font-size"]=7;style["default"]["-x-mapnik-min-distance"]=0;style["default"]["text-halo-radius"]=5}return style};
\ No newline at end of file
diff --git a/src/javascript/render.html b/src/javascript/render.html
deleted file mode 100755
index 11c99dc..0000000
--- a/src/javascript/render.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- A canvas Map of Minsk
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/javascript/render.js b/src/javascript/render.js
deleted file mode 100755
index c7c9e89..0000000
--- a/src/javascript/render.js
+++ /dev/null
@@ -1,272 +0,0 @@
-draw = function () {
- imagesQ.queue_images(imagesToLoad);
- imagesQ.process_queue();
- $.getJSON('/z12.json',function(data) {
-
- var start = new Date().getTime();
- var ctxa = document.getElementById('canvas');
- ctxa.width = 2*ctxa.width;
- ctxa.height = 2*ctxa.height;
- var ctx = ctxa.getContext('2d');
- var ws = ctxa.width/data.granularity;
- var hs = ctxa.height/data.granularity;
- var zoom = 13;
- var style = restyle({}, zoom, "canvas")["default"];
- if ("fill-color" in style){ctx.fillStyle = style["fill-color"];};
- if ("opacity" in style){ctx.globalAlpha = style["opacity"];};
- if ("fill-opacity" in style){ctx.globalAlpha = style["fill-opacity"];};
- var style = restyle({"natural":"coastline"}, zoom, "Polygon")["default"];
- if ("fill-color" in style){ctx.fillStyle = style["fill-color"];};
- if ("opacity" in style){ctx.globalAlpha = style["opacity"];};
- if ("fill-opacity" in style){ctx.globalAlpha = style["fill-opacity"]};
-
- ctx.fillRect (-1, -1, ctxa.width+1, ctxa.height+1);
-
- ctx.strokeStyle = "rgba(0,0,0,0.5)";
- ctx.fillStyle = "rgba(0,0,0,0.5)";
- ctx.lineWidth = 1;
- ctx.lineCap = "round";
- ctx.lineJoin = "round";
- var styledfeatures = new Array();
-
-
- $.each(data.features, function(key, val) {
- if (!("layer" in val.properties )){val.properties.layer=0};
- $.each(restyle(val.properties, zoom, val.type), function(k,v){
- var newObject = jQuery.extend({}, val);
- newObject.style = v;
- if ("z-index" in newObject.style) {newObject.style["z-index"] = parseFloat(newObject.style["z-index"]);}
- else {newObject.style["z-index"] = 0;}
- styledfeatures.push(newObject);
- });
- });
-
- data.features = styledfeatures
- data.features.sort(function (a,b){
- //if ("layer" in a.properties && "layer" in b.properties && a.properties.layer!=b.properties.layer){return a.properties.layer-b.properties.layer};
- return a.style["z-index"]-b.style["z-index"];
- });
- var zlayers = new Object();
- var layerlist = new Array();
- $.each(data.features, function(key, val) {
- val.properties.layer=parseFloat(val.properties.layer);
- if (isNaN(val.properties.layer)){val.properties.layer=0;};
- if (val.style["-x-mapnik-layer"]=="top" ){val.properties.layer=10000};
- if (val.style["-x-mapnik-layer"]=="bottom" ){val.properties.layer=-10000};
- if (!(val.properties.layer in zlayers)) {
- zlayers[val.properties.layer] = new Array();
- layerlist.push(val.properties.layer);
- };
- zlayers[val.properties.layer].push(val);
- });
- layerlist.sort();
- $.each(layerlist, function(key, sublay){ // polygons pass
- var dat = zlayers[sublay];
- $.each(dat, function(key, val) {
- ctx.save()
- style = val.style;
- if ("fill-color" in style) {
- ctx.fillStyle = style["fill-color"];
- if ("opacity" in style){ctx.globalAlpha = style["opacity"]};
- if ("fill-opacity" in style){ctx.globalAlpha = style["fill-opacity"]};
- pathGeoJSON(ctx, val, ws, hs, data.granularity, "aaa", true);
- ctx.fill();
- };
- ctx.restore();
- });
- ctx.lineCap = "butt";
-
- $.each(dat, function(key, val) { // casings pass
-
- ctx.save()
- style = val.style;
- if ("casing-width" in style) {
- var width = 2*style["casing-width"];
- var dashes = "aaa";
- if ("width" in style){width += style["width"]};
- ctx.lineWidth = width;
- if ("color" in style){ctx.strokeStyle = style["color"]};
- if ("linecap" in style){ctx.lineCap = style["linecap"]};
- if ("linejoin" in style){ctx.lineJoin = style["linejoin"]};
- if ("dashes" in style){dashes = style["dashes"].split(",")};
- if ("opacity" in style){ctx.globalAlpha = style["opacity"]};
- if ("casing-color" in style){ctx.strokeStyle = style["casing-color"]};
- if ("casing-linecap" in style){ctx.lineCap = style["casing-linecap"]};
- if ("casing-linejoin" in style){ctx.lineJoin = style["casing-linejoin"]};
- if ("casing-dashes" in style){dashes = style["casing-dashes"].split(",")};
- if ("casing-opacity" in style){ctx.globalAlpha = style["casing-opacity"]};
- pathGeoJSON(ctx, val, ws, hs, data.granularity, dashes);
- ctx.stroke();
- };
- ctx.restore();
- });
- ctx.lineCap = "round";
- $.each(dat, function(key, val) { // lines pass
- ctx.save()
- style = val.style;
- if ("width" in style) {
- var dashes = "aaa";
- if ("color" in style){ctx.strokeStyle = style["color"]};
- if ("linecap" in style){ctx.lineCap = style["linecap"]};
- if ("linejoin" in style){ctx.lineJoin = style["linejoin"]};
- if ("dashes" in style){dashes = style["dashes"].split(",")};
- if ("opacity" in style){ctx.globalAlpha = style["opacity"]};
- ctx.lineWidth = style["width"];
- pathGeoJSON(ctx, val, ws, hs, data.granularity, dashes);
- ctx.stroke();
- };
- ctx.restore();
- });
- });
- var collides = new collisionBuffer();
- layerlist.reverse();
- $.each(layerlist, function(key, sublay){
- var dat = zlayers[sublay];
- dat.reverse();
- $.each(dat, function(key, val) { // icons pass
- ctx.save()
- style = val.style;
- if ("icon-image" in style) {
- var img = new Image();
- img.src = 'icons/'+style["icon-image"];
- var offset = 0;
- var opacity = 1;
- var mindistance = 0;
- var textwidth = 0;
- if ("text-offset" in style){offset = style["text-offset"]};
- if ("text-color" in style){ctx.fillStyle = style["text-color"];};
- if ("text-halo-radius" in style){ctx.lineWidth = style["text-halo-radius"]+2};
- if ("text-halo-color" in style){ctx.strokeStyle = style["text-halo-color"]};
- if ("opacity" in style){opacity = style["opacity"]};
- if ("text-opacity" in style){opacity = style["text-opacity"]};
- if ("-x-mapnik-min-distance" in style){mindistance = style["-x-mapnik-min-distance"]};
-
- var point;
- if (val.type == "Point"){ point = [ws*val.coordinates[0],hs*(data.granularity-val.coordinates[1])]};
- if (val.type == "Polygon"){ point = [ws*val.reprpoint[0],hs*(data.granularity-val.reprpoint[1])]};
- //alert(collides.checkPointWH(point, img.width, img.height));
- if (style["text"]){ctx.font = fontString(style["font-family"],style["font-size"]);};
- if (collides.checkPointWH(point, img.width, img.height)){return;}
- if (style["text"]){
- textwidth = ctx.measureText(style["text"]).width;
- if (!(style["text-allow-overlap"]=="true")&&collides.checkPointWH([point[0],point[1]+offset], textwidth, 10)){return;}
- }
- if (opacity <1){
- ctx.fillStyle = new RGBColor(ctx.fillStyle, opacity).toRGBA();
- ctx.strokeStyle = new RGBColor(ctx.strokeStyle, opacity).toRGBA();
- }
-
- ctx.textAlign = "center";
- ctx.textBaseline = "middle";
-
- if(style["text"]){
- if ("text-halo-radius" in style)
- ctx.strokeText(style["text"], point[0],point[1]+offset);
- ctx.fillText(style["text"], point[0],point[1]+offset);
- }
- ctx.drawImage(img, point[0]-img.width/2,point[1]-img.height/2);
- collides.addPointWH(point, img.width, img.height,mindistance);
- collides.addPointWH([point[0],point[1]+offset], textwidth, 10, mindistance);
- };
- ctx.restore();
- });
- $.each(dat, function(key, val) { // text pass
- ctx.save()
- style = val.style;
- if ("text" in style && !("icon-image" in style) && style["text"]!="") {
- var offset = 0;
- var opacity = 1;
- var mindistance = 0;
- if ("text-offset" in style){offset = style["text-offset"]};
- if ("text-color" in style){ctx.fillStyle = style["text-color"];};
- if ("text-halo-radius" in style){ctx.lineWidth = style["text-halo-radius"]+2};
- if ("text-halo-color" in style){ctx.strokeStyle = style["text-halo-color"]};
- if ("opacity" in style){opacity = style["opacity"]};
- if ("text-opacity" in style){opacity = style["text-opacity"]};
- if ("-x-mapnik-min-distance" in style){mindistance = style["-x-mapnik-min-distance"]};
-
- var point;
- if (val.type == "Point"){ point = [ws*val.coordinates[0],hs*(data.granularity-val.coordinates[1])]};
- if (val.type == "Polygon"){ point = [ws*val.reprpoint[0],hs*(data.granularity-val.reprpoint[1])]};
- if (val.type == "LineString"){ point = [ws*val.coordinates[0][0],hs*(data.granularity-val.coordinates[0][1])]};
- if (style["text"]){ctx.font = fontString(style["font-family"],style["font-size"]);};
- textwidth = ctx.measureText(style["text"]).width;
- if (!(style["text-allow-overlap"]=="true")&&collides.checkPointWH([point[0],point[1]+offset], textwidth, 5)) return;
-
- if (opacity <1){
- ctx.fillStyle = new RGBColor(ctx.fillStyle, opacity).toRGBA();
- ctx.strokeStyle = new RGBColor(ctx.strokeStyle, opacity).toRGBA();
- }
-
- ctx.textAlign = "center";
- ctx.textBaseline = "middle";
- if (val.type=="Polygon" || val.type == "Point"){
- if ("text-halo-radius" in style)
- ctx.strokeText(style["text"], point[0],point[1]+offset);
- ctx.fillText(style["text"], point[0],point[1]+offset);
- collides.addPointWH([point[0],point[1]+offset], textwidth, 10, mindistance);
- }
- else{//Linestring
- textOnGeoJSON(ctx, val, ws, hs, data.granularity, ("text-halo-radius" in style), collides, style["text"])
- };
- };
- ctx.restore();
- });
- collides.buffer = new Array();
- for (poly in collides.buffer){
- poly = collides.buffer[poly];
- ctx.fillRect(poly[0],poly[1],poly[2]-poly[0],poly[3]-poly[1])
- }
- });
- var elapsed = new Date().getTime()-start;
- alert(elapsed);
- });
-};
-fontString = function(name, size){
-
- var weight = "400";
- var family = "sans";
- var italic = "";
- if (!size) size = 9;
- if (!name) name = "sans";
- name = name.toLowerCase();
- if (name.indexOf("italic")>=0) italic = "italic";
- if (name.indexOf("oblique")>=0) italic = "italic";
- if (name.indexOf("bold")>=0) weight = "700";
- //alert(name);
- if (name.indexOf("serif")>=0) family = "sans-serif";
- if (name.indexOf("dejavu sans")>=0) family = '"DejaVu Sans", Arial, sans';
- if (name.indexOf("dejavu sans book")>=0) family = '"DejaVu Sans Book", "DejaVu Sans", Arial, sans';
- //if (name.indexOf("dejavu sans oblique")>=0) family = '"Deja Vu Sans Oblique", sans-serif';
- if (name.indexOf("dejavu sans extralight")>=0) family = '"DejaVu Sans ExtraLight", "DejaVu Sans", Arial, sans';
- if (name.indexOf("dejavu serif")>=0) family = '"DejaVu Serif", "Times New Roman", sans-serif';
- if (name.indexOf("dejavu sans mono")>=0) family = '"DejaVu Sans Mono", Terminal, monospace';
- if (name.indexOf("dejavu sans mono book")>=0) family = '"DejaVu Sans Mono Book", "DejaVu Sans Mono", Terminal, monospace';
- font = weight + " " + italic + " " + size +"px " + family;
- //alert(font);
- return font;
-
-}
-
-
-function collisionBuffer(){
- this.buffer = new Array();
- this.addBox = function(box){
- this.buffer.push(box);
- }
- this.addPointWH = function(point, w, h, d){
- if (!d)d=0;
- this.buffer.push([point[0]-w/2-d, point[1]-h/2-d, point[0]+w/2-d, point[1]+w/2-d]);
- }
- this.checkBox = function(b){
- for (i in this.buffer){
- c = this.buffer[i];
- //alert([b,c])
- if ((c[0]<=b[2] && c[1]<=b[3] && c[2]>=b[0] && c[3]>=b[1])){return true;};
- }
- return false;
- }
- this.checkPointWH = function(point, w, h){
- return this.checkBox([point[0]-w/2, point[1]-h/2, point[0]+w/2, point[1]+w/2]);
- }
-}
\ No newline at end of file
diff --git a/src/javascript/rgbcolor.js b/src/javascript/rgbcolor.js
deleted file mode 100644
index 0eb44a9..0000000
--- a/src/javascript/rgbcolor.js
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * A class to parse color values
- * @author Stoyan Stefanov
- * @link http://www.phpied.com/rgb-color-parser-in-javascript/
- * @license Use it if you like it
- */
-function RGBColor(color_string, alpha)
-{
- this.ok = false;
-
- // strip any leading #
- if (color_string.charAt(0) == '#') { // remove # if any
- color_string = color_string.substr(1,6);
- }
-
- color_string = color_string.replace(/ /g,'');
- color_string = color_string.toLowerCase();
-
- // before getting into regexps, try simple matches
- // and overwrite the input
- var simple_colors = {
- aliceblue: 'f0f8ff',
- antiquewhite: 'faebd7',
- aqua: '00ffff',
- aquamarine: '7fffd4',
- azure: 'f0ffff',
- beige: 'f5f5dc',
- bisque: 'ffe4c4',
- black: '000000',
- blanchedalmond: 'ffebcd',
- blue: '0000ff',
- blueviolet: '8a2be2',
- brown: 'a52a2a',
- burlywood: 'deb887',
- cadetblue: '5f9ea0',
- chartreuse: '7fff00',
- chocolate: 'd2691e',
- coral: 'ff7f50',
- cornflowerblue: '6495ed',
- cornsilk: 'fff8dc',
- crimson: 'dc143c',
- cyan: '00ffff',
- darkblue: '00008b',
- darkcyan: '008b8b',
- darkgoldenrod: 'b8860b',
- darkgray: 'a9a9a9',
- darkgreen: '006400',
- darkkhaki: 'bdb76b',
- darkmagenta: '8b008b',
- darkolivegreen: '556b2f',
- darkorange: 'ff8c00',
- darkorchid: '9932cc',
- darkred: '8b0000',
- darksalmon: 'e9967a',
- darkseagreen: '8fbc8f',
- darkslateblue: '483d8b',
- darkslategray: '2f4f4f',
- darkturquoise: '00ced1',
- darkviolet: '9400d3',
- deeppink: 'ff1493',
- deepskyblue: '00bfff',
- dimgray: '696969',
- dodgerblue: '1e90ff',
- feldspar: 'd19275',
- firebrick: 'b22222',
- floralwhite: 'fffaf0',
- forestgreen: '228b22',
- fuchsia: 'ff00ff',
- gainsboro: 'dcdcdc',
- ghostwhite: 'f8f8ff',
- gold: 'ffd700',
- goldenrod: 'daa520',
- gray: '808080',
- green: '008000',
- greenyellow: 'adff2f',
- honeydew: 'f0fff0',
- hotpink: 'ff69b4',
- indianred : 'cd5c5c',
- indigo : '4b0082',
- ivory: 'fffff0',
- khaki: 'f0e68c',
- lavender: 'e6e6fa',
- lavenderblush: 'fff0f5',
- lawngreen: '7cfc00',
- lemonchiffon: 'fffacd',
- lightblue: 'add8e6',
- lightcoral: 'f08080',
- lightcyan: 'e0ffff',
- lightgoldenrodyellow: 'fafad2',
- lightgrey: 'd3d3d3',
- lightgreen: '90ee90',
- lightpink: 'ffb6c1',
- lightsalmon: 'ffa07a',
- lightseagreen: '20b2aa',
- lightskyblue: '87cefa',
- lightslateblue: '8470ff',
- lightslategray: '778899',
- lightsteelblue: 'b0c4de',
- lightyellow: 'ffffe0',
- lime: '00ff00',
- limegreen: '32cd32',
- linen: 'faf0e6',
- magenta: 'ff00ff',
- maroon: '800000',
- mediumaquamarine: '66cdaa',
- mediumblue: '0000cd',
- mediumorchid: 'ba55d3',
- mediumpurple: '9370d8',
- mediumseagreen: '3cb371',
- mediumslateblue: '7b68ee',
- mediumspringgreen: '00fa9a',
- mediumturquoise: '48d1cc',
- mediumvioletred: 'c71585',
- midnightblue: '191970',
- mintcream: 'f5fffa',
- mistyrose: 'ffe4e1',
- moccasin: 'ffe4b5',
- navajowhite: 'ffdead',
- navy: '000080',
- oldlace: 'fdf5e6',
- olive: '808000',
- olivedrab: '6b8e23',
- orange: 'ffa500',
- orangered: 'ff4500',
- orchid: 'da70d6',
- palegoldenrod: 'eee8aa',
- palegreen: '98fb98',
- paleturquoise: 'afeeee',
- palevioletred: 'd87093',
- papayawhip: 'ffefd5',
- peachpuff: 'ffdab9',
- peru: 'cd853f',
- pink: 'ffc0cb',
- plum: 'dda0dd',
- powderblue: 'b0e0e6',
- purple: '800080',
- red: 'ff0000',
- rosybrown: 'bc8f8f',
- royalblue: '4169e1',
- saddlebrown: '8b4513',
- salmon: 'fa8072',
- sandybrown: 'f4a460',
- seagreen: '2e8b57',
- seashell: 'fff5ee',
- sienna: 'a0522d',
- silver: 'c0c0c0',
- skyblue: '87ceeb',
- slateblue: '6a5acd',
- slategray: '708090',
- snow: 'fffafa',
- springgreen: '00ff7f',
- steelblue: '4682b4',
- tan: 'd2b48c',
- teal: '008080',
- thistle: 'd8bfd8',
- tomato: 'ff6347',
- turquoise: '40e0d0',
- violet: 'ee82ee',
- violetred: 'd02090',
- wheat: 'f5deb3',
- white: 'ffffff',
- whitesmoke: 'f5f5f5',
- yellow: 'ffff00',
- yellowgreen: '9acd32'
- };
- for (var key in simple_colors) {
- if (color_string == key) {
- color_string = simple_colors[key];
- }
- }
- // emd of simple type-in colors
-
- // array of color definition objects
- var color_defs = [
- {
- re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
- example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
- process: function (bits){
- return [
- parseInt(bits[1]),
- parseInt(bits[2]),
- parseInt(bits[3])
- ];
- }
- },
- {
- re: /^(\w{2})(\w{2})(\w{2})$/,
- example: ['#00ff00', '336699'],
- process: function (bits){
- return [
- parseInt(bits[1], 16),
- parseInt(bits[2], 16),
- parseInt(bits[3], 16)
- ];
- }
- },
- {
- re: /^(\w{1})(\w{1})(\w{1})$/,
- example: ['#fb0', 'f0f'],
- process: function (bits){
- return [
- parseInt(bits[1] + bits[1], 16),
- parseInt(bits[2] + bits[2], 16),
- parseInt(bits[3] + bits[3], 16)
- ];
- }
- }
- ];
-
- // search through the definitions to find a match
- for (var i = 0; i < color_defs.length; i++) {
- var re = color_defs[i].re;
- var processor = color_defs[i].process;
- var bits = re.exec(color_string);
- if (bits) {
- channels = processor(bits);
- this.r = channels[0];
- this.g = channels[1];
- this.b = channels[2];
- this.ok = true;
- }
-
- }
-
- // validate/cleanup values
- this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
- this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
- this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);
-
- if (alpha) this.a = alpha
- else this.a = 1;
-
-
- // some getters
- this.toRGB = function () {
- return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
- }
- this.toRGBA = function () {
- return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.a + ')';
- }
- this.toHex = function () {
- var r = this.r.toString(16);
- var g = this.g.toString(16);
- var b = this.b.toString(16);
- if (r.length == 1) r = '0' + r;
- if (g.length == 1) g = '0' + g;
- if (b.length == 1) b = '0' + b;
- return '#' + r + g + b;
- }
-
- // help
- this.getHelpXML = function () {
-
- var examples = new Array();
- // add regexps
- for (var i = 0; i < color_defs.length; i++) {
- var example = color_defs[i].example;
- for (var j = 0; j < example.length; j++) {
- examples[examples.length] = example[j];
- }
- }
- // add type-in colors
- for (var sc in simple_colors) {
- examples[examples.length] = sc;
- }
-
- var xml = document.createElement('ul');
- xml.setAttribute('id', 'rgbcolor-examples');
- for (var i = 0; i < examples.length; i++) {
- try {
- var list_item = document.createElement('li');
- var list_color = new RGBColor(examples[i]);
- var example_div = document.createElement('div');
- example_div.style.cssText =
- 'margin: 3px; '
- + 'border: 1px solid black; '
- + 'background:' + list_color.toHex() + '; '
- + 'color:' + list_color.toHex()
- ;
- example_div.appendChild(document.createTextNode('test'));
- var list_item_value = document.createTextNode(
- ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()
- );
- list_item.appendChild(example_div);
- list_item.appendChild(list_item_value);
- xml.appendChild(list_item);
-
- } catch(e){}
- }
- return xml;
-
- }
-
-}
-
diff --git a/src/json_getter.py b/src/json_getter.py
deleted file mode 100644
index 684f03c..0000000
--- a/src/json_getter.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# -*- coding: utf-8 -*-
-from twms import projections
-from libkomapnik import pixel_size_at_zoom
-import json
-import psycopg2
-from mapcss import MapCSS
-import cgi
-import os
-import sys
-reload(sys)
-sys.setdefaultencoding("utf-8") # a hack to support UTF-8
-
-try:
- import psyco
- psyco.full()
-except ImportError:
- pass
- # print >>sys.stderr, "Psyco import failed. Program may run slower. If you run it on i386 machine, please install Psyco to get best performance."
-
-
-def get_vectors(bbox, zoom, style, vec="polygon"):
- bbox_p = projections.from4326(bbox, "EPSG:3857")
- geomcolumn = "way"
-
- database = "dbname=gis user=gis"
- pxtolerance = 1.8
- intscalefactor = 10000
- ignore_columns = set(["way_area", "osm_id", geomcolumn, "tags", "z_order"])
- table = {"polygon": "planet_osm_polygon", "line": "planet_osm_line", "point": "planet_osm_point", "coastline": "coastlines"}
-
- a = psycopg2.connect(database)
- b = a.cursor()
- if vec != "coastline":
- b.execute("SELECT * FROM %s LIMIT 1;" % table[vec])
- names = [q[0] for q in b.description]
- for i in ignore_columns:
- if i in names:
- names.remove(i)
- names = ",".join(['"' + i + '"' for i in names])
-
- taghint = "*"
- types = {"line": "line", "polygon": "area", "point": "node"}
- adp = ""
- if "get_sql_hints" in dir(style):
- sql_hint = style.get_sql_hints(types[vec], zoom)
- adp = []
- for tp in sql_hint:
- add = []
- for j in tp[0]:
- if j not in names:
- break
- else:
- add.append(tp[1])
- if add:
- add = " OR ".join(add)
- add = "(" + add + ")"
- adp.append(add)
- adp = " OR ".join(adp)
- if adp:
- adp = adp.replace("<", "<")
- adp = adp.replace(">", ">")
-
- if vec == "polygon":
- query = """select ST_AsGeoJSON(ST_TransScale(ST_ForceRHR(ST_Intersection(way,SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913))),%s,%s,%s,%s),0) as %s,
- ST_AsGeoJSON(ST_TransScale(ST_ForceRHR(ST_PointOnSurface(way)),%s,%s,%s,%s),0) as reprpoint, %s from
- (select (ST_Dump(ST_Multi(ST_SimplifyPreserveTopology(ST_Buffer(way,-%s),%s)))).geom as %s, %s from
- (select ST_Union(way) as %s, %s from
- (select ST_Buffer(way, %s) as %s, %s from
- %s
- where (%s)
- and way && SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913)
- and way_area > %s
- ) p
- group by %s
- ) p
- where ST_Area(way) > %s
- order by ST_Area(way)
- ) p
- """ % (bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
- -bbox_p[0], -bbox_p[1], intscalefactor / (bbox_p[2] - bbox_p[0]), intscalefactor / (bbox_p[3] - bbox_p[1]),
- geomcolumn,
- -bbox_p[0], -bbox_p[1], intscalefactor / (bbox_p[2] - bbox_p[0]), intscalefactor / (bbox_p[3] - bbox_p[1]),
- names,
- pixel_size_at_zoom(zoom, pxtolerance), pixel_size_at_zoom(zoom, pxtolerance),
- geomcolumn, names,
- geomcolumn, names,
- pixel_size_at_zoom(zoom, pxtolerance),
- geomcolumn, names,
- table[vec],
- adp,
- bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
- (pixel_size_at_zoom(zoom, pxtolerance) ** 2) / pxtolerance,
- names,
- pixel_size_at_zoom(zoom, pxtolerance) ** 2
- )
- elif vec == "line":
- query = """select ST_AsGeoJSON(ST_TransScale(ST_Intersection(way,SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913)),%s,%s,%s,%s),0) as %s, %s from
- (select (ST_Dump(ST_Multi(ST_SimplifyPreserveTopology(ST_LineMerge(way),%s)))).geom as %s, %s from
- (select ST_Union(way) as %s, %s from
- %s
- where (%s)
- and way && SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913)
-
- group by %s
- ) p
-
- ) p
- """ % (bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
- -bbox_p[0], -bbox_p[1], intscalefactor / (bbox_p[2] - bbox_p[0]), intscalefactor / (bbox_p[3] - bbox_p[1]),
- geomcolumn, names,
- pixel_size_at_zoom(zoom, pxtolerance),
- geomcolumn, names,
- geomcolumn, names,
- table[vec],
- adp,
- bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
-
- names,
-
- )
- elif vec == "point":
- query = """select ST_AsGeoJSON(ST_TransScale(way,%s,%s,%s,%s),0) as %s, %s
- from %s where
- (%s)
- and way && SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913)
- limit 10000
- """ % (
- -bbox_p[0], -bbox_p[1], intscalefactor / (bbox_p[2] - bbox_p[0]), intscalefactor / (bbox_p[3] - bbox_p[1]),
- geomcolumn, names,
- table[vec],
- adp,
- bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
-
- )
- elif vec == "coastline":
- query = """select ST_AsGeoJSON(ST_TransScale(ST_ForceRHR(ST_Intersection(way,SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913))),%s,%s,%s,%s),0) as %s, 'coastline' as "natural" from
- (select (ST_Dump(ST_Multi(ST_SimplifyPreserveTopology(ST_Buffer(way,-%s),%s)))).geom as %s from
- (select ST_Union(way) as %s from
- (select ST_Buffer(SetSRID(the_geom,900913), %s) as %s from
- %s
- where
- SetSRID(the_geom,900913) && SetSRID('BOX3D(%s %s,%s %s)'::box3d,900913)
- ) p
- ) p
- where ST_Area(way) > %s
- ) p
- """ % (bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
- -bbox_p[0], -bbox_p[1], intscalefactor / (bbox_p[2] - bbox_p[0]), intscalefactor / (bbox_p[3] - bbox_p[1]),
- geomcolumn,
- pixel_size_at_zoom(zoom, pxtolerance), pixel_size_at_zoom(zoom, pxtolerance),
- geomcolumn,
- geomcolumn,
- pixel_size_at_zoom(zoom, pxtolerance),
- geomcolumn,
- table[vec],
- bbox_p[0], bbox_p[1], bbox_p[2], bbox_p[3],
- pixel_size_at_zoom(zoom, pxtolerance) ** 2
- )
- # print query
- a = psycopg2.connect(database)
- b = a.cursor()
- b.execute(query)
- names = [q[0] for q in b.description]
-
- ROWS_FETCHED = 0
- polygons = []
-
- for row in b.fetchall():
- ROWS_FETCHED += 1
- geom = dict(map(None, names, row))
- for t in geom.keys():
- if not geom[t]:
- del geom[t]
- geojson = json.loads(geom[geomcolumn])
- del geom[geomcolumn]
- if geojson["type"] == "GeometryCollection":
- continue
- if "reprpoint" in geom:
- geojson["reprpoint"] = json.loads(geom["reprpoint"])["coordinates"]
- del geom["reprpoint"]
- prop = {}
- for k, v in geom.iteritems():
- prop[k] = v
- try:
- if int(v) == float(v):
- prop[k] = int(v)
- else:
- prop[k] = float(v)
- if str(prop[k]) != v: # leading zeros etc.. should be saved
- prop[k] = v
- except:
- pass
- geojson["properties"] = prop
- polygons.append(geojson)
- return {"bbox": bbox, "granularity": intscalefactor, "features": polygons}
-
-
-print "Content-Type: text/html"
-print
-
-form = cgi.FieldStorage()
-if "z" not in form:
- print "need z"
- exit()
-if "x" not in form:
- print "need x"
- exit()
-if "y" not in form:
- print "need y"
- exit()
-z = int(form["z"].value)
-x = int(form["x"].value)
-y = int(form["y"].value)
-if z > 22:
- exit()
-callback = "onKothicDataResponse"
-
-bbox = projections.bbox_by_tile(z + 1, x, y, "EPSG:3857")
-
-style = MapCSS(0, 30)
-style.parse(open("styles/osmosnimki-maps.mapcss", "r").read())
-zoom = z + 2
-aaaa = get_vectors(bbox, zoom, style, "coastline")
-aaaa["features"].extend(get_vectors(bbox, zoom, style, "polygon")["features"])
-aaaa["features"].extend(get_vectors(bbox, zoom, style, "line")["features"])
-aaaa["features"].extend(get_vectors(bbox, zoom, style, "point")["features"])
-
-aaaa = callback + "(" + json.dumps(aaaa, True, False, separators=(',', ':')) + ",%s,%s,%s);" % (z, x, y)
-print aaaa
-
-dir = "/var/www/vtile/%s/%s/" % (z, x)
-file = "%s.js" % y
-
-try:
- if not os.path.exists(dir):
- os.makedirs(dir)
-except:
- pass
-
-file = open(dir + file, "w")
-file.write(aaaa)
-file.flush()
-file.close()
diff --git a/src/komap.conf b/src/komap.conf
deleted file mode 100644
index 6a2bace..0000000
--- a/src/komap.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-[mapnik]
-map_proj = +init=epsg:3857
-db_proj = +init=epsg:3857
-table_prefix = planet_osm_
-db_user = gis
-db_name = gis
-db_srid = 900913
-icons_path = /home/gis/mapnik/kosmo/icons/
-world_bnd_path = /home/gis/mapnik/world_boundaries/
-cleantopo_dem_path = /raid/srtm/Full/CleanTOPO2merc.tif
-srtm_dem_path = /raid/srtm/srtmm.vrt
-cleantopo_hs_path = /raid/srtm/Full/CleanTOPO2merchs.tif
-srtm_hs_path = /raid/srtm/srtmhs.vrt
-default_font_family = DejaVu Sans Book
-max_char_angle_delta = 17
-font_tracking = 0
\ No newline at end of file
diff --git a/src/komap.py b/src/komap.py
deleted file mode 100755
index 8d14e52..0000000
--- a/src/komap.py
+++ /dev/null
@@ -1,895 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-from debug import debug, Timer
-from mapcss import MapCSS
-
-import gc
-gc.disable()
-
-import mapcss.webcolors
-whatever_to_hex = mapcss.webcolors.webcolors.whatever_to_hex
-
-import sys
-reload(sys)
-sys.setdefaultencoding("utf-8")
-
-import os
-
-try:
- import Image
-except ImportError:
- pass
-
-from optparse import OptionParser
-import ConfigParser
-import csv
-import math
-
-config = ConfigParser.ConfigParser()
-
-
-def relaxedFloat(x):
- try:
- return float(x) if int(float(x)) != float(x) else int(x)
-
- except ValueError:
- return float(str(x).replace(",", "."))
-
-parser = OptionParser()
-parser.add_option("-r", "--renderer", dest="renderer", default="mapnik",
- help="which renderer stylesheet to generate", metavar="ENGINE")
-parser.add_option("-s", "--stylesheet", dest="filename",
- help="read MapCSS stylesheet from FILE", metavar="FILE")
-parser.add_option("-f", "--minzoom", dest="minzoom", default=0, type="int",
- help="minimal available zoom level", metavar="ZOOM")
-parser.add_option("-t", "--maxzoom", dest="maxzoom", default=19, type="int",
- help="maximal available zoom level", metavar="ZOOM")
-parser.add_option("-l", "--locale", dest="locale",
- help="language that should be used for labels (ru, en, be, uk..)", metavar="LANG")
-parser.add_option("-o", "--output-file", dest="outfile", default="-",
- help="output filename (defaults to stdout)", metavar="FILE")
-parser.add_option("-p", "--osm2pgsql-style", dest="osm2pgsqlstyle", default="-",
- help="osm2pgsql stylesheet filename", metavar="FILE")
-parser.add_option("-b", "--background-only", dest="bgonly", action="store_true", default=False,
- help="Skip rendering of icons and labels", metavar="BOOL")
-parser.add_option("-T", "--text-scale", dest="textscale", default=1, type="float",
- help="text size scale", metavar="SCALE")
-parser.add_option("-c", "--config", dest="conffile", default="komap.conf",
- help="config file name", metavar="FILE")
-
-(options, args) = parser.parse_args()
-
-if (options.filename is None):
- parser.error("MapCSS stylesheet filename is required")
-
-
-def escape_sql_column(name, type="way", asname=False):
- if name in mapped_cols:
- return name # already escaped
- name = name.strip().strip('"')
- type = {'line': 'way', 'area': 'way'}.get(type, type)
- if type in osm2pgsql_avail_keys.get(name, ()) or not osm2pgsql_avail_keys:
- return '"' + name + '"'
- elif not asname:
- return "(tags->'" + name + "')"
- else:
- return "(tags->'" + name + "') as \"" + name + '"'
-
-style = MapCSS(options.minzoom, options.maxzoom + 1) # zoom levels
-style.parse(filename = options.filename)
-
-if options.renderer == "mapswithme":
- from libkomwm import *
- komap_mapswithme(options, style, options.filename)
- exit()
-
-if options.outfile == "-":
- mfile = sys.stdout
-else:
- mfile = open(options.outfile, "w")
-
-if options.renderer == "js":
- from libkojs import *
- komap_js(mfile, style)
-
-if options.renderer == "mapnik":
- import libkomapnik
-
- config.read(['komap.conf', os.path.expanduser('~/.komap/komap.conf'), options.conffile])
- libkomapnik.map_proj = config.get("mapnik", "map_proj")
- libkomapnik.db_proj = config.get("mapnik", "db_proj")
- libkomapnik.table_prefix = config.get("mapnik", "table_prefix")
- libkomapnik.db_user = config.get("mapnik", "db_user")
- libkomapnik.db_name = config.get("mapnik", "db_name")
- libkomapnik.db_srid = config.get("mapnik", "db_srid")
- libkomapnik.icons_path = config.get("mapnik", "icons_path")
- libkomapnik.world_bnd_path = config.get("mapnik", "world_bnd_path")
- libkomapnik.cleantopo_dem_path = config.get("mapnik", "cleantopo_dem_path")
- libkomapnik.srtm_dem_path = config.get("mapnik", "srtm_dem_path")
- libkomapnik.cleantopo_hs_path = config.get("mapnik", "cleantopo_hs_path")
- libkomapnik.srtm_hs_path = config.get("mapnik", "srtm_hs_path")
- libkomapnik.text_scale = options.textscale
- libkomapnik.default_font_family = config.get("mapnik", "default_font_family")
- libkomapnik.max_char_angle_delta = config.get("mapnik", "max_char_angle_delta")
- libkomapnik.font_tracking = config.get("mapnik", "font_tracking")
-
- from libkomapnik import *
-
- osm2pgsql_avail_keys = {} # "column" : ["node", "way"]
- if options.osm2pgsqlstyle != "-":
- mf = open(options.osm2pgsqlstyle, "r")
- for line in mf:
- line = line.strip().split()
- if line and line[0][0] != "#" and not ("phstore" in line):
- osm2pgsql_avail_keys[line[1]] = tuple(line[0].split(","))
- osm2pgsql_avail_keys["tags"] = ("node", "way")
-
- columnmap = {}
-
- if options.locale == "en":
- columnmap["name"] = (u"""COALESCE(
- "name:en",
- "int_name",
- replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace
- (replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace
- (replace(replace
- (replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(translate("name:be",'АБВГДЖЗІЙКЛМНОПРСТУЎФЦЧШЫЭабвгджзійклмнопрстуўфцчшыэ', 'ABVHDŽZIJKLMNOPRSTUŬFСČŠYEabvhdžzijklmnoprstuŭfсčšye'), 'х', 'ch'), 'Х', 'Ch'), 'BЕ', 'BIe'), 'BЁ', 'BIo'), 'BЮ', 'BIu'), 'BЯ', 'BIa'), 'Bе', 'Bie'), 'Bё', 'Bio'), 'Bю', 'Biu'), 'Bя', 'Bia'), 'VЕ', 'VIe'), 'VЁ', 'VIo'), 'VЮ', 'VIu'), 'VЯ', 'VIa'), 'Vе', 'Vie'), 'Vё', 'Vio'), 'Vю', 'Viu'), 'Vя', 'Via'), 'HЕ',
- 'HIe'), 'HЁ',
- 'HIo'), 'HЮ', 'HIu'), 'HЯ', 'HIa'), 'Hе', 'Hie'), 'Hё', 'Hio'), 'Hю', 'Hiu'), 'Hя', 'Hia'), 'DЕ', 'DIe'), 'DЁ', 'DIo'), 'DЮ', 'DIu'), 'DЯ', 'DIa'), 'Dе', 'Die'), 'Dё', 'Dio'), 'Dю', 'Diu'), 'Dя', 'Dia'), 'ŽЕ', 'ŽIe'), 'ŽЁ', 'ŽIo'), 'ŽЮ', 'ŽIu'), 'ŽЯ', 'ŽIa'), 'Žе', 'Žie'), 'Žё', 'Žio'), 'Žю', 'Žiu'), 'Žя', 'Žia'), 'ZЕ', 'ZIe'), 'ZЁ', 'ZIo'), 'ZЮ', 'ZIu'), 'ZЯ', 'ZIa'), 'Zе', 'Zie'), 'Zё', 'Zio'), 'Zю', 'Ziu'), 'Zя', 'Zia'), 'JЕ', 'JIe'), 'JЁ', 'JIo'), 'JЮ', 'JIu'), 'JЯ', 'JIa'), 'Jе', 'Jie'), 'Jё', 'Jio'), 'Jю', 'Jiu'),
- 'Jя', 'Jia'), 'КЕ', 'КIe'), 'КЁ', 'КIo'), 'КЮ', 'КIu'), 'КЯ', 'КIa'), 'Ке', 'Кie'), 'Кё', 'Кio'), 'Кю', 'Кiu'), 'Кя', 'Кia'), 'LЕ', 'LIe'), 'LЁ', 'LIo'), 'LЮ', 'LIu'), 'LЯ', 'LIa'), 'Lе', 'Lie'), 'Lё', 'Lio'), 'Lю', 'Liu'), 'Lя', 'Lia'), 'MЕ', 'MIe'), 'MЁ', 'MIo'), 'MЮ', 'MIu'), 'MЯ', 'MIa'), 'Mе', 'Mie'), 'Mё', 'Mio'), 'Mю', 'Miu'), 'Mя', 'Mia'), 'NЕ', 'NIe'), 'NЁ', 'NIo'), 'NЮ', 'NIu'), 'NЯ', 'NIa'), 'Nе', 'Nie'), 'Nё', 'Nio'), 'Nю', 'Niu'), 'Nя', 'Nia'), 'PЕ', 'PIe'), 'PЁ', 'PIo'), 'PЮ',
- 'PIu'), 'PЯ', 'PIa'), 'Pе', 'Pie'), 'Pё', 'Pio'), 'Pю', 'Piu'), 'Pя', 'Pia'), 'RЕ', 'RIe'), 'RЁ', 'RIo'), 'RЮ', 'RIu'), 'RЯ', 'RIa'), 'Rе', 'Rie'), 'Rё', 'Rio'), 'Rю', 'Riu'), 'Rя', 'Ria'), 'SЕ', 'SIe'), 'SЁ', 'SIo'), 'SЮ', 'SIu'), 'SЯ', 'SIa'), 'Sе', 'Sie'), 'Sё', 'Sio'), 'Sю', 'Siu'), 'Sя', 'Sia'), 'TЕ', 'TIe'), 'TЁ', 'TIo'), 'TЮ', 'TIu'), 'TЯ', 'TIa'), 'Tе', 'Tie'), 'Tё', 'Tio'), 'Tю', 'Tiu'), 'Tя', 'Tia'), 'ŬЕ', 'ŬIe'), 'ŬЁ', 'ŬIo'), 'ŬЮ', 'ŬIu'), 'ŬЯ', 'ŬIa'), 'Ŭе', 'Ŭie'), 'Ŭё', 'Ŭio'), 'Ŭю', 'Ŭiu'), 'Ŭя', 'Ŭia'), 'FЕ', 'FIe'), 'FЁ', 'FIo'), 'FЮ', 'FIu'), 'FЯ', 'FIa'), 'Fе', 'Fie'), 'Fё', 'Fio'), 'Fю', 'Fiu'), 'Fя', 'Fia'), 'СЕ', 'СIe'), 'СЁ', 'СIo'), 'СЮ', 'СIu'),
- 'СЯ', 'СIa'), 'Се', 'Сie'), 'Сё', 'Сio'), 'Сю', 'Сiu'), 'Ся', 'Сia'), 'ČЕ', 'ČIe'), 'ČЁ', 'ČIo'), 'ČЮ', 'ČIu'), 'ČЯ', 'ČIa'), 'Čе', 'Čie'), 'Čё', 'Čio'), 'Čю', 'Čiu'), 'Čя', 'Čia'), 'ŠЕ', 'ŠIe'), 'ŠЁ', 'ŠIo'), 'ŠЮ', 'ŠIu'), 'ŠЯ', 'ŠIa'), 'Šе', 'Šie'), 'Šё', 'Šio'), 'Šю', 'Šiu'), 'Šя', 'Šia'), 'bЕ', 'bIe'), 'bЁ', 'bIo'), 'bЮ', 'bIu'), 'bЯ',
- 'bIa'), 'bе', 'bie'), 'bё', 'bio'), 'bю', 'biu'), 'bя', 'bia'), 'vЕ', 'vIe'), 'vЁ', 'vIo'), 'vЮ', 'vIu'), 'vЯ', 'vIa'), 'vе', 'vie'), 'vё', 'vio'), 'vю', 'viu'), 'vя', 'via'), 'hЕ', 'hIe'), 'hЁ', 'hIo'), 'hЮ', 'hIu'), 'hЯ', 'hIa'), 'hе', 'hie'), 'hё', 'hio'), 'hю', 'hiu'), 'hя', 'hia'), 'dЕ', 'dIe'), 'dЁ', 'dIo'), 'dЮ', 'dIu'), 'dЯ', 'dIa'), 'dе', 'die'), 'dё', 'dio'), 'dю', 'diu'), 'dя', 'dia'), 'žЕ', 'žIe'), 'žЁ', 'žIo'), 'žЮ', 'žIu'), 'žЯ', 'žIa'), 'žе', 'žie'), 'žё', 'žio'), 'žю', 'žiu'), 'žя', 'žia'), 'zЕ', 'zIe'), 'zЁ', 'zIo'), 'zЮ', 'zIu'), 'zЯ', 'zIa'), 'zе', 'zie'), 'zё', 'zio'), 'zю', 'ziu'), 'zя', 'zia'), 'jЕ', 'jIe'), 'jЁ', 'jIo'), 'jЮ', 'jIu'), 'jЯ', 'jIa'), 'jе', 'jie'), 'jё', 'jio'), 'jю', 'jiu'), 'jя', 'jia'), 'кЕ', 'кIe'), 'кЁ', 'кIo'), 'кЮ', 'кIu'), 'кЯ', 'кIa'), 'ке', 'кie'), 'кё', 'кio'), 'кю', 'кiu'), 'кя', 'кia'), 'lЕ', 'lIe'),
- 'lЁ', 'lIo'), 'lЮ', 'lIu'), 'lЯ', 'lIa'), 'lе', 'lie'), 'lё', 'lio'), 'lю', 'liu'), 'lя', 'lia'), 'mЕ', 'mIe'), 'mЁ', 'mIo'), 'mЮ', 'mIu'), 'mЯ', 'mIa'), 'mе', 'mie'), 'mё', 'mio'), 'mю', 'miu'), 'mя', 'mia'), 'nЕ', 'nIe'), 'nЁ', 'nIo'), 'nЮ', 'nIu'), 'nЯ', 'nIa'), 'nе', 'nie'), 'nё', 'nio'), 'nю', 'niu'), 'nя', 'nia'), 'pЕ', 'pIe'), 'pЁ', 'pIo'), 'pЮ', 'pIu'), 'pЯ', 'pIa'), 'pе', 'pie'), 'pё', 'pio'), 'pю', 'piu'), 'pя', 'pia'), 'rЕ', 'rIe'), 'rЁ', 'rIo'), 'rЮ', 'rIu'), 'rЯ', 'rIa'), 'rе', 'rie'), 'rё', 'rio'), 'rю', 'riu'), 'rя', 'ria'), 'sЕ', 'sIe'), 'sЁ',
- 'sIo'), 'sЮ', 'sIu'), 'sЯ', 'sIa'), 'sе', 'sie'), 'sё', 'sio'), 'sю', 'siu'), 'sя', 'sia'), 'tЕ', 'tIe'), 'tЁ', 'tIo'), 'tЮ', 'tIu'), 'tЯ', 'tIa'), 'tе', 'tie'), 'tё', 'tio'), 'tю', 'tiu'), 'tя', 'tia'), 'ŭЕ', 'ŭIe'), 'ŭЁ', 'ŭIo'), 'ŭЮ', 'ŭIu'), 'ŭЯ', 'ŭIa'), 'ŭе', 'ŭie'), 'ŭё', 'ŭio'), 'ŭю', 'ŭiu'), 'ŭя', 'ŭia'), 'fЕ', 'fIe'), 'fЁ', 'fIo'), 'fЮ', 'fIu'), 'fЯ', 'fIa'), 'fе', 'fie'), 'fё', 'fio'), 'fю', 'fiu'), 'fя', 'fia'), 'сЕ', 'сIe'), 'сЁ', 'сIo'), 'сЮ', 'сIu'), 'сЯ', 'сIa'), 'се', 'сie'), 'сё', 'сio'), 'сю', 'сiu'), 'ся', 'сia'), 'čЕ', 'čIe'), 'čЁ', 'čIo'), 'čЮ', 'čIu'), 'čЯ', 'čIa'), 'čе', 'čie'), 'čё',
- 'čio'), 'čю', 'čiu'), 'čя', 'čia'), 'šЕ', 'šIe'), 'šЁ', 'šIo'), 'šЮ', 'šIu'), 'šЯ', 'šIa'), 'šе', 'šie'), 'šё', 'šio'), 'šю', 'šiu'), 'šя', 'šia'), 'Е', 'Je'), 'Ё', 'Jo'), 'Ю', 'Ju'), 'Я', 'Ja'), 'е', 'je'), 'ё', 'jo'), 'ю', 'ju'), 'я', 'ja'), 'Ь', '\u0301'), 'ь', '\u0301'),'’', ''),
- replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(translate("name",'абвгдезиклмнопрстуфьАБВГДЕЗИКЛМНОПРСТУФЬ','abvgdeziklmnoprstuf’ABVGDEZIKLMNOPRSTUF’'),'х','kh'),'Х','Kh'),'ц','ts'),'Ц','Ts'),'ч','ch'),'Ч','Ch'),'ш','sh'),'Ш','Sh'),'щ','shch'),'Щ','Shch'),'ъ','”'),'Ъ','”'),'ё','yo'),'Ё','Yo'),'ы','y'),'Ы','Y'),'э','·e'),'Э','E'),'ю','yu'),'Ю','Yu'),'й','y'),'Й','Y'),'я','ya'),'Я','Ya'),'ж','zh'),'Ж','Zh')) AS name""", ('name:en', 'int_name', 'name:be'))
-
- elif options.locale == "be":
- columnmap["name"] = ("""COALESCE("name:be",
- "name:ru",
- "int_name",
- "name:en",
- "name"
- ) AS name""", ('name:be', "name:ru", "int_name", "name:en"))
- elif options.locale and ("name:" + options.locale in osm2pgsql_avail_keys or not osm2pgsql_avail_keys):
- columnmap["name"] = ('COALESCE("name:' + options.locale + '", "name") AS name', ('name:' + options.locale,))
- elif options.locale:
- columnmap["name"] = ("COALESCE(tags->'name:" + options.locale + '\', "name") AS name', ('tags',))
-
- mapped_cols = [i[0] for i in columnmap.values()]
- numerics = set() # set of number-compared things, like "population<10000" needs population as number, not text
- mapniksheet = {}
-
- # {zoom: {z-index: [{sql:sql_hint, cond: mapnikfiltercondition, subject: subj, style: {a:b,c:d..}},{r2}...]...}...}
- coast = {}
- fonts = set()
- demhack = False
- for zoom in xrange(options.minzoom, options.maxzoom + 1):
- mapniksheet[zoom] = {}
- zsheet = mapniksheet[zoom]
- for chooser in style.choosers:
- if chooser.get_sql_hints(chooser.ruleChains[0].subject, zoom)[1]:
- # sys.stderr.write(str(chooser.get_sql_hints(chooser.ruleChains[0][0].subject, zoom)[1])+"\n")
- styles = chooser.styles[0]
- zindex = styles.get("z-index", 0)
- if zindex not in zsheet:
- zsheet[zindex] = []
- chooser_entry = {}
-
- ttypes = list(set([x.subject for x in chooser.ruleChains]))
-
- sql = "(" + chooser.get_sql_hints(chooser.ruleChains[0].subject, zoom)[1] + ")"
- sql = sql.split('"')
- sq = ""
- odd = True
- for i in sql:
- if not odd:
- sq += escape_sql_column(i)
- else:
- sq += i
- odd = not odd
-
- chooser_entry["sql"] = sq
- chooser_entry["style"] = styles
- fonts.add(styles.get("font-family", libkomapnik.default_font_family))
-
- chooser_entry["rule"] = [i.conditions for i in chooser.ruleChains if i.test_zoom(zoom)]
- numerics.update(chooser.get_numerics())
- # print chooser_entry["rule"]
- chooser_entry["rulestring"] = " or ".join(["(" + " and ".join([i.get_mapnik_filter() for i in rule if i.get_mapnik_filter()]) + ")" for rule in chooser_entry["rule"]])
- chooser_entry["chooser"] = chooser
- for ttype in ttypes:
- if ttype == "ele":
- demhack = True
- if ttype == "area" and "[natural] = 'coastline'" in chooser_entry["rulestring"]:
- coast[zoom] = chooser_entry["style"]
- else:
- che = chooser_entry.copy()
- che["type"] = ttype
- zsheet[zindex].append(che)
-
- # sys.stderr.write(str(numerics)+"\n")
- # print mapniksheet
-
- def add_numerics_to_itags(itags, escape=True):
- tt = set()
- nitags = set()
- if escape:
- escape = escape_sql_column
- else:
- def escape(i, asname=False):
- if i in mapped_cols:
- return i # already escaped
- return '"' + i + '"'
- for i in itags:
- if i in numerics:
- tt.add("""(CASE WHEN %s ~ E'^[[:digit:]]+([.][[:digit:]]+)?$' THEN CAST (%s AS FLOAT) ELSE NULL END) as %s__num""" % (escape(i), escape(i), i))
- nitags.add(escape(i, asname=True))
- itags = nitags
- itags.update(tt)
- return itags
-
- bgcolor = style.get_style("canvas", {}, options.maxzoom + 1)[0].get("fill-color", "")
- opacity = style.get_style("canvas", {}, options.maxzoom + 1)[0].get("opacity", 1)
- hshack = style.get_style("canvas", {}, options.maxzoom + 1)[0].get("-x-kot-hs-hack", False)
-
- if (opacity == 1) and bgcolor:
- mfile.write(xml_start(bgcolor))
- else:
- mfile.write(xml_start("transparent"))
-
- conf_full_layering = style.get_style("canvas", {}, options.maxzoom + 1)[0].get("-x-kot-true-layers", "true").lower() == 'true'
-
- for font in fonts:
- mfile.write(xml_fontset(font, True))
-
- for zoom, zsheet in mapniksheet.iteritems():
- x_scale = xml_scaledenominator(zoom)
- ta = zsheet.keys()
- ta.sort(key=float)
- demcolors = {}
- demramp = {"ground": "", "ocean": ""}
-
- if demhack:
- for zindex in ta:
- for entry in zsheet[zindex]:
- if entry["type"] in ("ele",):
- ele = int(entry["rule"][0][0].params[0])
- demcolors[ele] = (whatever_to_hex(entry["style"].get('fill-color', '#ffffff')), entry["style"].get('fill-opacity', '1'))
- dk = demcolors.keys()
- dk.sort()
- for ele in dk:
- (color, opacity) = demcolors[ele]
- demramp["ocean"] += '' % (ele + 10701, int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16), opacity)
- demramp["ground"] += '' % (ele, int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16), opacity)
-
- if demhack and zoom >= 7:
- xml = xml_cleantopo(zoom, x_scale, demramp["ocean"])
- mfile.write(xml)
- if zoom in coast:
- xml = xml_style_start()
- xml += xml_rule_start()
- xml += x_scale
- if "fill-color" in coast[zoom]:
- xml += xml_polygonsymbolizer(coast[zoom].get("fill-color", "#ffffff"), relaxedFloat(coast[zoom].get("fill-opacity", "1")), relaxedFloat(coast[zoom].get("smooth", "0")))
- if "fill-image" in coast[zoom]:
- xml += xml_polygonpatternsymbolizer(coast[zoom].get("fill-image", ""))
- xml += xml_rule_end()
- xml += xml_style_end()
- xml += xml_layer("coast", zoom=zoom)
- mfile.write(xml)
-
- if demhack and zoom < 7:
- xml = xml_cleantopo(zoom, x_scale, demramp["ocean"])
- mfile.write(xml)
-
- if demhack and zoom >= 7:
- xml = xml_srtm(zoom, x_scale, demramp["ground"])
- mfile.write(xml)
-
- sql_g = set()
- there_are_dashed_lines = False
- itags_g = set()
- xml_g = ""
- for zindex in ta:
- ## background areas pass
- sql = set()
- itags = set()
- xml = xml_style_start()
- for entry in zsheet[zindex]:
- if entry["type"] in ("way", "area", "polygon"):
- if ("fill-color" in entry["style"] or "fill-image" in entry["style"]) and (entry["style"].get("fill-position", "foreground") == "background"):
- xml += xml_rule_start()
- xml += x_scale
- xml += xml_filter(entry["rulestring"])
- if "fill-color" in entry["style"]:
- xml += xml_polygonsymbolizer(entry["style"].get("fill-color", "black"), relaxedFloat(entry["style"].get("fill-opacity", "1")), relaxedFloat(entry["style"].get("smooth", "0")))
- if "fill-image" in entry["style"]:
- xml += xml_polygonpatternsymbolizer(entry["style"].get("fill-image", ""))
- sql.add(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
- xml += xml_style_end()
- sql.discard("()")
- if sql:
- sql_g.update(sql)
- xml_g += xml
- itags_g.update(itags)
- else:
- xml_nosubstyle()
- sql = sql_g
- itags = itags_g
- if sql:
- mfile.write(xml_g)
- sql = "(" + " OR ".join(sql) + ")" # and way && !bbox!"
- itags = add_numerics_to_itags(itags)
- mfile.write(xml_layer("postgis", "polygon", itags, sql, zoom=zoom))
- else:
- xml_nolayer()
-
- if hshack:
- xml = xml_hillshade(zoom, x_scale)
- mfile.write(xml)
-
- index_range = range(-6, 7)
- full_layering = conf_full_layering
- if (zoom < 9) or not conf_full_layering:
- index_range = (-6, 0, 6)
- full_layering = False
-
- def check_if_roads_table(rulestring):
- roads = set([
- "[highway] = 'secondary'",
- "[highway] = 'secondary_link'",
- "[highway] = 'primary'",
- "[highway] = 'primary_link'",
- "[highway] = 'trunk'",
- "[highway] = 'trunk_link'",
- "[highway] = 'motorway'",
- "[highway] = 'motorway_link'",
- "[boundary] = 'administrative'",
- "[railway] "
- ])
- for a in rulestring.split(') or ('):
- for r in roads:
- if r not in a:
- return False
- return True
- for zlayer in index_range:
- for layer_type, entry_types in [("line", ("way", "line")), ("polygon", ("way", "area"))]:
- sql_g = set()
- there_are_dashed_lines = False
- itags_g = set()
- xml_g = ""
- roads = (layer_type == 'line') # whether to use planet_osm_roads
- ## casings pass
- for zindex in ta:
- sql = set()
- itags = set()
- xml = xml_style_start()
- for entry in zsheet[zindex]:
- if entry["type"] in entry_types:
- if "-x-kot-layer" in entry["style"]:
- if zlayer != -6 and entry["style"]["-x-kot-layer"] == "bottom":
- continue
- if zlayer != 6 and entry["style"]["-x-kot-layer"] == "top":
- continue
- elif zlayer not in range(-5, 6):
- continue
- if "casing-width" in entry["style"]:
- xml += xml_rule_start()
- xml += x_scale
- xml += xml_filter(entry["rulestring"])
- if not check_if_roads_table(entry["rulestring"]):
- roads = False
- twidth = 2 * float(entry["style"].get("casing-width", 1)) + float(entry["style"].get("width", 0))
- tlinejoin = "round"
- if twidth < 3:
- tlinejoin = "miter"
- xml += xml_linesymbolizer(color=entry["style"].get("casing-color", "black"),
- width=twidth,
- opacity=relaxedFloat(entry["style"].get("casing-opacity", entry["style"].get("opacity", "1"))),
- linecap=entry["style"].get("casing-linecap", entry["style"].get("linecap", "butt")),
- linejoin=entry["style"].get("casing-linejoin", entry["style"].get("linejoin", "round")),
- dashes=entry["style"].get("casing-dashes", entry["style"].get("dashes", "")),
- smooth=relaxedFloat(entry["style"].get("smooth", "0")),
- zoom=zoom)
-
- sql.add(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
-
- xml += xml_style_end()
- sql.discard("()")
- if sql:
- sql_g.update(sql)
- xml_g += xml
- itags_g.update(itags)
- else:
- xml_nosubstyle()
-
- sql = sql_g
- itags = itags_g
- if sql:
- mfile.write(xml_g)
- sql = "(" + " OR ".join(sql) + ")" # and way && !bbox!"
- if zlayer == 0 and full_layering:
- sql = "(" + sql + ') and ("layer" not in (' + ", ".join(['\'%s\'' % i for i in range(-5, 6) if i != 0]) + ") or \"layer\" is NULL)"
- elif zlayer <= 5 and zlayer >= -5 and full_layering:
- sql = "(" + sql + ') and "layer" = \'%s\'' % zlayer
- itags = add_numerics_to_itags(itags)
- if roads:
- layer_type = 'roads'
- mfile.write(xml_layer("postgis", layer_type, itags, sql, zoom=zoom))
- else:
- xml_nolayer()
-
- for zindex in ta:
- for layer_type, entry_types in [("line", ("way", "line")), ("polygon", ("way", "area"))]:
- ## lines and polygons pass
- sql_g = set()
- there_are_dashed_lines = False
- there_are_line_patterns = False
- itags_g = set()
- roads = (layer_type == 'line') # whether to use planet_osm_roads
- xml_g = ""
-
- sql = set()
- itags = set()
- xml = xml_style_start()
- for entry in zsheet[zindex]:
- if entry["type"] in entry_types:
- if "-x-kot-layer" in entry["style"]:
- if zlayer != -6 and entry["style"]["-x-kot-layer"] == "bottom":
- continue
- if zlayer != 6 and entry["style"]["-x-kot-layer"] == "top":
- continue
- elif zlayer not in range(-5, 6):
- continue
- if "width" in entry["style"] or "pattern-image" in entry["style"] or (("fill-color" in entry["style"] or "fill-image" in entry["style"]) and (layer_type == "polygon") and (entry["style"].get("fill-position", "foreground") == "foreground")):
- xml += xml_rule_start()
- xml += x_scale
- xml += xml_filter(entry["rulestring"])
- if not check_if_roads_table(entry["rulestring"]):
- roads = False
- if layer_type == "polygon" and (entry["style"].get("fill-position", "foreground") == "foreground"):
- if "fill-color" in entry["style"]:
- xml += xml_polygonsymbolizer(entry["style"].get("fill-color", "black"), relaxedFloat(entry["style"].get("fill-opacity", "1")), relaxedFloat(entry["style"].get("smooth", "0")))
- if "fill-image" in entry["style"]:
- xml += xml_polygonpatternsymbolizer(entry["style"].get("fill-image", ""))
- if "width" in entry["style"]:
- twidth = relaxedFloat(entry["style"].get("width", "1"))
-
- # linejoins are round, but for thin roads they're miter
- tlinejoin = "round"
- if twidth <= 2:
- tlinejoin = "miter"
- tlinejoin = entry["style"].get("linejoin", tlinejoin)
-
- # linecaps are round for roads, and butts for roads on non-default layer=
- tlinecap = "round"
- if zlayer != 0:
- tlinecap = "butt"
- tlinecap = entry["style"].get("linecap", tlinecap)
-
- xml += xml_linesymbolizer(color=entry["style"].get("color", "black"),
- width=twidth,
- opacity=relaxedFloat(entry["style"].get("opacity", "1")),
- linecap=tlinecap,
- linejoin=tlinejoin,
- dashes=entry["style"].get("dashes", ""),
- smooth=relaxedFloat(entry["style"].get("smooth", "0")),
- zoom=zoom)
- if entry["style"].get("dashes", ""):
- there_are_dashed_lines = True
- # print "dashes!!!"
- if "pattern-image" in entry["style"]:
- there_are_line_patterns = True
- if entry["style"]["pattern-image"] == "arrows":
- xml += xml_hardcoded_arrows()
- else:
- if "pattern-rotate" in entry["style"] or "pattern-spacing" in entry["style"]:
- fname = entry["style"]["pattern-image"]
- try:
- im = Image.open(icons_path + fname).convert("RGBA")
- fname = "f" + fname
- if "pattern-rotate" in entry["style"]:
- im = im.rotate(relaxedFloat(entry["style"]["pattern-rotate"]))
- fname = "r" + str(relaxedFloat(entry["style"]["pattern-rotate"])) + fname
- if "pattern-scale" in entry["style"]:
- sc = relaxedFloat(entry["style"]["pattern-scale"]) * 1.
- ns = (max(int(round(im.size[0] * sc)), 1), max(int(round(im.size[1] * sc)), 1))
- im = im.resize(ns, Image.BILINEAR)
- fname = "z" + str(sc) + fname
- if "pattern-spacing" in entry["style"]:
- im2 = Image.new("RGBA", (im.size[0] + int(relaxedFloat(entry["style"]["pattern-spacing"])), im.size[1]))
- im2.paste(im, (0, 0))
- im = im2
- fname = "s" + str(int(relaxedFloat(entry["style"]["pattern-spacing"]))) + fname
- if not os.path.exists(icons_path + "komap/"):
- os.makedirs(icons_path + "komap/")
- if not os.path.exists(icons_path + "komap/" + fname):
- im.save(icons_path + "komap/" + fname, "PNG")
- xml += xml_linepatternsymbolizer("komap/" + fname)
- except:
- print >> sys.stderr, "Error writing to ", icons_path + "komap/" + fname
- else:
- if entry["style"].get("-x-kot-render", "none") == "svg":
- xml += xml_linemarkerssymbolizer(entry["style"]["pattern-image"], entry["style"].get("spacing","100"), entry["style"].get("allow-overlap","false"))
- else:
- xml += xml_linepatternsymbolizer(entry["style"]["pattern-image"])
- sql.add(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
-
- xml += xml_style_end()
- sql.discard("()")
- if sql:
- sql_g.update(sql)
- xml_g += xml
- itags_g.update(itags)
- else:
- xml_nosubstyle()
- sql = sql_g
- itags = itags_g
- if sql:
- mfile.write(xml_g)
- sql = "(" + " OR ".join(sql) + ")" # and way && !bbox!"
- if zlayer == 0 and full_layering:
- sql = "(" + sql + ') and ("layer" not in (' + ", ".join(['\'%s\'' % i for i in range(-5, 6) if i != 0]) + ") or \"layer\" is NULL)"
- elif zlayer <= 5 and zlayer >= -5 and full_layering:
- sql = "(" + sql + ') and "layer" = \'%s\'' % zlayer
- oitags = itags
- itags = add_numerics_to_itags(itags)
- if layer_type == "polygon" and there_are_line_patterns:
- itags = ", ".join(itags)
- oitags = '"' + "\", \"".join(oitags) + '"'
- sqlz = """SELECT %s, ST_ForceRHR(way) as way from %spolygon where (%s) and way && !bbox! and ST_IsValid(way)""" % (itags, libkomapnik.table_prefix , sql)
- mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz, zoom=zoom))
-
- #### FIXME: Performance degrades painfully on large lines ST_Union. Gotta find workaround :(
- # if layer_type == "polygon" and there_are_dashed_lines:
- # itags = ", ".join(itags)
- # oitags = '"'+ "\", \"".join(oitags) +'"'
- # sqlz = """select %s, ST_LineMerge(ST_Union(way)) as way from
- #(SELECT %s, ST_Boundary(way) as way from planet_osm_polygon where (%s) and way && !bbox! and ST_IsValid(way) ) tex
- # group by %s
- #"""%(itags,oitags,sql,oitags)
- elif layer_type == "line" and there_are_dashed_lines and zoom < 10:
- itags = ", ".join(itags) # FIXME: wrong when working with hstore
- oitags = '"' + "\", \"".join(oitags) + '"'
- sqlz = """select %s, ST_LineMerge(ST_Union(way)) as way from (SELECT %s, ST_SnapToGrid(way, %s) as way from %sline where way && !bbox! and (%s)) as tex
- group by %s
- """ % (oitags, itags, pixel_size_at_zoom(zoom, 1.5), libkomapnik.table_prefix, sql, oitags)
- mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz, zoom=zoom))
- else:
- if roads:
- layer_type = 'roads'
- mfile.write(xml_layer("postgis", layer_type, itags, sql, zoom=zoom))
- else:
- xml_nolayer()
-
- if not options.bgonly:
- ## icons pass
- sql_g = set()
- itags_g = set()
- xml_g = ""
- prevtype = ""
- for zindex in ta:
- for layer_type, entry_types in [("point", ("node", "point")), ("line", ("way", "line")), ("polygon", ("way", "area"))]:
- sql = set()
- itags = set()
- style_started = False
- for entry in zsheet[zindex]:
- if entry["type"] in entry_types:
- if "icon-image" in entry["style"]:
- if not prevtype:
- prevtype = layer_type
- if prevtype != layer_type:
- if sql_g:
- mfile.write(xml_g)
- sql_g = "(" + " OR ".join(sql_g) + ")" # and way && !bbox!"
- itags_g = add_numerics_to_itags(itags_g)
- mfile.write(xml_layer("postgis", prevtype, itags_g, sql_g, zoom=zoom))
- sql_g = set()
- itags_g = set()
- xml_g = ""
- sql = set()
- itags = set()
- else:
- xml_nolayer()
- prevtype = layer_type
- if not style_started:
- xml = xml_style_start()
- style_started = True
- xml += xml_rule_start()
- xml += x_scale
- xml += xml_filter(entry["rulestring"])
- xml += xml_pointsymbolizer(
- path=entry["style"].get("icon-image", ""),
- width=entry["style"].get("icon-width", ""),
- height=entry["style"].get("icon-height", ""),
- opacity=relaxedFloat(entry["style"].get("opacity", "1")))
- if ("text" in entry["style"] and entry["style"].get("text-position", "center") == 'center'):
- ttext = entry["style"]["text"].extract_tags().pop()
- sql.add("((" + entry["sql"] + ") and " + escape_sql_column(ttext) + " is NULL)")
- itags.add(ttext)
- if ttext in columnmap:
- itags.update(columnmap[ttext][1])
- else:
- sql.add(entry["sql"])
-
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
- if style_started:
- xml += xml_style_end()
- style_started = False
- sql.discard("()")
- if sql:
- sql_g.update(sql)
- xml_g += xml
- itags_g.update(itags)
- else:
- xml_nosubstyle()
- if sql_g:
- mfile.write(xml_g)
- sql_g = "(" + " OR ".join(sql_g) + ")" # and way && !bbox!"
- itags_g = add_numerics_to_itags(itags_g)
- mfile.write(xml_layer("postgis", prevtype, itags_g, sql_g, zoom=zoom))
- else:
- xml_nolayer()
-
- ta.reverse()
- for zindex in ta:
- for layer_type, entry_types in [("point", ("node", "point")), ("polygon", ("way", "area")), ("line", ("way", "line"))]:
- for placement in ("center", "line"):
- ## text pass
- collhere = set()
- for entry in zsheet[zindex]:
- if entry["type"] in entry_types: # , "node", "line", "point"):
- if ("text" in entry["style"] or "shield-text" in entry["style"]) and entry["style"].get("text-position", "center") == placement:
- csb = entry["style"].get("collision-sort-by", None)
- cso = entry["style"].get("collision-sort-order", "desc")
- collhere.add((csb, cso))
- for snap_to_street in ('true', 'false'):
- for (csb, cso) in collhere:
- sql = set()
- itags = set()
- texttags = set()
- xml = xml_style_start()
- for entry in zsheet[zindex]:
- if entry["type"] in entry_types and csb == entry["style"].get("collision-sort-by", None) and cso == entry["style"].get("collision-sort-order", "desc") and snap_to_street == entry["style"].get("-x-kot-snap-to-street", "false"):
- if "shield-text" in entry["style"] and "shield-image" in entry["style"]:
- ttext = entry["style"]["shield-text"].extract_tags().pop()
- texttags.add(ttext)
- tface = entry["style"].get("shield-font-family", libkomapnik.default_font_family)
- tsize = entry["style"].get("shield-font-size", "10")
- tcolor = entry["style"].get("shield-text-color", "#000000")
- toverlap = entry["style"].get("text-allow-overlap", entry["style"].get("allow-overlap", "false"))
- tdistance = relaxedFloat(entry["style"].get("-x-kot-min-distance", "20"))
- twrap = relaxedFloat(entry["style"].get("shield-max-width", 25))
- talign = entry["style"].get("shield-text-align", "center")
- topacity = relaxedFloat(entry["style"].get("shield-text-opacity", entry["style"].get("opacity", "1")))
- toffset = relaxedFloat(entry["style"].get("shield-text-offset", "0"))
- ttransform = entry["style"].get("shield-text-transform", "none")
- tspacing = entry["style"].get("shield-spacing", "500")
- xml += xml_rule_start()
- xml += x_scale
-
- xml += xml_filter(entry["rulestring"])
-
- xml += xml_shieldsymbolizer(
- entry["style"].get("shield-image", ""),
- "",
- "",
- ttext, tface, tsize, tcolor, "#000000", 0, "center",
- toffset, toverlap, tdistance, twrap, talign, topacity, ttransform, "false", tspacing)
- sql.add(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
-
- if "text" in entry["style"] and entry["style"].get("text-position", "center") == placement:
- ttext = entry["style"]["text"].extract_tags().pop()
- texttags.add(ttext)
- tface = entry["style"].get("font-family", libkomapnik.default_font_family)
- tsize = entry["style"].get("font-size", "10")
- tcolor = entry["style"].get("text-color", "#000000")
- thcolor = entry["style"].get("text-halo-color", "#ffffff")
- thradius = relaxedFloat(entry["style"].get("text-halo-radius", "0"))
- tplace = entry["style"].get("text-position", "center")
- toffset = relaxedFloat(entry["style"].get("text-offset", "0"))
- toverlap = entry["style"].get("text-allow-overlap", entry["style"].get("allow-overlap", "false"))
- tdistance = relaxedFloat(entry["style"].get("-x-kot-min-distance", "20"))
- twrap = relaxedFloat(entry["style"].get("max-width", 256))
- talign = entry["style"].get("text-align", "center")
- topacity = relaxedFloat(entry["style"].get("text-opacity", entry["style"].get("opacity", "1")))
- tpos = entry["style"].get("text-placement", "X")
- ttransform = entry["style"].get("text-transform", "none")
- tspacing = entry["style"].get("text-spacing", "4096")
- tangle = entry["style"].get("-x-kot-text-angle", libkomapnik.max_char_angle_delta)
- tcharspacing = entry["style"].get("-x-kot-font-tracking", libkomapnik.font_tracking)
-
- xml += xml_rule_start()
- xml += x_scale
-
- xml += xml_filter(entry["rulestring"])
- if "icon-image" in entry["style"] and entry["style"].get("text-position", "center") == 'center':
- xml += xml_shieldsymbolizer(
- entry["style"].get("icon-image", ""),
- entry["style"].get("icon-width", ""),
- entry["style"].get("icon-height", ""),
- ttext, tface, tsize, tcolor, thcolor, thradius, tplace,
- toffset, toverlap, tdistance, twrap, talign, topacity, ttransform)
- else:
- xml += xml_textsymbolizer(ttext, tface, tsize, tcolor, thcolor, thradius, tcharspacing, tplace, toffset, toverlap, tdistance, twrap, talign, topacity, tpos, ttransform, tspacing, tangle)
- sql.add(entry["sql"])
- itags.update(entry["chooser"].get_interesting_tags(entry["type"], zoom))
- xml += xml_rule_end()
-
- xml += xml_style_end()
- sql.discard("()")
- if sql:
- order = ""
- if csb:
- if cso != "desc":
- cso = "asc"
- itags.add(csb)
- order = """ order by (CASE WHEN "%s" ~ E'^[[:digit:]]+([.][[:digit:]]+)?$' THEN to_char(CAST ("%s" AS FLOAT) ,'000000000000000.99999999999') else "%s" end) %s nulls last """ % (csb, csb, csb, cso)
-
- mfile.write(xml)
-
- add_tags = set()
- for t in itags:
- if t in columnmap:
- add_tags.update(columnmap[t][1])
- texttags.update(columnmap[t][1])
-
- oitags = itags.union(add_tags) # SELECT: (tags->'mooring') as "mooring"
- oitags = ", ".join([escape_sql_column(i, asname=True) for i in oitags])
-
- goitags = itags.union(add_tags) # GROUP BY: (tags->'mooring')
- goitags = ", ".join([escape_sql_column(i) for i in goitags])
-
- fitags = [columnmap.get(i, (i,))[0] for i in itags]
-
- # fitags = add_numerics_to_itags(itags)
- itags = add_numerics_to_itags(fitags) # population => {population, population__num}
- neitags = add_numerics_to_itags(fitags, escape=False) # for complex polygons, no escapng needed
- del fitags
-
- ttext = " OR ".join([escape_sql_column(i) + " is not NULL" for i in texttags])
-
- if placement == "center" and layer_type == "polygon" and snap_to_street == 'false':
- sqlz = " OR ".join(sql)
- itags = ", ".join(itags)
- neitags = ", ".join(neitags)
- if not order:
- order = "order by"
- else:
- order += ", "
- if zoom > 11 or zoom < 6:
- sqlz = """select %s, way
- from %s%s
- where (%s) and (%s) and (way_area > %s) and way && ST_Expand(!bbox!,3000) %s way_area desc
- """ % (itags, libkomapnik.table_prefix, layer_type, ttext, sqlz, pixel_size_at_zoom(zoom, 3) ** 2, order)
- else:
- sqlz = """select %s, way
- from (
- select (ST_Dump(ST_Multi(ST_Buffer(ST_Simplify(ST_Collect(p.way),%s),%s)))).geom as way, %s
- from (
- select *
- from %s%s p
- where (%s) and way_area > %s and p.way && ST_Expand(!bbox!,%s) and (%s)) p
- group by %s) p %s ST_Area(p.way) desc
- """ % (neitags, pixel_size_at_zoom(zoom, 9), pixel_size_at_zoom(zoom, 10), oitags,
- libkomapnik.table_prefix, layer_type, ttext, pixel_size_at_zoom(zoom, 5) ** 2, max(pixel_size_at_zoom(zoom, 20), 3000), sqlz, goitags, order)
-
- mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz, zoom))
- elif layer_type == "line" and zoom < 16 and snap_to_street == 'false':
- sqlz = " OR ".join(sql)
- itags = ", ".join(itags)
- if not order:
- order = "order by"
- else:
- order += ", "
- # itags = "\""+ itags+"\""
- sqlz = """select * from (select %s, ST_Simplify(ST_LineMerge(ST_Union(way)),%s) as way from (SELECT * from %sline where way && ST_Expand(!bbox!,%s) and (%s) and (%s)) as tex
- group by %s) p
- where ST_Length(p.way) > %s
- %s ST_Length(p.way) desc
- """ % (itags, pixel_size_at_zoom(zoom, 3), libkomapnik.table_prefix, max(pixel_size_at_zoom(zoom, 20), 3000), ttext, sqlz, goitags, pixel_size_at_zoom(zoom, 4), order)
- mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz, zoom=zoom))
-
- elif snap_to_street == 'true':
- sqlz = " OR ".join(sql)
- itags = ", ".join(itags)
-
- sqlz = """select %s,
-
- coalesce(
- (select
- ST_Intersection(
- ST_Translate(
- ST_Rotate(
- ST_GeomFromEWKT('SRID=%s;LINESTRING(-50 0, 50 0)'),
- -1*ST_Azimuth(ST_PointN(ST_ShortestLine(l.way, ST_PointOnSurface(ST_Buffer(h.way,0.1))),1),
- ST_PointN(ST_ShortestLine(l.way, ST_PointOnSurface(ST_Buffer(h.way,0.1))),2)
- )
- ),
- ST_X(ST_PointOnSurface(ST_Buffer(h.way,0.1))),
- ST_Y(ST_PointOnSurface(ST_Buffer(h.way,0.1)))
- ),
- ST_Buffer(h.way,20)
- )
- as way
- from %sline l
- where
- l.way && ST_Expand(h.way, 600) and
- ST_IsValid(l.way) and
- l."name" = h."addr:street" and
- l.highway is not NULL and
- l."name" is not NULL
- order by ST_Distance(ST_PointOnSurface(ST_Buffer(h.way,0.1)), l.way) asc
- limit 1
- ),
- (select
- ST_Intersection(
- ST_Translate(
- ST_Rotate(
- ST_GeomFromEWKT('SRID=%s;LINESTRING(-50 0, 50 0)'),
- -1*ST_Azimuth(ST_PointN(ST_ShortestLine(ST_Centroid(l.way), ST_PointOnSurface(ST_Buffer(h.way,0.1))),1),
- ST_PointN(ST_ShortestLine(ST_Centroid(l.way), ST_PointOnSurface(ST_Buffer(h.way,0.1))),2)
- )
- ),
- ST_X(ST_PointOnSurface(ST_Buffer(h.way,0.1))),
- ST_Y(ST_PointOnSurface(ST_Buffer(h.way,0.1)))
- ),
- ST_Buffer(h.way,20)
- )
- as way
- from %spolygon l
- where
- l.way && ST_Expand(h.way, 600) and
- ST_IsValid(l.way) and
- l."name" = h."addr:street" and
- l.highway is not NULL and
- l."name" is not NULL
- order by ST_Distance(ST_PointOnSurface(ST_Buffer(h.way,0.1)), l.way) asc
- limit 1
- ),
- ST_Intersection(
- ST_MakeLine( ST_Translate(ST_PointOnSurface(ST_Buffer(h.way,0.1)),-50,0),
- ST_Translate(ST_PointOnSurface(ST_Buffer(h.way,0.1)), 50,0)
- ),
- ST_Buffer(h.way,20)
- )
- ) as way
-
- from %s%s h
- where (%s) and (%s) and way && ST_Expand(!bbox!,3000) %s
- """ % (itags, libkomapnik.db_srid, libkomapnik.table_prefix, libkomapnik.db_srid, libkomapnik.table_prefix, libkomapnik.table_prefix, layer_type, ttext, sqlz, order)
- mfile.write(xml_layer("postgis-process", layer_type, itags, sqlz, zoom))
-
- else:
- sql = "(" + " OR ".join(sql) + ") %s" % (order) # and way && ST_Expand(!bbox!,%s), max(pixel_size_at_zoom(zoom,20),3000),
- mfile.write(xml_layer("postgis", layer_type, itags, sql, zoom=zoom))
- else:
- xml_nolayer()
-
- mfile.write(xml_end())
diff --git a/src/libkojs.py b/src/libkojs.py
deleted file mode 100644
index bbb3536..0000000
--- a/src/libkojs.py
+++ /dev/null
@@ -1,57 +0,0 @@
-def komap_js(mfile, style):
- subjs = {"canvas": ("canvas",), "way": ("Polygon", "LineString"), "line": ("Polygon", "LineString"), "area": ("Polygon",), "node": ("Point",), "*": ("Point", "Polygon", "LineString"), "": ("Point", "Polygon", "LineString"), }
- mfile.write("function restyle (prop, zoom, type){")
- mfile.write("style = new Object;")
- mfile.write('style["default"] = new Object;')
- for chooser in style.choosers:
- condition = ""
- subclass = "default"
- for i in chooser.ruleChains:
- if condition:
- condition += "||"
- rule = " zoom >= %s && zoom <= %s" % (i.minZoom, i.maxZoom)
- for z in i.conditions:
- t = z.type
- params = z.params
- if params[0] == "::class":
- subclass = params[1][2:]
- continue
- if rule:
- rule += " && "
- if t == 'eq':
- rule += 'prop["%s"] == "%s"' % (params[0], params[1])
- if t == 'ne':
- rule += 'prop["%s"] != "%s"' % (params[0], params[1])
- if t == 'regex':
- rule += 'prop["%s"].match(RegExp("%s"))' % (params[0], params[1])
- if t == 'true':
- rule += 'prop["%s"] == "yes"' % (params[0])
- if t == 'untrue':
- rule += 'prop["%s"] != "yes"' % (params[0])
- if t == 'set':
- rule += '"%s" in prop' % (params[0])
- if t == 'unset':
- rule += '!("%s"in prop)' % (params[0])
- if t == '<':
- rule += 'prop["%s"] < %s' % (params[0], params[1])
- if t == '<=':
- rule += 'prop["%s"] <= %s' % (params[0], params[1])
- if t == '>':
- rule += 'prop["%s"] > %s' % (params[0], params[1])
- if t == '>=':
- rule += 'prop["%s"] >= %s' % (params[0], params[1])
- if rule:
- rule = "&&" + rule
- condition += "((" + "||".join(['type == "%s"' % z for z in subjs[i.subject]]) + ") " + rule + ")"
- styles = ""
- if subclass != "default":
- styles = 'if(!("%s" in style)){style["%s"] = new Object;}' % (subclass, subclass)
- for k, v in chooser.styles[0].iteritems():
- if type(v) == str:
- try:
- v = str(float(v))
- styles += 'style["' + subclass + '"]["' + k + '"] = ' + v + ';'
- except:
- styles += 'style["' + subclass + '"]["' + k + '"] = "' + v + '";'
- mfile.write("if(%s) {%s};\n" % (condition, styles))
- mfile.write("return style;}")
diff --git a/src/libkomapnik.py b/src/libkomapnik.py
deleted file mode 100644
index 81dd19d..0000000
--- a/src/libkomapnik.py
+++ /dev/null
@@ -1,415 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-
-import os
-import math
-from debug import debug, Timer
-
-from mapcss.webcolors.webcolors import whatever_to_hex as nicecolor
-
-
-map_proj = ""
-db_proj = ""
-table_prefix = ""
-db_user = ""
-db_name = ""
-db_srid = ""
-icons_path = ""
-world_bnd_path = ""
-cleantopo_dem_path = ""
-srtm_dem_path = ""
-cleantopo_hs_path = ""
-srtm_hs_path = ""
-text_scale = 1
-default_font_family = ""
-max_char_angle_delta = ""
-font_tracking = 0
-
-substyles = []
-
-
-last_id = 0
-
-
-def get_id(i=0):
- global last_id
- last_id += i
- return last_id
-
-
-def zoom_to_scaledenom(z1, z2=False):
- """
- Converts zoom level to mapnik's scaledenominator pair for EPSG:3857
- """
- if not z2:
- z2 = z1
- s = 279541132.014
- z1 = (s / (2 ** (z1 - 1)) + s / (2 ** (z1 - 2))) / 2
- z2 = (s / (2 ** (z2 - 1)) + s / (2 ** z2)) / 2
- # return 100000000000000, 1
- return z1, z2
-
-
-def pixel_size_at_zoom(z, l=1):
- """
- Converts l pixels on tiles into length on zoom z
- """
- return int(math.ceil(l * 20037508.342789244 / 256 * 2 / (2 ** z)))
-
-
-def xml_fontset(name, unicode=True):
- if unicode:
- unicode = ''
- return """
-
-
- %s
- """ % (name, name, unicode)
-
-
-def xml_pointsymbolizer(path="", width="", height="", opacity=1, overlap="false"):
- if width:
- width = ' width="%s" ' % width
- if height:
- height = ' height="%s" ' % height
- return """
- """\
- % (os.path.join(icons_path, path), width, height, opacity, overlap)
-
-
-def xml_linesymbolizer(color="#000000", width="1", opacity="1", linecap="butt", linejoin="round", dashes="", smooth=0, zoom=200):
- color = nicecolor(color)
- linecap = {"none": "butt", }.get(linecap.lower(), linecap)
-
- if dashes:
- dashes = 'stroke-dasharray="' + str(dashes).strip('[]') + '"'
- else:
- dashes = ""
-
- if smooth:
- smooth = 'smooth="%s"' % (smooth)
- else:
- smooth = ""
-
- rasterizer = ""
-# if float(width) < 4 and not dashes and zoom < 6:
-# rasterizer = ' rasterizer="fast"'
-
- return """
- """ % (rasterizer, smooth, color, float(width), float(opacity), linejoin, linecap, dashes)
-
-
-def xml_polygonsymbolizer(color="#000000", opacity="1", smooth='0'):
- color = nicecolor(color)
- if smooth:
- smooth = 'smooth="%s"' % (smooth)
- else:
- smooth = ""
- return """
- """ % (color, float(opacity), smooth)
-
-
-def xml_polygonpatternsymbolizer(file=""):
- return """
- """ % (os.path.join(icons_path, file))
-
-
-def xml_linepatternsymbolizer(file=""):
- return """
- """ % (os.path.join(icons_path, file))
-
-
-def xml_linemarkerssymbolizer(file="", spacing="100", allow_overlap="false"):
- return """
- """ % (os.path.join(icons_path, file), spacing, allow_overlap)
-
-
-def xml_textsymbolizer(
- text="name", face=default_font_family, size="10", color="#000000", halo_color="#ffffff", halo_radius="0", character_spacing=font_tracking, placement="line", offset="0", overlap="false", distance="26", wrap_width=256, align="center", opacity="1", pos="X", transform="none", spacing="4096", angle=max_char_angle_delta):
- color = nicecolor(color)
- halo_color = nicecolor(halo_color)
- pos = pos.replace("exact", "X").replace("any", "S, E, X, N, W, NE, SE, NW, SW").split(",")
- pos.extend([str(int(float(x) * text_scale)) for x in size.split(",")])
- pos = ",".join(pos)
- size = str(float(size.split(",")[0]) * text_scale)
- angle = str(int(angle))
-
- placement = {"center": "interior"}.get(placement.lower(), placement)
- align = {"center": "middle"}.get(align.lower(), align)
- dy = int(float(offset))
- dx = 0
- if align in ("right", 'left'):
- dx = dy
- dy = 0
-
- return """
- [%s]
- """ % (face, size, color, halo_color, halo_radius, character_spacing, placement, dx, dy, angle, overlap, wrap_width, distance, align, opacity, pos, transform, spacing, text)
-
-def xml_shieldsymbolizer(path="", width="", height="",
- text="name", face=default_font_family, size="10", color="#000000", halo_color="#ffffff", halo_radius="0", placement="line", offset="0", overlap="false", distance="26", wrap_width=256, align="center", opacity="1", transform="none", unlock_image='true', spacing='500'):
- color = nicecolor(color)
- halo_color = nicecolor(halo_color)
- placement = {"center": "point"}.get(placement.lower(), placement)
- align = {"center": "middle"}.get(align.lower(), align)
- size = str(float(size.split(",")[0]) * text_scale)
- if width:
- width = ' width="%s" ' % width
- if height:
- height = ' height="%s" ' % height
- return """
- [%s]
- """ % (icons_path,
- path, width, height, face, size, color, halo_color, halo_radius, placement, offset, overlap, wrap_width, distance, align, opacity, transform, unlock_image, spacing, text)
-
-
-def xml_filter(string):
- return """
- %s""" % string
-
-
-def xml_scaledenominator(z1, z2=False):
- zz1, zz2 = zoom_to_scaledenom(z1, z2)
- return """
- %s
- %s""" % (zz1, zz2, z1, z2)
-
-
-def xml_start(bgcolor="transparent"):
- if bgcolor != "transparent":
- bgcolor = nicecolor(bgcolor)
- return """
-
- """
-
-
-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_cleantopo(zoom, x_scale, demramp):
- return """
-
-
-
- elevation1z%s
-
- %s
- gdal
- 1
- 3857
-
-
- """ % (zoom, x_scale, demramp, zoom, zoom, cleantopo_dem_path)
-
-
-def xml_srtm(zoom, x_scale, demramp):
- return """
-
-
-
- elevationz%s
-
- %s
- gdal
- 1
- 3857
-
-
- """ % (zoom, x_scale, demramp, zoom, zoom, srtm_dem_path)
-
-
-def xml_hillshade(zoom, x_scale):
- hs_path = cleantopo_hs_path
- if zoom > 6:
- hs_path = srtm_hs_path
- return """
-
-
-
- hillshade%s
-
- %s
- gdal
- 1
- 3857
-
-
- """ % (zoom, x_scale, zoom, zoom, hs_path)
-
-
-def xml_hardcoded_arrows():
- return """
-
-
-
-
- """
-
-
-def xml_layer(type="postgis", geom="point", interesting_tags="*", sql="true", zoom=0):
- layer_id = get_id(1)
- global substyles
- subs = "\n".join(["s%s" % i for i in substyles])
- substyles = []
- intersection_SQL = ""
- if zoom < 5:
- intersection_SQL = '1'
- elif zoom > 16:
- intersection_SQL = '500000000000'
-
- if type == "postgis":
- waystring = 'way'
- if zoom < 10:
- waystring = "ST_Simplify(way, %s) as way" % (pixel_size_at_zoom(zoom, 0.6))
- if zoom >= 5:
- sql = 'way && !bbox! and ' + sql
- if geom == "polygon":
- sql = 'way_area > %s and ' % (pixel_size_at_zoom(zoom, 0.1) ** 2) + sql
- interesting_tags = list(interesting_tags)
- if '"' not in "".join(interesting_tags) and "->" not in "".join(interesting_tags):
- interesting_tags = "\", \"".join(interesting_tags)
- interesting_tags = "\"" + interesting_tags + "\""
- else:
- interesting_tags = ", ".join(interesting_tags)
-
- return """
-
- %s
-
-
- ( -- zoom %s
- select %s, %s
- from %s%s
- where %s
- ) as k_layer
-
- %s
- postgis
- true
- %s
- %s
- %s
- way
- %s%s
- false
- -20037508.342789244, -20037508.342780735, 20037508.342789244, 20037508.342780709
-
- """ % (layer_id, db_proj, subs, zoom, interesting_tags, waystring, table_prefix, geom, sql, intersection_SQL, db_user, db_name, db_srid, table_prefix, geom)
- elif type == "postgis-process":
- return """
-
- %s
-
-
- ( -- zoom %s
- %s
- ) as k_layer
-
- %s
- postgis
- true
- %s
- %s
- %s
- way
- %s%s
- false
- -20037508.342789244, -20037508.342780735, 20037508.342789244, 20037508.342780709
-
- """ % (layer_id, db_proj, subs, zoom, sql, intersection_SQL, db_user, db_name, db_srid, table_prefix, geom)
- elif type == "coast":
- if zoom < 9:
- return """
-
- %s
-
- shape
- %sshoreline_300
-
- """ % (layer_id, db_proj, subs, world_bnd_path)
- else:
- return """
-
- %s
-
- shape
- %sprocessed_p
-
- """ % (layer_id, db_proj, subs, world_bnd_path)
-
-
-def xml_nolayer():
- global substyles
- substyles = []
-
-
-def xml_nosubstyle():
- global substyles
- substyles = substyles[:-1]
diff --git a/src/make_postgis_style.py b/src/make_postgis_style.py
deleted file mode 100644
index aaadf9a..0000000
--- a/src/make_postgis_style.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-import sys
-
-from debug import debug, Timer
-from mapcss import MapCSS
-
-
-langs = ['int_name', 'name:af', 'name:am', 'name:ar', 'name:be', 'name:bg', 'name:br', 'name:ca', 'name:cs', 'name:cy', 'name:de', 'name:el', 'name:en', 'name:eo', 'name:es', 'name:et', 'name:eu', 'name:fa', 'name:fi', 'name:fr', 'name:fur', 'name:fy', 'name:ga', 'name:gd', 'name:gsw', 'name:he', 'name:hi', 'name:hr', 'name:hsb', 'name:hu', 'name:hy', 'name:it', 'name:ja', 'name:ja_kana', 'name:ja_rm', 'name:ka', 'name:kk', 'name:kn', 'name:ko', 'name:ko_rm', 'name:ku', 'name:la', 'name:lb', 'name:lt', 'name:lv', 'name:mk', 'name:mn', 'name:nl', 'name:pl', 'name:pt', 'name:ro', 'name:ru', 'name:sk', 'name:sl', 'name:sq', 'name:sr', 'name:sv', 'name:th', 'name:tr', 'name:uk', 'name:vi', 'name:zh', 'name:zh_pinyin']
-
-if len(sys.argv) < 2:
- print "Usage: make_postgis_style.py [stylesheet] [additional_tag,tag2,tag3]"
- exit()
-
-style = MapCSS(1, 19) # zoom levels
-style.parse(open(sys.argv[1], "r").read())
-
-dct = {}
-
-if len(sys.argv) >= 3:
- langs.extend(sys.argv[2].split(","))
- dct = dict([(k, set([("node", "linear"), ('way', 'linear')])) for k in langs])
-
-t = {"node": ("node", "linear"), "line": ("way", "linear"), "area": ("way", "polygon")}
-
-for a in t:
- for tag in style.get_interesting_tags(type=a):
- if tag not in dct:
- dct[tag] = set()
- dct[tag].add(t[a])
-
-print """
-# OsmType Tag DataType Flags"""
-for t in ("z_order", "way_area", ":area"):
- if t in dct:
- del dct[t]
-
-keys = dct.keys()
-keys.sort()
-
-for k in keys:
- v = dct[k]
- s = ",".join(set([i[0] for i in v]))
- pol = "linear"
- if "polygon" in set([i[1] for i in v]):
- pol = "polygon"
- print "%-10s %-20s %-13s %s" % (s, k, "text", pol)
-print """
-node,way z_order int4 linear # This is calculated during import
-way way_area real # This is calculated during import"""
diff --git a/src/osm2tiles.py b/src/osm2tiles.py
deleted file mode 100644
index db39fa1..0000000
--- a/src/osm2tiles.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-import os
-import sqlite3
-import sys
-from lxml import etree
-from twms import projections
-from style import Styling
-
-reload(sys)
-sys.setdefaultencoding("utf-8") # a hack to support UTF-8
-
-try:
- import psyco
- psyco.full()
-except ImportError:
- pass
-
-MAXZOOM = 16
-TEMPORARY_FILE_PATH = 'temp_file.bin'
-
-proj = "EPSG:4326"
-
-style = Styling()
-
-# elsif($k eq 'highway' and $v eq 'footway' or $v eq 'path' or $v eq 'track'){
-
-
-def tilelist_by_geometry(way, start_zoom=0, ispoly=False):
- """
- Gives a number of (z,x,y) tile numbers that geometry crosses.
- """
- ret = set([])
- tiles_by_zooms = {} # zoom: set(tile,tile,tile...)
- for t in xrange(0, MAXZOOM + 1):
- tiles_by_zooms[t] = set([])
- for point in way:
- tile = projections.tile_by_coords(point, MAXZOOM, proj)
- tile = (MAXZOOM, int(tile[0]), int(tile[1]))
- tiles_by_zooms[MAXZOOM].add(tile)
- for t in xrange(MAXZOOM - 1, start_zoom - 1, -1):
- for tt in tiles_by_zooms[t + 1]:
- tiles_by_zooms[t].add((t, int(tt[1] / 2), int(tt[2] / 2)))
- for z in tiles_by_zooms.values():
- ret.update(z)
- return ret
-
-
-def pix_distance(a, b, z):
- """
- Calculates onscreen distance between 2 points on given zoom.
- """
- return 2 ** z * 256 * (((a[0] - b[0]) / 360.) ** 2 + ((a[1] - b[1]) / 180.) ** 2) ** 0.5
-
-
-def sanitize(string):
- string = string.replace(" ", "_")
- string = string.replace(";", ",")
- string = string.replace("=", "###")
- return string
-
-print sanitize(" ;=")
-
-
-def initDB(filename):
- conn = sqlite3.connect(filename)
- c = conn.cursor()
- # create table with the osm element integer id being the primary index
- # - according to the sqlite documentation this will equal the index with the
- # built in rowid index, providing the same speedup as a separate index while
- # saving space - win-win ! :)
- # - brief testing shows that this makes the osm -> tiles operation about 5% faster
- # but more importantly makes the temporary sqlite database 30% smaller! :)
- c.execute('''CREATE TABLE nodes (id integer, lat real, lon real, PRIMARY KEY (id))''')
- return conn
-
-
-def storeNode(conn, id, lat, lon):
-# conn.execute("INSERT INTO nodes VALUES ('%d', %f, %f)" % (id, lat, lon))
- conn.execute("INSERT INTO nodes(id, lat, lon) values (?, ?, ?)", (id, lat, lon))
-
-
-def getNode(conn, id):
-# conn.execute("SELECT * FROM nodes WHERE id = '%s'" % id)
- return conn.execute("SELECT lat, lon FROM nodes WHERE id = '%s'" % id).fetchone()
-
-
-def main():
- DROPPED_POINTS = 0
- WAYS_WRITTEN = 0
- NODES_READ = 0
- WAYS_READ = 0
- tilefiles = {}
- tilefiles_hist = []
- # osm_infile = open("minsk.osm", "rb")
- osm_infile = sys.stdin
-
- # remove any stale temporary files
- if os.path.exists(TEMPORARY_FILE_PATH):
- os.remove(TEMPORARY_FILE_PATH)
- conn = initDB(TEMPORARY_FILE_PATH)
-
-# nodes = {}
- curway = []
- tags = {}
- context = etree.iterparse(osm_infile)
- for action, elem in context:
- items = dict(elem.items())
- if elem.tag == "node":
- NODES_READ += 1
- if NODES_READ % 10000 == 0:
- print "Nodes read:", NODES_READ
- print len(curway), len(tags), len(tilefiles), len(tilefiles_hist)
- if NODES_READ % 100000 == 0:
- conn.commit()
- print "flushing to temporary storage"
-
-# nodes[str(items["id"])] = (float(items["lon"]), float(items["lat"]))
- storeNode(conn, int(items["id"]), float(items["lon"]), float(items["lat"]))
- tags = {}
- elif elem.tag == "nd":
- result = getNode(conn, int(items["ref"]))
- if result:
- curway.append(result)
-# try:
-# curway.append(nodes[str(items["ref"])])
-# except KeyError:
-# pass
- elif elem.tag == "tag":
- tags[sanitize(items["k"])] = sanitize(items["v"])
- elif elem.tag == "way":
- WAYS_READ += 1
- if WAYS_READ % 1000 == 0:
- print "Ways read:", WAYS_READ
-
- mzoom = 1
- # tags = style.filter_tags(tags)
- if tags:
- if True: # style.get_style("way", tags, True): # if way is stylized
- towrite = ";".join(["%s=%s" % x for x in tags.iteritems()]) # TODO: sanitize keys and values
- # print towrite
- way_simplified = {MAXZOOM: curway}
-
- for zoom in xrange(MAXZOOM - 1, -1, -1): # generalize a bit
- # TODO: Douglas-Peucker
- prev_point = curway[0]
- way = [prev_point]
- for point in way_simplified[zoom + 1]:
- if pix_distance(point, prev_point, zoom) > 1.5:
- way.append(point)
- prev_point = point
- else:
- DROPPED_POINTS += 1
-
- if len(way) == 1:
- mzoom = zoom
- # print zoom
- break
- if len(way) > 1:
- way_simplified[zoom] = way
- # print way
- for tile in tilelist_by_geometry(curway, mzoom + 1):
- z, x, y = tile
- path = "tiles/z%s/%s/x%s/%s/" % (z, x / 1024, x, y / 1024)
- if tile not in tilefiles:
-
- if not os.path.exists(path):
- os.makedirs(path)
- tilefiles[tile] = open(path + "y" + str(y) + ".vtile", "wb")
- tilefiles_hist.append(tile)
- else:
- if not tilefiles[tile]:
- tilefiles[tile] = open(path + "y" + str(y) + ".vtile", "a")
- tilefiles_hist.append(tile)
- tilefiles_hist.remove(tile)
- tilefiles_hist.append(tile)
- print >>tilefiles[tile], "%s %s" % (towrite, items["id"]), " ".join([str(x[0]) + " " + str(x[1]) for x in way_simplified[tile[0]]])
- if len(tilefiles_hist) > 400:
- print "Cleaned up tiles. Wrote by now:", len(tilefiles), "active:", len(tilefiles_hist)
- for tile in tilefiles_hist[0:len(tilefiles_hist) - 100]:
-
- tilefiles_hist.remove(tile)
- tilefiles[tile].flush()
- tilefiles[tile].close()
- tilefiles[tile] = None
-
- # print >>corr, "%s %s %s %s %s %s"% (curway[0][0],curway[0][1],curway[1][0],curway[1][1], user, ts )
- WAYS_WRITTEN += 1
- if WAYS_WRITTEN % 10000 == 0:
- print WAYS_WRITTEN
- curway = []
- tags = {}
- elem.clear()
- # extra insurance
- del elem
- # user = default_user
- # ts = ""
- print "Tiles generated:", len(tilefiles)
- print "Nodes dropped when generalizing:", DROPPED_POINTS
-# print "Nodes in memory:", len(nodes)
- c = conn.cursor()
- c.execute('SELECT * from nodes')
- print "Nodes in memory:", len(c.fetchall())
-
- # report temporary file size
- print "Temporary file size:", os.path.getsize(TEMPORARY_FILE_PATH)
-
- # remove temporary files
- os.remove(TEMPORARY_FILE_PATH)
-
-main()
diff --git a/src/production.py b/src/production.py
deleted file mode 100644
index 6bb0e02..0000000
--- a/src/production.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-
-"""
-This is a module to substitute debug.py in porduction mode.
-"""
-
-debug = lambda st: None
-
-
-class Timer:
- def __init__(self, comment):
- pass
-
- def stop(self):
- pass
diff --git a/src/render.py b/src/render.py
deleted file mode 100644
index 7ab406c..0000000
--- a/src/render.py
+++ /dev/null
@@ -1,544 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-from debug import debug, Timer
-from twms import projections
-import cairo
-import math
-import os as os_module
-from copy import deepcopy
-import pangocairo
-import pango
-
-
-def line(cr, c):
- cr.move_to(*c[0])
- for k in c:
- cr.line_to(*k)
- cr.stroke()
-
-
-def poly(cr, c):
- cr.move_to(*c[0])
- for k in c:
- cr.line_to(*k)
- cr.fill()
-
-
-def offset_line(line, offset):
- a = []
- prevcoord = line[0]
- for coord in line:
- if coord != prevcoord:
- angle = - math.atan2(coord[1] - prevcoord[1], coord[0] - prevcoord[0])
- dx = offset * math.sin(angle)
- dy = offset * math.cos(angle)
- a.append((prevcoord[0] + dx, prevcoord[1] + dy))
- a.append((coord[0] + dx, coord[1] + dy))
- prevcoord = coord
- return a
-
-
-class RasterTile:
- def __init__(self, width, height, zoomlevel, data_backend, raster_proj="EPSG:3857"):
- self.w = width
- self.h = height
- self.surface = cairo.ImageSurface(cairo.FORMAT_RGB24, self.w, self.h)
- self.offset_x = 0
- self.offset_y = 0
- self.bbox = (0., 0., 0., 0.)
- self.bbox_p = (0., 0., 0., 0.)
- self.zoomlevel = zoomlevel
- self.zoom = None
- self.data = data_backend
- self.proj = raster_proj
-
- def __del__(self):
- del self.surface
-
- def screen2lonlat(self, x, y):
- lo1, la1, lo2, la2 = self.bbox_p
- debug("%s %s - %s %s" % (x, y, self.w, self.h))
- debug(self.bbox_p)
- return projections.to4326((1. * x / self.w * (lo2 - lo1) + lo1, la2 + (1. * y / (self.h) * (la1 - la2))), self.proj)
- # return (x - self.w/2)/(math.cos(self.center_coord[1]*math.pi/180)*self.zoom) + self.center_coord[0], -(y - self.h/2)/self.zoom + self.center_coord[1]
-
- def lonlat2screen(self, (lon, lat), epsg4326=False):
- if epsg4326:
- lon, lat = projections.from4326((lon, lat), self.proj)
- lo1, la1, lo2, la2 = self.bbox_p
- return ((lon - lo1) * (self.w - 1) / abs(lo2 - lo1), ((la2 - lat) * (self.h - 1) / (la2 - la1)))
- # return (lon - self.center_coord[0])*self.lcc*self.zoom + self.w/2, -(lat - self.center_coord[1])*self.zoom + self.h/2
-
- def update_surface_by_center(self, lonlat, zoom, style):
- self.zoom = zoom
- xy = projections.from4326(lonlat, self.proj)
- xy1 = projections.to4326((xy[0] - 40075016 * 0.5 ** self.zoom / 256 * self.w, xy[1] - 40075016 * 0.5 ** self.zoom / 256 * self.h), self.proj)
- xy2 = projections.to4326((xy[0] + 40075016 * 0.5 ** self.zoom / 256 * self.w, xy[1] + 40075016 * 0.5 ** self.zoom / 256 * self.h), self.proj)
- bbox = (xy1[0], xy1[1], xy2[0], xy2[1])
- debug(bbox)
- return self.update_surface(bbox, zoom, style)
-
- def update_surface(self, bbox, zoom, style, callback=lambda x=None: None):
- rendertimer = Timer("Rendering image")
- if "image" not in style.cache:
- style.cache["image"] = ImageLoader()
-
- timer = Timer("Getting data")
- self.zoom = zoom
- self.bbox = bbox
- self.bbox_p = projections.from4326(bbox, self.proj)
-
- print self.bbox_p
- scale = abs(self.w / (self.bbox_p[0] - self.bbox_p[2]) / math.cos(math.pi * (self.bbox[1] + self.bbox[3]) / 2 / 180))
- zscale = 0.5 * scale
- cr = cairo.Context(self.surface)
- # getting and setting canvas properties
- bgs = style.get_style("canvas", {}, self.zoom, scale, zscale)
- if not bgs:
- bgs = [{}]
- bgs = bgs[0]
- cr.rectangle(0, 0, self.w, self.h)
- # canvas color and opcity
- color = bgs.get("fill-color", (0.7, 0.7, 0.7))
- cr.set_source_rgba(color[0], color[1], color[2], bgs.get("fill-opacity", 1))
- cr.fill()
- callback()
-
- # canvas antialiasing
- antialias = bgs.get("antialias", "full")
- if antialias == "none":
- "no antialiasing enabled"
- cr.set_antialias(1)
- # cr.font_options_set_antialias(1)
- elif antialias == "text":
- "only text antialiased"
- cr.set_antialias(1)
- # cr.font_options_set_antialias(2)
- else:
- "full antialias"
- cr.set_antialias(2)
- # cr.font_options_set_antialias(2)
-
- datatimer = Timer("Asking backend")
- if "get_sql_hints" in dir(style):
- hints = style.get_sql_hints('way', self.zoom)
- else:
- hints = None
- if "get_interesting_tags" in dir(style):
- itags = style.get_interesting_tags(zoom=self.zoom)
- else:
- itags = None
-
- # enlarge bbox by 20% to each side. results in more vectors, but makes less artifaces.
- span_x, span_y = bbox[2] - bbox[0], bbox[3] - bbox[1]
- bbox_expand = [bbox[0] - 0.2 * span_x, bbox[1] - 0.2 * span_y, bbox[2] + 0.2 * span_x, bbox[3] + 0.2 * span_y]
- vectors = self.data.get_vectors(bbox_expand, self.zoom, hints, itags).values()
- datatimer.stop()
- datatimer = Timer("Applying styles")
- ww = []
-
- for way in vectors:
- type = "line"
- if way.coords[0] == way.coords[-1]:
- type == "area"
- st = style.get_style("area", way.tags, self.zoom, scale, zscale)
- if st:
- for fpt in st:
- # debug(fpt)
- ww.append([way.copy(), fpt])
-
- datatimer.stop()
- debug("%s objects on screen (%s in dataset)" % (len(ww), len(vectors)))
-
- er = Timer("Projecing data")
- if self.data.proj != self.proj:
- for w in ww:
- w[0].cs = [self.lonlat2screen(coord) for coord in projections.transform(w[0].coords, self.data.proj, self.proj)]
- else:
- for w in ww:
- w[0].cs = [self.lonlat2screen(coord) for coord in w[0].coords]
- for w in ww:
- if "offset" in w[1]:
- offset = float(w[1]["offset"])
- w[0] = w[0].copy()
- w[0].cs = offset_line(w[0].cs, offset)
- if "raise" in w[1] and not "extrude" in w[1]:
- w[0] = w[0].copy()
- offset = float(w[1]["raise"])
- w[0].cs_real = w[0].cs
- w[0].cs = [(x, y - offset) for x, y in w[0].cs]
- if "extrude" in w[1]:
- if w[1]["extrude"] < 2:
- del w[1]["extrude"]
- if "extrude" in w[1] and "fill-color" not in w[1] and "width" in w[1]:
- w[1]["fill-color"] = w[1].get("color", (0, 0, 0))
- w[1]["fill-opacity"] = w[1].get("opacity", 1)
- w[0] = w[0].copy()
- # print w[0].cs
- w[0].cs = offset_line(w[0].cs, w[1]["width"] / 2)
- # print w[0].cs
- aa = offset_line(w[0].cs, -w[1]["width"])
- del w[1]["width"]
- aa.reverse()
- w[0].cs.extend(aa)
-
- er.stop()
-
- ww.sort(key=lambda x: x[1]["layer"])
- layers = list(set([int(x[1]["layer"] / 100.) for x in ww]))
- layers.sort()
- objs_by_layers = {}
- for layer in layers:
- objs_by_layers[layer] = []
- for obj in ww:
- objs_by_layers[int(obj[1]["layer"] / 100.)].append(obj)
-
- del ww
- timer.stop()
- timer = Timer("Rasterizing image")
- linecaps = {"butt": 0, "round": 1, "square": 2}
- linejoin = {"miter": 0, "round": 1, "bevel": 2}
-
- text_rendered_at = set([(-100, -100)])
- for layer in layers:
- data = objs_by_layers[layer]
- # data.sort(lambda x,y:cmp(max([x1[1] for x1 in x[0].cs]), max([x1[1] for x1 in y[0].cs])))
-
- # - fill polygons
- for obj in data:
- if ("fill-color" in obj[1] or "fill-image" in obj[1]) and not "extrude" in obj[1]: # TODO: fill-image
- color = obj[1].get("fill-color", (0, 0, 0))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("fill-opacity", 1))
-
- if "fill-image" in obj[1]:
- image = style.cache["image"][obj[1]["fill-image"]]
- if image:
- pattern = cairo.SurfacePattern(image)
- pattern.set_extend(cairo.EXTEND_REPEAT)
- cr.set_source(pattern)
- poly(cr, obj[0].cs)
-
- # - draw casings on layer
- for obj in data:
- ### Extras: casing-linecap, casing-linejoin
- if "casing-width" in obj[1] or "casing-color" in obj[1] and "extrude" not in obj[1]:
- cr.set_dash(obj[1].get("casing-dashes", obj[1].get("dashes", [])))
- cr.set_line_join(linejoin.get(obj[1].get("casing-linejoin", obj[1].get("linejoin", "round")), 1))
- color = obj[1].get("casing-color", (0, 0, 0))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("casing-opacity", 1))
- ## TODO: good combining of transparent lines and casing
- ## Probable solution: render casing, render way as mask and put casing with mask chopped out onto image
-
- cr.set_line_width(obj[1].get("width", 0) + obj[1].get("casing-width", 1))
- cr.set_line_cap(linecaps.get(obj[1].get("casing-linecap", obj[1].get("linecap", "butt")), 0))
- line(cr, obj[0].cs)
-
- # - draw line centers
- for obj in data:
- if ("width" in obj[1] or "color" in obj[1] or "image" in obj[1]) and "extrude" not in obj[1]:
- cr.set_dash(obj[1].get("dashes", []))
- cr.set_line_join(linejoin.get(obj[1].get("linejoin", "round"), 1))
- color = obj[1].get("color", (0, 0, 0))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("opacity", 1))
- ## TODO: better overlapping of transparent lines.
- ## Probable solution: render them (while they're of the same opacity and layer) on a temporary canvas that's merged into main later
- cr.set_line_width(obj[1].get("width", 1))
- cr.set_line_cap(linecaps.get(obj[1].get("linecap", "butt"), 0))
- if "image" in obj[1]:
- image = style.cache["image"][obj[1]["image"]]
- if image:
- pattern = cairo.SurfacePattern(image)
- pattern.set_extend(cairo.EXTEND_REPEAT)
- cr.set_source(pattern)
- line(cr, obj[0].cs)
-
- callback()
-
- # - extruding polygons
- # data.sort(lambda x,y:cmp(max([x1[1] for x1 in x[0].cs]), max([x1[1] for x1 in y[0].cs])))
- # Pass 1. Creating list of extruded polygons
- extlist = []
- # fromat: (coords, ("h"/"v", y,z), real_obj)
- for obj in data:
- if "extrude" in obj[1]:
- def face_to_poly(face, hgt):
- """
- Converts a line into height-up extruded poly
- """
- return [face[0], face[1], (face[1][0], face[1][1] - hgt), (face[0][0], face[0][1] - hgt), face[0]]
- hgt = obj[1]["extrude"]
- raised = float(obj[1].get("raise", 0))
- excoords = [(a[0], a[1] - hgt - raised) for a in obj[0].cs]
-
- faces = []
- coord = obj[0].cs[-1]
- # p_coord = (coord[0],coord[1]-raised)
- p_coord = False
- for coord in obj[0].cs:
- c = (coord[0], coord[1] - raised)
- if p_coord:
- extlist.append((face_to_poly([c, p_coord], hgt), ("v", min(coord[1], p_coord[1]), hgt), obj))
- p_coord = c
-
- extlist.append((excoords, ("h", min(coord[1], p_coord[1]), hgt), obj))
- # faces.sort(lambda x,y:cmp(max([x1[1] for x1 in x]), max([x1[1] for x1 in y])))
-
- # Pass 2. Sorting
- def compare_things(a, b):
- """
- Custom comparator for extlist sorting.
- Sorts back-to-front, bottom-to-top, | > \ > _, horizontal-to-vertical.
- """
- t1, t2 = a[1], b[1]
- if t1[1] > t2[1]: # back-to-front
- return 1
- if t1[1] < t2[1]:
- return -1
- if t1[2] > t2[2]: # bottom-to-top
- return 1
- if t1[2] < t2[2]:
- return -1
- if t1[0] < t2[0]: # h-to-v
- return 1
- if t1[0] > t2[0]:
- return -1
-
- return cmp(math.sin(math.atan2(a[0][0][0] - a[0][1][0], a[0][0][0] - a[0][1][0])), math.sin(math.atan2(b[0][0][0] - b[0][1][0], b[0][0][0] - b[0][1][0])))
- print t1
- print t2
-
- extlist.sort(compare_things)
-
- # Pass 3. Rendering using painter's algorythm
- cr.set_dash([])
- for ply, prop, obj in extlist:
- if prop[0] == "v":
- color = obj[1].get("extrude-face-color", obj[1].get("color", (0, 0, 0)))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("extrude-face-opacity", obj[1].get("opacity", 1)))
- poly(cr, ply)
- color = obj[1].get("extrude-edge-color", obj[1].get("color", (0, 0, 0)))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("extrude-edge-opacity", obj[1].get("opacity", 1)))
- cr.set_line_width(.5)
- line(cr, ply)
- if prop[0] == "h":
- if "fill-color" in obj[1]:
- color = obj[1]["fill-color"]
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("fill-opacity", obj[1].get("opacity", 1)))
- poly(cr, ply)
- color = obj[1].get("extrude-edge-color", obj[1].get("color", (0, 0, 0)))
- cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("extrude-edge-opacity", obj[1].get("opacity", 1)))
- cr.set_line_width(1)
- line(cr, ply)
-
- # cr.set_line_width (obj[1].get("width", 1))
- # color = obj[1].get("color", (0,0,0) )
- # cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("extrude-edge-opacity", obj[1].get("opacity", 1)))
- # line(cr,excoords)
- # if "fill-color" in obj[1]:
- # color = obj[1]["fill-color"]
- # cr.set_source_rgba(color[0], color[1], color[2], obj[1].get("fill-opacity", 1))
- # poly(cr,excoords)
- for obj in data:
- if "icon-image" in obj[1]:
- image = style.cache["image"][obj[1]["icon-image"]]
- if image:
- dy = image.get_height() / 2
- dx = image.get_width() / 2
-
- where = self.lonlat2screen(projections.transform(obj[0].center, self.data.proj, self.proj))
- cr.set_source_surface(image, where[0] - dx, where[1] - dy)
- cr.paint()
-
- callback()
- # - render text labels
- texttimer = Timer("Text rendering")
- cr.set_line_join(1) # setting linejoin to "round" to get less artifacts on halo render
- for obj in data:
- if "text" in obj[1]:
-
- text = obj[1]["text"]
- # cr.set_line_width (obj[1].get("width", 1))
- # cr.set_font_size(float(obj[1].get("font-size", 9)))
- ft_desc = pango.FontDescription()
-
- ft_desc.set_family(obj[1].get('font-family', 'sans'))
- ft_desc.set_size(pango.SCALE * int(obj[1].get('font-size', 9)))
- fontstyle = obj[1].get('font-style', 'normal')
- if fontstyle == 'italic':
- fontstyle = pango.STYLE_ITALIC
- else:
- fontstyle = pango.STYLE_NORMAL
- ft_desc.set_style(fontstyle)
- fontweight = obj[1].get('font-weight', 400)
- try:
- fontweight = int(fontweight)
- except ValueError:
- if fontweight == 'bold':
- fontweight = 700
- else:
- fontweight = 400
- ft_desc.set_weight(fontweight)
- if obj[1].get('text-transform', None) == 'uppercase':
- text = text.upper()
- p_ctx = pangocairo.CairoContext(cr)
- p_layout = p_ctx.create_layout()
- p_layout.set_font_description(ft_desc)
- p_layout.set_text(text)
- p_attrs = pango.AttrList()
- decoration = obj[1].get('text-decoration', 'none')
- if decoration == 'underline':
- p_attrs.insert(pango.AttrUnderline(pango.UNDERLINE_SINGLE, end_index=-1))
- decoration = obj[1].get('font-variant', 'none')
- if decoration == 'small-caps':
- p_attrs.insert(pango.AttrVariant(pango.VARIANT_SMALL_CAPS, start_index=0, end_index=-1))
-
- p_layout.set_attributes(p_attrs)
-
- if obj[1].get("text-position", "center") == "center":
- where = self.lonlat2screen(projections.transform(obj[0].center, self.data.proj, self.proj))
- for t in text_rendered_at:
- if ((t[0] - where[0]) ** 2 + (t[1] - where[1]) ** 2) < 15 * 15:
- break
- else:
- text_rendered_at.add(where)
- # debug ("drawing text: %s at %s"%(text, where))
- if "text-halo-color" in obj[1] or "text-halo-radius" in obj[1]:
- cr.new_path()
- cr.move_to(where[0], where[1])
- cr.set_line_width(obj[1].get("text-halo-radius", 1))
- color = obj[1].get("text-halo-color", (1., 1., 1.))
- cr.set_source_rgb(color[0], color[1], color[2])
- cr.text_path(text)
- cr.stroke()
- cr.new_path()
- cr.move_to(where[0], where[1])
- cr.set_line_width(obj[1].get("text-halo-radius", 1))
- color = obj[1].get("text-color", (0., 0., 0.))
- cr.set_source_rgb(color[0], color[1], color[2])
- cr.text_path(text)
- cr.fill()
- else: # render text along line
- c = obj[0].cs
- text = unicode(text, "utf-8")
- # - calculate line length
- length = reduce(lambda x, y: (x[0] + ((y[0] - x[1]) ** 2 + (y[1] - x[2]) ** 2) ** 0.5, y[0], y[1]), c, (0, c[0][0], c[0][1]))[0]
- # print length, text, cr.text_extents(text)
- if length > cr.text_extents(text)[2]:
-
- # - function to get (x, y, normale) from (c, length_along_c)
- def get_xy_from_len(c, length_along_c):
- x0, y0 = c[0]
-
- for x, y in c:
- seg_len = ((x - x0) ** 2 + (y - y0) ** 2) ** 0.5
- if length_along_c < seg_len:
- normed = length_along_c / seg_len
- return (x - x0) * normed + x0, (y - y0) * normed + y0, math.atan2(y - y0, x - x0)
- else:
- length_along_c -= seg_len
- x0, y0 = x, y
- else:
- return None
- da = 0
- os = 1
- z = length / 2 - cr.text_extents(text)[2] / 2
- # print get_xy_from_len(c,z)
- if c[0][0] < c[1][0] and get_xy_from_len(c, z)[2] < math.pi / 2 and get_xy_from_len(c, z)[2] > -math.pi / 2:
- da = 0
- os = 1
- z = length / 2 - cr.text_extents(text)[2] / 2
- else:
- da = math.pi
- os = -1
- z = length / 2 + cr.text_extents(text)[2] / 2
- z1 = z
- if "text-halo-color" in obj[1] or "text-halo-radius" in obj[1]:
- cr.set_line_width(obj[1].get("text-halo-radius", 1.5) * 2)
- color = obj[1].get("text-halo-color", (1., 1., 1.))
- cr.set_source_rgb(color[0], color[1], color[2])
- xy = get_xy_from_len(c, z)
- cr.save()
- # cr.move_to(xy[0],xy[1])
- p_ctx.translate(xy[0], xy[1])
- cr.rotate(xy[2] + da)
- # p_ctx.translate(x,y)
- # p_ctx.show_layout(p_layout)
- p_ctx.layout_path(p_layout)
-
- cr.restore()
- cr.stroke()
- # for letter in text:
- # cr.new_path()
- # xy = get_xy_from_len(c,z)
- # print letter, cr.text_extents(letter)
- # cr.move_to(xy[0],xy[1])
- # cr.save()
- # cr.rotate(xy[2]+da)
- # cr.text_path(letter)
- # cr.restore()
- # cr.stroke()
- # z += os*cr.text_extents(letter)[4]
-
- color = obj[1].get("text-color", (0., 0., 0.))
- cr.set_source_rgb(color[0], color[1], color[2])
- z = z1
- xy = get_xy_from_len(c, z)
- cr.save()
- # cr.move_to(xy[0],xy[1])
- p_ctx.translate(xy[0], xy[1])
- cr.rotate(xy[2] + da)
- # p_ctx.translate(x,y)
- p_ctx.show_layout(p_layout)
- cr.restore()
-
- # for letter in text:
- # cr.new_path()
- # xy = get_xy_from_len(c,z)
- # print letter, cr.text_extents(letter)
- # cr.move_to(xy[0],xy[1])
- # cr.save()
- # cr.rotate(xy[2]+da)
- # cr.text_path(letter)
- # cr.restore()
- # cr.fill()
- # z += os*cr.text_extents(letter)[4]
-
- texttimer.stop()
- del data
- del layers
-
- timer.stop()
- rendertimer.stop()
- debug(self.bbox)
- callback(True)
-
-
-class ImageLoader:
- def __init__(self):
- self.cache = {}
-
- def __getitem__(self, url):
- if url in self.cache:
- return self.cache[url]
- else:
- print url, os_module.path.exists(url)
- if os_module.path.exists(url):
- self.cache[url] = cairo.ImageSurface.create_from_png(url)
- return self.cache[url]
- else:
- return False
diff --git a/src/simple_wms.py b/src/simple_wms.py
deleted file mode 100644
index b24959f..0000000
--- a/src/simple_wms.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-
-from debug import debug, Timer
-from backend.postgis import PostGisBackend as DataBackend
-from mapcss import MapCSS
-from twms import bbox, projections
-from render import RasterTile
-import web
-import StringIO
-
-style = MapCSS(1, 26) # zoom levels
-style.parse(open("styles/landuses.mapcss", "r").read())
-
-
-# bbox = (27.115768874532,53.740327031764,28.028320754378,54.067187302158)
-
-# w,h = 630*4,364*4
-# z = 17
-
-db = DataBackend()
-# style = Styling()
-
-
-try:
- import psyco
- psyco.full()
-except ImportError:
- pass
-
-OK = 200
-ERROR = 500
-
-
-def handler():
- """
- A handler for web.py.
- """
- data = web.input()
- resp, ctype, content = twms_main(data)
- web.header('Content-type', ctype)
- return content
-
-
-urls = (
- '/(.*)', 'mainhandler'
-)
-
-
-class mainhandler:
- def GET(self, crap):
- return handler()
-
-
-if __name__ == "__main__":
-
- app = web.application(urls, globals())
- app.run() # standalone run
-
-
-def twms_main(req):
- resp = ""
- data = req
- srs = data.get("srs", data.get("SRS", "EPSG:4326"))
- content_type = "image/png"
- # layer = data.get("layers",data.get("LAYERS", config.default_layers)).split(",")
-
- width = 0
- height = 0
- req_bbox = ()
- if data.get("bbox", data.get("BBOX", None)):
- req_bbox = tuple(map(float, data.get("bbox", data.get("BBOX", req_bbox)).split(",")))
-
- req_bbox = projections.to4326(req_bbox, srs)
-
- req_bbox, flip_h = bbox.normalize(req_bbox)
- box = req_bbox
-
- height = int(data.get("height", data.get("HEIGHT", height)))
- width = int(data.get("width", data.get("WIDTH", width)))
-
- z = bbox.zoom_for_bbox(box, (height, width), {"proj": "EPSG:3857"}, min_zoom=1, max_zoom=25, max_size=(10000, 10000))
-
- res = RasterTile(width, height, z, db)
- res.update_surface(box, z, style)
- image_content = StringIO.StringIO()
-
- res.surface.write_to_png(image_content)
-
- resp = image_content.getvalue()
- return (OK, content_type, resp)
diff --git a/src/style.py b/src/style.py
deleted file mode 100644
index 4018022..0000000
--- a/src/style.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# This file is part of kothic, the realtime map renderer.
-
-# kothic is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# kothic is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with kothic. If not, see .
-
-### TODO: MapCSS loading and parsing
-
-
-from debug import debug
-
-from mapcss.webcolors.webcolors import whatever_to_cairo as colorparser
-
-
-class Styling():
- """
- Class used to choose the right way of rendering an object.
- """
- def __init__(self, stylefile=None):
- self.Selectors = {}
- self.Selectors["way"] = []
- self.Selectors["node"] = []
- self.Selectors["relation"] = []
- if not stylefile:
- # self.Selectors["way"].append(StyleSelector( ( [ ( ("building",),(None) ) ] ),{"fill-color": "#00f"} ))
-
- # if stylefile=="zzzz":
- ### using "builtin" styling
- self.Selectors["way"].append(StyleSelector(([(("area",), ("yes"))]), {"fill-color": "#ff0000"}))
- self.Selectors["way"].append(StyleSelector(([(("highway",), (None))]), {"width": 1, "color": "#ff0000", "text": "name", "text-position": "line", "text-halo-radius": 2, }))
-
- self.Selectors["way"].append(StyleSelector(([(("barrier",), (None))]), {"casing-width": 1, }))
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("residential", "tertiary", "living_street"))]), {"width": 3, "color": "#ffffff", "casing-width": 5, "z-index": 10}))
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("service", "unclassified"))]), {"width": 2.5, "color": "#ccc", "casing-width": 4, "z-index": 9}))
-
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("primary", "motorway", "trunk"))]), {"width": 4, "color": "#ff0", "casing-width": 6, "z-index": 11}))
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("primary_link", "motorway_link", "trunk_link"))]), {"width": 3.5, "color": "#ff0", "casing-width": 6, "z-index": 11}))
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("secondary", ))]), {"width": 4, "color": "orange", "casing-width": 6, "z-index": 10}))
- self.Selectors["way"].append(StyleSelector(([(("living_street",), ("yes"))]), {"width": 2, "casing-width": 3, "z-index": 0}))
- self.Selectors["way"].append(StyleSelector(([(("landuse", "natural"), ("forest", "wood"))]), {"fill-color": "#020"}))
- self.Selectors["way"].append(StyleSelector(([(("landuse",), ("industrial",))]), {"fill-color": "#855"}))
- self.Selectors["way"].append(StyleSelector(([(("landuse",), ("military",))]), {"fill-color": "pink"}))
- self.Selectors["way"].append(StyleSelector(([(("waterway", "natural"), ("riverbank", "water"))]), {"fill-color": "#002"}))
- self.Selectors["way"].append(StyleSelector(([(("waterway", "natural"), ("river", "stream"))]), {"color": "#002"}))
- self.Selectors["way"].append(StyleSelector(([(("landuse", "natural"), ("grass",))]), {"fill-color": "#050", }))
- self.Selectors["way"].append(StyleSelector(([(("highway",), ("footway", "pedestrian", "path"))]), {"width": 2.5, "color": "#655", "dashes": [3, 1], "z-index": 3}))
- self.Selectors["way"].append(StyleSelector(([(("bridge",), ("yes"))]), {"casing-width": 10}))
- self.Selectors["way"].append(StyleSelector(([(("power",), ("line",))]), {"width": 1, "color": "#ccc", }))
- self.Selectors["way"].append(StyleSelector(([(("building",), (None))]), {"fill-color": "#522", "text": "addr:housenumber", "text-halo-radius": 2, "z-index": 100})) # "extrude":10,
-
- self.stylefile = stylefile
- self.useful_keys = set(["layer"])
- for objtype in self.Selectors.values(): # getting useful keys
- for selector in objtype:
- # debug(selector)
- for tag in selector.tags:
- self.useful_keys.update(set(tag[0]))
- if "text" in selector.style:
- self.useful_keys.update(set((selector.style["text"],)))
- debug(self.useful_keys)
-
- def get_style(self, objtype, tags, nodata=False):
- """
- objtype is "node", "way" or "relation"
- tags - object tags
- nodata - we won't render that now, don't need exact styling
- """
- resp = {}
- for selector in self.Selectors[objtype]:
- resp.update(selector.get_style(tags))
- if nodata:
- if resp:
- return True
- if not nodata and resp:
- # debug((tags, tags.get("layer",0)), )
- try:
- resp["layer"] = int(tags.get("layer", 0)) * 100 + resp.get("z-index", 0) + 1000
- except ValueError:
- resp["layer"] = 1000000
-
- if "text" in resp: # unpacking text
- if resp["text"] in tags:
- resp["text"] = tags[resp["text"]]
- # debug("text: %s"%resp["text"])
- else:
- del resp["text"]
- return resp
-
- def filter_tags(self, tags):
- """
- Returns only tags that are useful for rendering
- """
- # resp = {}
- # for k,v in tags.iteritems():
- # if k in self.useful_keys:
- # resp[k] = v
- return tags
-
-
-class StyleSelector():
- def __init__(self, tags, style):
- """
- Selector that decides if that style is right for the object
- tags - list of tags [(("key","key"..), ("value", "value"...)), (("key","key"..), ("value", "value"...))]
- style - MapCSS rules to apply
- """
- self.tags = tags
- self.style = {}
- for key in style:
-
- keyz = key.lower()
-
- if "color" in keyz:
- self.style[keyz] = colorparser(style[key])
- debug((colorparser(style[key]), style[key]))
- else:
- self.style[keyz] = style[key]
-
- def get_style(self, tags):
- """
- Get actual styling for object.
- """
- styled = False
- # debug(self.tags)
- for k, v in self.tags:
- for j in k:
- if j in tags:
- if v:
- if tags[j] in v:
- styled = True
- else:
- styled = True
- if styled:
- return self.style
- return {}
-
-if __name__ == "__main__":
- c = Styling()
- print c.get_style("way", {"building": "yes"})
- print c.get_style("way", {"highway": "residential"})
- print c.get_style("way", {"highway": "road"})
- print c.get_style("way", {"highway": "residential", "building": "yes"})
- print c.get_style("way", {"highwadfgaay": "resifdgsdential", "builafgding": "yedfgs"})
- print c.get_style("way", {"highwadfgaay": "resifdgsdential", "builafgding": "yedfgs"}, True)
- print c.get_style("way", {"highway": "residential", "building": "yes"}, True)
- print c.filter_tags({"highwadfgaay": "resifdgsdential", "builafgding": "yedfgs", "building": "residential"})
diff --git a/src/styles/default.mapcss b/src/styles/default.mapcss
deleted file mode 100644
index 1e8f350..0000000
--- a/src/styles/default.mapcss
+++ /dev/null
@@ -1,260 +0,0 @@
-canvas{fill-color:#a0bc92}
-
-
-/* ---------- DEFAULTS ---------- */
-way {
- /* text: name; */text-position: line; text-halo-radius:2;
- linecap: round;
- opacity: eval( min(1, (num(any(tag("layer"),1))+5)/6) );
- casing-opacity: eval( min(1, (num(any(tag("layer"),1))+5)/6) );
-
- }
-
-
-
-/* ---------- ROADS ---------- */
-way|z16-[highway] /*[!lanes]*/
- {color:white;
-
- /*casing-width: 1; */ }
-
-
-/*way|z16-[highway][lanes]
- {width: eval(cond(num(tag("lanes")) >= 1, metric("3.6m")-metric("10cm"), 0));
- color:grey; linecap: round;
- casing-width: eval(cond(num(tag("lanes")) >= 1, metric("10cm"), 0));
- casing-color:white; casing-dashes: eval(str( metric("1m") ) +"," + str( metric("1m") )); casing-linecap:butt;
- offset: eval(cond((num(tag("lanes"))/2-int(num(tag("lanes")))/2) != 0, metric("3.6m")/2, 0));
-
- }
- {width: eval(cond(num(tag("lanes")) >= 2, metric("3.6m")-metric("10cm"), 0));
- color:grey; linecap: round;
- casing-width: eval(cond(num(tag("lanes")) >= 2, metric("10cm"), 0));
- casing-color:white;casing-dashes: eval(str( metric("1m") ) +"," + str( metric("1m") )); casing-linecap:butt;
- offset: eval(cond((num(tag("lanes"))/2-int(num(tag("lanes")))/2) != 0, metric("3.6m")/2, 0)+(2-1)*metric("3.6m"));
-
- }
- {width: eval(cond(num(tag("lanes")) >= 3, metric("3.6m")-metric("10cm"), 0));
- color:grey; linecap: round;
- casing-width: eval(cond(num(tag("lanes")) >= 3, metric("10cm"), 0));
- casing-color:white;casing-dashes: eval(str( metric("1m") ) +"," + str( metric("1m") )); casing-linecap:butt;
- offset: eval((cond((num(tag("lanes"))/2-int(num(tag("lanes")))/2) != 0, metric("3.6m")/2, 0)-(2-1)*metric("3.6m")));
-
- }
- {width: eval(cond(num(tag("lanes")) >= 4, metric("3.6m")-metric("10cm"), 0));
- color:grey; linecap: round;
- casing-width: eval(cond(num(tag("lanes")) >= 4, metric("10cm"), 0));
- casing-color:white;casing-dashes: eval(str( metric("1m") ) +"," + str( metric("1m") )); casing-linecap:butt;
- offset: eval(cond((num(tag("lanes"))/2-int(num(tag("lanes")))/2) != 0, metric("3.6m")/2, 0)+(3-1)*metric("3.6m"));
-
- }
- {width: eval(cond(num(tag("lanes")) >= 5, metric("3.6m")-metric("10cm"), 0));
- color:grey; linecap: round;
- casing-width: eval(cond(num(tag("lanes")) >= 5, metric("10cm"), 0));
- casing-color:white;casing-dashes: eval(str( metric("1m") ) +"," + str( metric("1m") )); casing-linecap:butt;
- offset: eval((cond((num(tag("lanes"))/2-int(num(tag("lanes")))/2) != 0, metric("3.6m")/2, 0)-(3-1)*metric("3.6m")));
- }*/
-
-way|z16-[highway=motorway],
-way|z16-[highway=trunk],
-{width:eval(metric(4*4));}
-
-
-way|z16-[highway=primary]
-{width:eval(metric(3*4));}
-
-way|z16-[highway=secondary],
-way|z16-[highway=tertiary],
-way|z16-[highway=residential],
-way|z16-[highway=trunk_link],
-way|z16-[highway=motorway_link],
-way|z16-[highway=primary_link],
-way|z16-[highway=secondary_link],
-{width:eval(metric(2*4));}
-
-way|z16-[highway=service],
-way|z16-[highway=track],
-{width:eval(metric(1.5*4));}
-
-way|z16-[highway=footway],
-way|z16-[highway=pedestrian],
-way|z16-[highway=path],
-way|z16-[highway=steps],
-{width:eval(metric(1*4));
-}
-
-
-way[highway][lanes]{width:eval(metric( num(tag("lanes")) * 4));}
-way[width]{width:eval(metric(tag("width")));}
-
-way|z16-[highway=motorway],
-way|z16-[highway=motorway_link],
-way|z16-[highway=trunk],
-way|z16-[highway=trunk_link],
-way|z16-[highway=primary],
-way|z16-[highway=primary_link],
-way|z16-[highway=secondary],
-way|z16-[highway=secondary_link],
-way|z16-[highway=tertiary],
-way|z16-[highway=tertiary_link],
-way|z16-[highway=residential],
-way|z16-[highway=service],
-
-{image: "styles/default/asphalt.png";
-z-index:5;
-}
-
-area|z16-[amenity=parking],
-{fill-image: "styles/default/asphalt.png";
-z-index:5; casing-width:1;
-}
-
-
-way|z16-[highway=footway],
-way|z16-[highway=pedestrian],
-{image: "styles/default/paving_stones6s.png";
-z-index:4;}
-
-way|z16-[highway=track],
-{image: "styles/default/dirt.png";
-z-index:3;}
-
-way|z16-[highway=path],
-{image: "styles/default/sand.png";z-index:2;}
-
-
-way|z16-[layer<0],
-{image: ""}
-
-
-way|z16-[surface=asphalt] {image: "styles/default/asphalt.png"}
-
-way|z16-[surface=grass] {image: eval("styles/default/"+tag("surface")+".png")}
-way|z16-[surface=sand] {image: eval("styles/default/"+tag("surface")+".png")}
-way|z16-[surface=dirt] {image: eval("styles/default/"+tag("surface")+".png")}
-way|z16-[surface=granite] {color:#655}
-way|z16-[surface=paving_stones] {image: styles/default/paving_stones6s.png}
-way|z16-[landuse=field] {fill-image: styles/default/field.png}
-
-way|z17-[barrier]
- {casing-width:1; width: eval(metric(tag("width")))}
-
-way|z-16[highway=residential],
-way|z-16[highway=tertiary],
-way|z-16[highway=living_street]
-{width: 3; color:#ffffff; z-index:10;casing-width: 1;}
-
-way|z15-16[highway=service][living_street!=yes],
-way|z-16[highway=unclassified]
- {width: 2.5; color:#ccc; z-index:9;casing-width: 1;}
-
-
-way|z-16[highway=primary],
-way|z-16[highway=motorway],
-way|z-16[highway=trunk]
- {width: 4; color: #ff0; z-index:11;casing-width: 1;}
-
-way|z-16[highway=primary_link],
-way|z-16[highway=motorway_link],
-way|z-16[highway=trunk_link]
- {width: 3.5; color: #ff0; z-index:11;casing-width: 1;}
-
-way|z-16[highway=secondary]
-{width: 4; color: orange; z-index:10;casing-width: 1;}
-
-way|z15-16[highway=track]
-{width: 3; color:#252; z-index:8;casing-width: 1;}
-
-way|z15-16[living_street=yes]
- {width: 2; z-index: 2;casing-width: 1;}
-
-
-way|z15-16[highway=footway],
-way|z15-16[highway=pedestrian],
-way|z15-16[highway=path]
-{width:eval(max(2, prop("width"))); color:#655; casing-dashes: 3,1; z-index:3;casing-width: 1;}
-
-way|z15-[highway=steps]
-{z-index:5; width:eval(max(2, prop("width"))); color:#655; casing-dashes: 1,0; linecap: butt;casing-width: 1;}
-{z-index:6; width:eval(max(2, prop("width"))); dashes: eval("1," + str( max(num(any(num(metric(tag("step:length")))/100, num(metric("0.3m"))))-1, 1) ) ); color: black;casing-width: 1;}
-
-
-
-way[bridge=yes] {casing-width:eval(min(3, num(prop("width"))/2 ));casing-linecap:butt}
-
-
-area[highway][area=yes] {fill-color: eval(any(prop("fill-color"),prop("color"))); fill-image: eval(any(prop("fill-image"), prop("image")));}
-
-
-/* ---------- FORESTS ---------- */
-way[natural=forest],
-way[natural=wood],
-way[landuse=forest],
-way[landuse=wood]
- {fill-color: #020}
-
-/* ---------- WATER ---------- */
-way[waterway=riverbank],
-way[landuse=reservoir],
-way[natural=water] {fill-color: #009}
-
-way[waterway=river],
-way[waterway=stream]{color: #009;width: eval(max(3, metric(tag("width")) ))}
-
-
-
-
-/* ---------- BUILDINGS ---------- */
-
-way|z16-[building] {fill-color: #522;
-/*text: addr:housenumber;*/
-text-halo-radius:2; z-index:100; text-position: center;
-opacity: 1;
-fill-opacity: 1;
-extrude: eval(zmetric("3m")*2);
-extrude-face-color: #e2e2e2;
-extrude-face-opacity: 1;
-extrude-edge-width: 1;
-extrude-edge-color: #404040;
-}
-way|z16-[barrier]{raise: eval(zmetric(tag("min_height")));extrude-face-opacity: 0.5}
-way|z16-[barrier]{extrude: eval( zmetric(3) - num(prop("raise")) ); }
-way|z16-[barrier][height]{extrude: eval( zmetric(tag("height")) - num(prop("raise")) ); }
-
-
-way|z16-[building]{raise: eval( any( zmetric(tag("min_height")), zmetric ( num(tag("building:min_level")) * 3)));}
-
-way|z16-[building][building:levels]{extrude: eval( zmetric(num(tag("building:levels"))*3) - num(prop("raise")) );}
-way|z16-[building][height]{extrude: eval( zmetric(tag("height")) - num(prop("raise")) );}
-
-
-
-/* ---------- INDUSTRY ---------- */
-way|z17-[power=line] {width: 1; color:#ccc}
-
-
-way|z10-[landuse=industrial] {fill-color: #855}
-way|z10-[landuse=military] {fill-color: pink}
-
-/* ---------- GARDENS&co ---------- */
-way|z13-[landuse=allotments] {fill-color: #452; opacity: 0.8}
-way|z10-[landuse=field] {fill-color: #CCCC4E; opacity: 0.8}
-
-/* ---------- GRASS ---------- */
-
-way|z16-[landuse=residential],
-{fill-color: #cceecc; opacity: 0.8; fill-image: styles/default/grass.png; }
-way|z16-[landuse=grass],
-way|z16-[natural=grass]
-{fill-color: #cceecc; opacity: 0.8; fill-image: styles/default/grass.png; z-index: 6}
-
-
-/* ---------- AMENITIES ---------- */
-way|z15-[amenity=parking] {icon-image: styles/default/parking.png; }
-
-way[amenity=bench] {extrude: eval(zmetric("0.6m")); width:eval(metric("0.5m")); extrude-face-opacity:0;extrude-edge-color:black;color:brown;opacity:0.75}
-{offset:eval(metric("0.25m")); extrude-face-color:brown;extrude:eval(zmetric("1.2m"));extrude-face-opacity: 0.5}
-
-/* ---------- BORDERS ---------- */
-/*line[boundary=administrative] {width: 2; color: red; dashes:5,3; z-index:15}
-area|z-17[boundary=administrative] {text: name; text-position:center}*/
diff --git a/src/styles/default/asphalt.png b/src/styles/default/asphalt.png
deleted file mode 100644
index 9b42fe3..0000000
Binary files a/src/styles/default/asphalt.png and /dev/null differ
diff --git a/src/styles/default/dirt.png b/src/styles/default/dirt.png
deleted file mode 100644
index 2f54869..0000000
Binary files a/src/styles/default/dirt.png and /dev/null differ
diff --git a/src/styles/default/field.png b/src/styles/default/field.png
deleted file mode 100644
index 5aab849..0000000
Binary files a/src/styles/default/field.png and /dev/null differ
diff --git a/src/styles/default/grass.png b/src/styles/default/grass.png
deleted file mode 100644
index 4ffc7a1..0000000
Binary files a/src/styles/default/grass.png and /dev/null differ
diff --git a/src/styles/default/grass2.png b/src/styles/default/grass2.png
deleted file mode 100644
index 0a80df3..0000000
Binary files a/src/styles/default/grass2.png and /dev/null differ
diff --git a/src/styles/default/parking.png b/src/styles/default/parking.png
deleted file mode 100644
index 9e3ad06..0000000
Binary files a/src/styles/default/parking.png and /dev/null differ
diff --git a/src/styles/default/paving_stones6s.png b/src/styles/default/paving_stones6s.png
deleted file mode 100644
index c4176e0..0000000
Binary files a/src/styles/default/paving_stones6s.png and /dev/null differ
diff --git a/src/styles/default/sand.png b/src/styles/default/sand.png
deleted file mode 100644
index c26482f..0000000
Binary files a/src/styles/default/sand.png and /dev/null differ
diff --git a/src/styles/gisrussa.mapcss b/src/styles/gisrussa.mapcss
deleted file mode 100644
index 1645448..0000000
--- a/src/styles/gisrussa.mapcss
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- GisRussa style
-
- by Hind, 2010
-
-*/
-
-canvas
-{ antialiasing: none; fill-color: #F1FFFF; fill-opacity: 1.0; }
-
-/* =============== Polygons =============== */
-
-/* Defaults for all elements */
-way { text-color: black; font-weight: normal; font-size: 8; }
-node { text-color: black; font-weight: normal; font-size: 6; text-position: center; text-offset: 10; z-index: 1; }
-
-/* Places on small zoomlevels */
-area|z8-10[place]
-{ fill-color : #FFFACD; text-position: center; text: name; }
-
-/* Places on large zoomlevels */
-area|z11-12[landuse=residential]
-{ fill-color : #FFE4C4; text-position: center; text: name; }
-
-/* Parkings */
-area|z12-[amenity=parking]
-{ fill-color : #F0F0F0; text-position: center; text: name; }
-
-/* Retail area */
-area|z12-[landuse=retail]
-{ fill-color : #F8B880; text-position: center; text: name; }
-
-/* Schools, colleges, universities */
-area|z12-[amenity=school],
-area|z12-[amenity=university]
-{ fill-color : #F8B880; text-position: center; text: name; }
-
-/* Hospitals */
-area[amenity=doctors],area[amenity=hospital]
-{ fill-color : #F8B880; text-position: center; text: name; }
-
-/* Industrial area */
-area|z11-[landuse=industrial]
-{ fill-color : #E8E8E8; text-position: center; text: name; }
-
-/* Buildings */
-area|z13-[building][building!=garages]
-{ fill-color : #969696; text-position: center; text: addr:housenumber; }
-
-/* Garages */
-area|z13-[building=garages]
-{ fill-color : #E2E2E2; text-position: center; text: name; }
-
-/* Parks */
-area|z12-[leisure=park]
-{ fill-color : #90BE00; text-position: center; text: name; }
-
-/* Stadiums, leisures */
-area|z12-[leisure]
-{ fill-color : #F8B880; text-position: center; text: name; }
-
-/* Water */
-area|z9-[natural=water],way[waterway=riverbank]
-{ fill-color : #0080FF; text-position: center; text: name; }
-
-/* Forests and woods */
-area|z9-[natural=wood],way[landuse=forest]
-{ fill-color : #B7E999; text-position: center; text: name; }
-
-/* Wetlands */
-area|z10-[natural=wetland]
-{ fill-color : #4ACA4A; text-position: center; text: name; }
-
-/* =============== Ways =============== */
-
-/* Trunks */
-way[highway=trunk]
-{ color: #C46442; width: 4; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; shield-color: white; shield-frame-color: #C46442; shield-frame-width: 1; shield-shape: rectangular; shield-text: ref; }
-
-/* Primaries */
-way[highway=primary]
-{ color: #DC7C5A; width: 3; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Secondaries, unclassified */
-way[highway=secondary],way|z12-[highway=unclassified]
-{ color: #E68664; width: 2; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Tertiaries */
-way|z12-[highway=tertiary]
-{ color: #E88866; width: 2; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Residentials */
-way|z12-[highway=residential]
-{ color: #EE8E6C; width: 1; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Services, pedestrians */
-way|z12-[highway=service],way[highway=pedestrian]
-{ color: #C46442; width: 1; text-color: black; text-position: line; text: name; text-offset: -8; }
-
-/* Primary_links */
-way|z11-[highway=primary_link]
-{ color: #E88866; width: 2; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Tracks */
-way|z12-[highway=track]
-{ color: black; width: 1; text-color: black; text-position: line; text: name; dashes: 4; text-offset: -8; }
-
-/* Trunk_links */
-way|z11-[highway=trunk_link]
-{ color: #C46442; width: 2; text-color: black; text-position: line; text: name; text-offset: -8; }
-
-/* Unknown roads */
-way|z12-[highway=road]
-{ color: red; width: 1; text-color: black; text-position: line; text: name; text-offset: -8; }
-
-/* Roundabouts */
-way|z11-[highway][junction=roundabout]
-{ color: #E88866; width: 2; text-color: black; text-position: line; text: name; casing-width: 1; casing-color: black; text-offset: -8; }
-
-/* Railroads */
-way|z11-[railway]
-{ color: white; width: 1; text-color: black; text-position: line; text: name; dashes: 3; casing-width: 1; casing-color: black; }
-
-/* Footways, paths */
-way|z12-[highway=footway],way|z12-[highway=path]
-{ color: black; width: 1; text-color: black; text-position: line; text: name; text-offset: -8; }
-
-/* Streams */
-way|z12-[waterway=stream]
-{ color: black; width: 1; text-color: blue; text-position: line; text: name; text-offset: -8; }
-
-/* Boundary=administrative, level 4 */
-way[boundary=administrative][admin_level=4]
-{ color: #00C864; width: 1; text-color: #00C864; text-position: line; text: name; }
-/* { color: red; width: 1; dashes: 4; } */
-
-/* Boundary=administrative, level 6 */
-way[boundary=administrative][admin_level=6]
-{ color: #00C864; width: 1; text-color: #00C864; text-position: line; text: name; }
-/* { color: black; width: 1; dashes: 4; } */
-
-/* Rivers */
-way|z9-[waterway]
-{ color: blue; width: 1; text-color: blue; text-position: line; text: name; text-offset: -8; }
-
-/* Power lines */
-way|z12-[power=line]
-{ color: gray; width: 1; }
-
-/* Fences, walls */
-way|z12-[barrier=fence],way|z12-[barrier=wall]
-{ color: #00C864; width: 1; text-color: #00C864; text-position: line; text: name; dashes: 4; }
-
-/* =============== Nodes =============== */
-
-/* Place names */
-node[place] { z-index:10; }
-node[place=city]
-{ icon-image: icons/0001.png; font-size: 10; text: name; font-weight: 700; }
-
-node[place=town]
-{ icon-image: icons/0002.png; font-size: 10; text: name; font-weight: 700; }
-
-node|z13-[place=village]
-{ icon-image: icons/0003.png; font-size: 9; text: name; font-weight: 400; }
-
-node|z13-[place=suburb],node|z13-[place=hamlet]
-{ icon-image: icons/0004.png; font-size: 9; text: name; font-weight: 200; }
-
-node|z13-[traffic_calming=bump],node|z12-[traffic_calming=hump]
-{ icon-image: icons/1283.png; text: name; }
-
-node|z13-[highway=bus_stop]
-{ icon-image: icons/1240.png; text: name; }
-
-node|z13-[amenity=post_office]
-{ icon-image: icons/1077.png; text: name; }
-
-node|z13-[natural=tree]
-{ icon-image: icons/1040.png; text: name; }
-
-node|z13-[shop=convenience],node|z13-[shop=mall],node|z13-[shop=supermarket]
-{ icon-image: icons/1070.png; text: name; }
-
-node|z13-[shop=alcohol]
-{ icon-image: icons/1054.png; text: name; }
-
-node|z13-[shop=clothes]
-{ icon-image: icons/1071.png; text: name; }
-
-node|z13-[amenity=restaurant],node|z13-[amenity=food_court],node|z13-[amenity=fast_food]
-{ icon-image: icons/1031.png; text: name; }
-
-node|z13-[tourism=hotel],node|z13-[tourism=hostel],node|z13-[tourism=motel]
-{ icon-image: icons/1032.png; text: name; }
-
-node|z13-[tourism=camp_site]
-{ icon-image: icons/1033.png; text: name; }
-
-node|z13-[historic]
-{ icon-image: icons/1034.png; text: name; }
-
-node|z13-[amenity=library]
-{ icon-image: icons/1037.png; text: name; }
-
-node|z13-[tourism=viewpoint]
-{ icon-image: icons/1038.png; text: name; }
-
-node|z13-[amenity=school]
-{ icon-image: icons/1039.png; text: name; }
-
-node|z13-[tourism=zoo]
-{ icon-image: icons/1041.png; text: name; }
-
-node|z13-[amenity=theatre]
-{ icon-image: icons/1044.png; text: name; }
-
-node|z13-[amenity=bar],node|z13-[amenity=pub]
-{ icon-image: icons/1045.png; text: name; }
-
-node|z13-[leisure=golf_course],node|z13-[sport=golf]
-{ icon-image: icons/1048.png; text: name; }
-
-node|z13-[leisure=ice_rink],node|z13-[sport=skating]
-{ icon-image: icons/1051.png; text: name; }
-
-node|z13-[sport=swimming]
-{ icon-image: icons/1052.png; text: name; }
-
-node|z13-[leisure=sports_centre][!sport]
-{ icon-image: icons/1053.png; text: name; }
-
-node|z13-[amenity=pharmacy]
-{ icon-image: icons/1072.png; text: name; }
-
-node|z13-[amenity=fuel]
-{ icon-image: icons/1074.png; text: name; }
-
-node|z13-[amenity=bank]
-{ icon-image: icons/1078.png; text: name; }
-
-node|z13-[amenity=parking]
-{ icon-image: icons/1098.png; text: name; }
-
-node|z13-[amenity=doctors],node|z13-[amenity=hospital]
-{ icon-image: icons/1104.png; text: name; }
diff --git a/src/styles/icons/PD/buildings-hatch.png b/src/styles/icons/PD/buildings-hatch.png
deleted file mode 100644
index 1770236..0000000
Binary files a/src/styles/icons/PD/buildings-hatch.png and /dev/null differ
diff --git a/src/styles/icons/PD/construction-hatch.png b/src/styles/icons/PD/construction-hatch.png
deleted file mode 100644
index 2bce759..0000000
Binary files a/src/styles/icons/PD/construction-hatch.png and /dev/null differ
diff --git a/src/styles/icons/PD/ekaterinburg-metro-green.png b/src/styles/icons/PD/ekaterinburg-metro-green.png
deleted file mode 100644
index 89fd9c6..0000000
Binary files a/src/styles/icons/PD/ekaterinburg-metro-green.png and /dev/null differ
diff --git a/src/styles/icons/PD/minsk_metro_blue.png b/src/styles/icons/PD/minsk_metro_blue.png
deleted file mode 100644
index 77454a4..0000000
Binary files a/src/styles/icons/PD/minsk_metro_blue.png and /dev/null differ
diff --git a/src/styles/icons/PD/minsk_metro_red.png b/src/styles/icons/PD/minsk_metro_red.png
deleted file mode 100644
index a1bcdc4..0000000
Binary files a/src/styles/icons/PD/minsk_metro_red.png and /dev/null differ
diff --git a/src/styles/icons/PD/praha-metro-green.png b/src/styles/icons/PD/praha-metro-green.png
deleted file mode 100644
index ca61161..0000000
Binary files a/src/styles/icons/PD/praha-metro-green.png and /dev/null differ
diff --git a/src/styles/icons/PD/praha-metro-red.png b/src/styles/icons/PD/praha-metro-red.png
deleted file mode 100644
index b178fe2..0000000
Binary files a/src/styles/icons/PD/praha-metro-red.png and /dev/null differ
diff --git a/src/styles/icons/PD/praha-metro-yellow.png b/src/styles/icons/PD/praha-metro-yellow.png
deleted file mode 100644
index bf33f34..0000000
Binary files a/src/styles/icons/PD/praha-metro-yellow.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-blue.png b/src/styles/icons/PD/vienna-ubahn-blue.png
deleted file mode 100644
index 196ce6c..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-blue.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-brown.png b/src/styles/icons/PD/vienna-ubahn-brown.png
deleted file mode 100644
index 2f83723..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-brown.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-green.png b/src/styles/icons/PD/vienna-ubahn-green.png
deleted file mode 100644
index 1f0d719..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-green.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-orange.png b/src/styles/icons/PD/vienna-ubahn-orange.png
deleted file mode 100644
index ad785d0..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-orange.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-purple.png b/src/styles/icons/PD/vienna-ubahn-purple.png
deleted file mode 100644
index c7ba382..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-purple.png and /dev/null differ
diff --git a/src/styles/icons/PD/vienna-ubahn-red.png b/src/styles/icons/PD/vienna-ubahn-red.png
deleted file mode 100644
index b224d65..0000000
Binary files a/src/styles/icons/PD/vienna-ubahn-red.png and /dev/null differ
diff --git a/src/styles/landuses.mapcss b/src/styles/landuses.mapcss
deleted file mode 100644
index 6a3c807..0000000
--- a/src/styles/landuses.mapcss
+++ /dev/null
@@ -1,37 +0,0 @@
-canvas{fill-color:#a0bc92}
-
-way[landuse] {fill-color: red; }
-way[landuse=garages] {fill-color: yellow; }
-way[amenity=parking] {fill-color: #cccc00; }
-way[landuse=military] {fill-color: pink; }
-way[landuse=retail] {fill-color: blue; }
-
-way[landuse=reservoir] {fill-color: lightblue; }
-way[natural=water] {fill-color: lightblue; }
-way[waterway=riverbank] {fill-color: lightblue; }
-
-way[landuse=cemetery] {fill-color: black; }
-
-
-way[landuse=industrial] {fill-color: gray; }
-way[landuse=residential] {fill-color: white; }
-
-
-way[landuse=allotments] {fill-color: #ccffcc; }
-way[landuse=field] {fill-color: #ccffcc; }
-way[landuse=farmland] {fill-color: #ccffcc; }
-way[landuse=farm] {fill-color: #ccffcc; }
-
-way[landuse=construction] {fill-color: #987654; }
-way[landuse=greenfield] {fill-color: #987654; }
-way[landuse=brownfield] {fill-color: #987654; }
-
-way[landuse=quarry] {fill-color: lightgray; }
-
-way[landuse=grass] {fill-color: lightgreen}
-way[landuse=meadow] {fill-color: lightgreen}
-
-way[landuse=forest] {fill-color: green}
-way[natural=wood] {fill-color: green}
-
-/*way[building] {fill-color: silver; }*/
\ No newline at end of file
diff --git a/src/styles/linky.mapcss b/src/styles/linky.mapcss
deleted file mode 100755
index 51b60d1..0000000
--- a/src/styles/linky.mapcss
+++ /dev/null
@@ -1,4109 +0,0 @@
-meta {
- title: "OSM2Linky mapcss stylesheet";
- version: "0.1.0.1"
-}
-
-
-
-
-/* */
-
-/*
- ele[-11000]{ fill-color: #98b7f5}
- ele[-10000]{ fill-color: #9fbcf5}
- ele[-9000] { fill-color: #a6c1f5 }
- ele[-8000] { fill-color: #abc4f5 }
- ele[-7000] { fill-color: #b0c7f5 }
- ele[-6000] { fill-color: #b5caf5 }
- ele[-5000] { fill-color: #bacef5 }
- ele[-4000] { fill-color: #bfd1f5 }
- ele[-3000] { fill-color: #c4d4f5 }
- ele[-2000] { fill-color: #c6d6f5 }
- ele[-500] { fill-color: #c9d7f5 }
- ele[-200] { fill-color: rgb(231, 209, 175); fill-opacity: 0.1 }
- ele[200] { fill-color: rgb(231, 209, 175); fill-opacity: 0.2 }
- ele[500] { fill-color: rgb(226, 203, 170); fill-opacity: 0.2 }
- ele[1000] { fill-color: rgb(217, 194, 159); fill-opacity: 0.3 }
- ele[2000] { fill-color: rgb(208, 184, 147); fill-opacity: 0.4 }
- ele[3000] { fill-color: rgb(197, 172, 136); fill-opacity: 0.5 }
- ele[4000] { fill-color: rgb(188, 158, 120); fill-opacity: 0.55 }
- ele[5000] { fill-color: rgb(179, 139, 102); fill-opacity: 0.6 }
- ele[6000] { fill-color: rgb(157, 121, 87); fill-opacity: 0.7 }
- ele[7000] { fill-color: rgb(157, 121, 87); fill-opacity: 0.8 }
- ele[8000] { fill-color: rgb(144, 109, 77); fill-opacity: 0.9 }
-*/
-
-
-
-
-/* */
-
-canvas {
- background-color: #F5F4E4;
- fill-color: #C4E7F5;
- default-lines: false;
- default-points: false
-}
-/* background-color: #F5F4E4 - [natural=coastline] z10-, 1.1.1 */
-/* fill-color: #C4E7F5 - [natural=ocean] z0-15, 1.1.2 */
-
-/*
--x-kot-true-layers: false;
--x-kot-dem-hack: true;
-*/
-
-way::* {
- linejoin: miter;
- linecap: none
-}
-
-
-way:closed, relation[type=multipolygon] {
- fill-opacity: 1.0
-}
-
-*::* {
- text-halo-color: white;
- text-anchor-horizontal: center;
- text-anchor-vertical: center
-}
-
-
-
-
-/* 1. () */
-
-/* 1.1. */
-
-/* 1.1.1. */
-
-area|z0-9[natural=coastline] {
- fill-color: #F5F4E4;
- z-index: 2
-}
-area|z10-[natural=coastline] {
- fill-color: #FFFBF2;
- z-index: 2
-}
-
-/* #F5F2E9 #FCF7ED
--x-kot-layer: bottom
-*/
-
-
-/* 1.1.2. */
-
-area|z0-7[natural=ocean] {
- fill-color: #C4E7F5;
- z-index: 18
-}
-
-area|z8-10[natural=ocean] {
- fill-color: #B0E1F5;
- casing-color: #A0D4EB;
- casing-width: 0.3;
- z-index: 18
-}
-
-area|z10-11[natural=ocean] {
- fill-color: #B0E1F5;
- casing-color: #A0D4EB;
- casing-width: 0.4;
- z-index: 18
-}
-
-area|z12-15[natural=ocean] {
- fill-color: #AADEF2;
- casing-color: #95CFE8;
- casing-width: 0.6;
- z-index: 18
-}
-
-area|z16-17[natural=ocean] {
- fill-color: #A5DCF2;
- casing-color: #77C3E0;
- casing-width: 0.7;
- z-index: 18
-}
-/* casing-width: 0.8, 1.3 */
-
-area|z18-[natural=ocean] {
- fill-color: #A5DCF2;
- casing-color: #77C3E0;
- casing-width: 0.8;
- z-index: 18
-}
-/* casing-width: 0.9, 1.3 */
-/*
--x-kot-layer: bottom
-*/
-
-
-
-/* 1.3. */
-
-/* 1.3.1-n. */
-
-
-area|z6[natural=water] {
- fill-color: #C4E7F5;
- z-index: 18
- }
-
-area|z7[natural=water] {
- fill-color: #B8E3F5;
- z-index: 18
-}
-
-
-area|z8-10[natural=water],
-area|z8-10[waterway=riverbank] {
- fill-color: #B0E1F5;
- casing-color: #A0D4EB;
- casing-width: 0.3;
- z-index: 18
-}
-
-
-line|z9[waterway=river] {
- color: #B0E1F5;
- width: 1;
- z-index: 18
-}
-
-line|z10[waterway=river] {
- color: #B0E1F5;
- width: 1.0;
- casing-color: #A0D4EB;
- casing-width: 0.3;
- z-index: 18
-}
-
-area|z10-11[landuse=reservoir],
-area|z10-11[waterway=riverbank],
-area|z10-11[natural=water] {
- fill-color: #B0E1F5;
- casing-color: #A0D4EB;
- casing-width: 0.4;
- z-index: 18
-}
-
-area|z12-15[landuse=reservoir],
-area|z12-15[waterway=riverbank],
-area|z12-15[natural=water],
-area|z12-15[waterway=stream],
-area|z12-15[waterway=lake],
-area|z12-15[waterway=oxbow],
-area|z12-15[waterway=river],
-area|z12-15[waterway=canal],
-area|z12-15[waterway=drain],
-area|z12-15[waterway=ditch] {
- fill-color: #AADEF2;
- casing-color: #95CFE8;
- casing-width: 0.6;
- z-index: 18
-}
- line|z12-13[landuse=reservoir],
- line|z12-13[waterway=riverbank],
- line|z12-13[natural=water],
- line|z12-13[waterway=stream],
- line|z12-13[waterway=lake],
- line|z12-13[waterway=oxbow],
- line|z12-13[waterway=river],
- line|z12-13[waterway=canal],
- line|z12-13[waterway=drain],
- line|z12-13[waterway=ditch] {
- color: #AADEF2;
- width: 1.2;
- casing-color: #95CFE8;
- casing-width: 0.6;
- z-index: 18
-}
- line|z14-15[landuse=reservoir],
- line|z14-15[waterway=riverbank],
- line|z14-15[natural=water],
- line|z14-15[waterway=stream],
- line|z14-15[waterway=lake],
- line|z14-15[waterway=oxbow],
- line|z14-15[waterway=river],
- line|z14-15[waterway=canal],
- line|z14-15[waterway=drain],
- line|z14-15[waterway=ditch] {
- color: #AADEF2;
- width: 2.0;
- casing-color: #95CFE8;
- casing-width: 0.6;
- z-index: 18
-}
-
-area|z16-17[natural=water],
-area|z16-17[natural=lake],
-area|z16-17[water=lake],
-area|z16-17[waterway=stream],
-area|z16-17[landuse=reservoir],
-area|z16-17[landuse=basin],
-area|z16-17[waterway=lake],
-area|z16-17[waterway=pond],
-area|z16-17[waterway=oxbow],
-area|z16-17[waterway=river],
-area|z16-17[waterway=riverbank],
-area|z16-17[waterway=canal],
-area|z16-17[waterway=ditch],
-area|z16-17[waterway=drain] {
- fill-color: #A5DCF2;
- casing-color: #77C3E0;
- casing-width: 0.7;
- z-index: 18
-}
- line|z16[natural=water],
- line|z16[natural=lake],
- line|z16[water=lake],
- line|z16[waterway=stream],
- line|z16[landuse=reservoir],
- line|z16[landuse=basin],
- line|z16[waterway=lake],
- line|z16[waterway=oxbow],
- line|z16[waterway=river],
- line|z16[waterway=riverbank],
- line|z16[waterway=canal],
- line|z16[waterway=ditch],
- line|z16[waterway=drain] {
- color: #A5DCF2;
- width: 5.5;
- casing-color: #77C3E0;
- casing-width: 0.7;
- z-index: 18
-}
- line|z17[natural=water],
- line|z17[natural=lake],
- line|z17[water=lake],
- line|z17[waterway=stream],
- line|z17[landuse=reservoir],
- line|z17[landuse=basin],
- line|z17[waterway=lake],
- line|z17[waterway=oxbow],
- line|z17[waterway=river],
- line|z17[waterway=riverbank],
- line|z17[waterway=canal],
- line|z17[waterway=ditch],
- line|z17[waterway=drain] {
- color: #A5DCF2;
- width: 7.0;
- casing-color: #77C3E0;
- casing-width: 0.7;
- z-index: 18
-}
-
-area|z18-[natural=water],
-area|z18-[natural=lake],
-area|z18-[water=lake],
-area|z18-[waterway=stream],
-area|z18-[landuse=reservoir],
-area|z18-[landuse=basin],
-area|z18-[waterway=lake],
-area|z18-[waterway=pond],
-area|z18-[waterway=oxbow],
-area|z18-[waterway=river],
-area|z18-[waterway=riverbank],
-area|z18-[waterway=canal],
-area|z18-[waterway=ditch],
-area|z18-[waterway=drain] {
- fill-color: #A5DCF2;
- casing-color: #77C3E0;
- casing-width: 0.8;
- z-index: 18
-}
- line|z18-[natural=water],
- line|z18-[natural=lake],
- line|z18-[water=lake],
- line|z18-[waterway=stream],
- line|z18-[landuse=reservoir],
- line|z18-[landuse=basin],
- line|z18-[waterway=lake],
- line|z18-[waterway=oxbow],
- line|z18-[waterway=river],
- line|z18-[waterway=riverbank],
- line|z18-[waterway=canal],
- line|z18-[waterway=ditch],
- line|z18-[waterway=drain] {
- color: #A5DCF2;
- width: 8.5;
- casing-color: #77C3E0;
- casing-width: 0.8;
- z-index: 18
-}
-
-
-
-/* 1.4. */
-
-/* 1.4.1-n. */
-
-area|z10-11[landuse=industrial] {
- fill-color: #EAE8EB;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-area|z12-17[landuse=industrial] {
- fill-color: #E9E6EB;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-area|z18-[landuse=industrial] {
- fill-color: #E4E1E6;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-
-area|z10-11[landuse=residential],
-area|z10-11[landuse=retail],
-area|z10-11[landuse=commercial],
-area|z10-11[residential=urban] {
- fill-color: #FAF5ED;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-area|z12-17[landuse=residential],
-area|z12-17[landuse=retail],
-area|z12-17[landuse=commercial],
-area|z12-17[residential=urban] {
- fill-color: #F7F2EB;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-area|z18-[landuse=residential],
-area|z18-[landuse=retail],
-area|z18-[landuse=commercial],
-area|z18-[residential=urban] {
- fill-color: #F5EFE6;
- fill-position: background;
- z-index: 10;
- -x-kot-layer: bottom
-}
-
-area|z12-[landuse=grass],
-area|z12-[landuse=meadow],
-area|z12-[landuse=recreation_ground] {
- fill-color: #EAF7D7;
- fill-position: background;
- z-index: 11;
- -x-kot-layer: bottom
-}
-
-area|z11[leisure=park] {
- fill-color: #DCF2CB;
- fill-position: background;
- z-index: 12;
- -x-kot-layer: bottom
-}
-
-area|z12-14[leisure=park] {
- fill-color: #D4EDC2;
- fill-position: background;
- z-index: 12;
- -x-kot-layer: bottom
-}
-
-area|z15-17[leisure=park] {
- fill-color: #C9EBB7;
- fill-position: background;
- z-index: 12;
- -x-kot-layer: bottom
-}
-
-area|z18-[leisure=park] {
- fill-color: #C2E8AE;
- fill-position: background;
- z-index: 12;
- -x-kot-layer: bottom
-}
-
-area|z8-11[natural=wood],
-area|z8-11[landuse=forest] {
- fill-color: #C9EBC7;
- fill-position: background;
- z-index: 16;
- -x-kot-layer: bottom
-}
-
-area|z12-14[natural=wood],
-area|z12-14[landuse=forest] {
- fill-color: #C1E3C1;
- fill-position: background;
- z-index: 16;
- -x-kot-layer: bottom
-}
-
-area|z15-17[natural=wood],
-area|z15-17[landuse=forest] {
- fill-color: #AEE0AD;
- fill-position: background;
- z-index: 16;
- -x-kot-layer: bottom
-}
-
-area|z18-[natural=wood],
-area|z18-[landuse=forest] {
- fill-color: #9FDE9E;
- fill-position: background;
- z-index: 16;
- -x-kot-layer: bottom
-}
-
-
-
-
-
-/*
-
-area|z10-[place=city],
-area|z10-[place=town],
-{background-color:#FAF7F7; z-index:1}
-
-
-area|z10-[place=hamlet],
-area|z10-[place=village],
-area|z10-[place=locality]
-{background-color:#f3eceb; z-index:1}
-
-
-area|z10-[residential=rural]
-{background-color:#f4d7c7; z-index:2}
-
-
-area|z10-[landuse=allotments],
-area|z10-15[leisure=garden],
-area|z10-15[landuse=orchard]
- {background-color:#edf2c1; z-index:3}
-
-
-area|z10-[leisure=park] {background-color: #c4e9a4; z-index:3;background-image:parks2.png}
-
-
-area|z16-[leisure=garden],
-area|z16-[landuse=orchard]
- {background-image:sady10.png; z-index:3}
-
-
-area|z12-[natural=scrub]
- {background-color: #e5f5dc;background-image:kust1.png; z-index:3}
-area|z12-[natural=heath]
- {background-color: #ecffe5; z-index:3}
-
-
-
-
-area|z10-[landuse=industrial],area|z10-[landuse=military] {background-color: #ddd8da; z-index:3}
-
-
-area|z15-[amenity=parking]{background-color: #ecedf4; z-index:3}
-
-
-area|z4-[natural=desert] {background-image: desert22.png}
-
-
-
-
-
-area|z4-[natural=forest], area|z4-[natural=wood],
-area|z4-[landuse=forest], area|z4-[landuse=wood]
- {background-color: #d6f4c6; z-index:3}
-
-
-area|z10-[landuse=garages] {background-color: #ddd8da; z-index:3}
-
-
-area|z12-[natural=forest], area|z12-[natural=wood],
-area|z12-[landuse=forest], area|z12-[landuse=wood]{text:name; text-offset:0; font-size:10; font-family: DejaVu Serif Italic; text-color:green; text-allow-overlap: false;-x-kot-min-distance: 0 }
-
-
-area|z12-[landuse=grass],
-area|z12-[natural=grass],
-area|z12-[natural=meadow],
-area|z12-[landuse=meadow],
-area|z12-[landuse=recreation_ground],
-{background-color: #f4ffe5; z-index:4}
-
-
-area|z10-[natural=wetland] {background-image:swamp_world2.png; z-index:4}
-
-
-area|z10-[landuse=farmland], area|z10-[landuse=farm], area|z10-[landuse=field] {background-color: #fff5c4; z-index:5}
-
-
-area|z6-9[place=city],
-area|z6-9[place=town]
- {background-color: #ffe1d0; z-index:5}
-
-
-
-
-area|z10-[landuse=cemetery] {background-color: #e5f5dc; z-index:5; background-image:cemetry7_2.png}
-
-
-area|z13-[aeroway=aerodrome] {color: #008ac6; width: 0.8; z-index:5; background-image:bull2.png}
-
-
-area|z12-[leisure=stadium],
-area|z12-[leisure=pitch],
-{background-color: #e3deb1;z-index:5;}
-
-
-
-
-area|z9-[natural=water]{text:name; text-offset:1; font-size:10; font-family: DejaVu Serif Italic; text-color:#285fd1; text-allow-overlap: false }
-
-*/
-
-/*
-text -
-text-offset -
-font-size -
-font-family -
-text-color -
-text-allow-overlap -
-text-halo-radius - . mapnik'a -
-text-halo-color -
-*/
-
-
-
-
-/* 1.6. */
-
-/* 1.6.1. */
-
-area|z14[building=building],
-area|z14[building=yes],
-area|z14[building=detached],
-area|z14[building=terrace],
-area|z14[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital] {
- fill-color: #DED3D3;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=building]::border,
- area|z14[building=yes]::border,
- area|z14[building=detached]::border,
- area|z14[building=terrace]::border,
- area|z14[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital]::border {
- color: #C4BBBB;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=building],
-area|z15[building=yes],
-area|z15[building=detached],
-area|z15[building=terrace],
-area|z15[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital] {
- fill-color: #DED3D3;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=building]::border,
- area|z15[building=yes]::border,
- area|z15[building=detached]::border,
- area|z15[building=terrace]::border,
- area|z15[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital]::border {
- color: #C4BBBB;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=building],
-area|z16-17[building=yes],
-area|z16-17[building=detached],
-area|z16-17[building=terrace],
-area|z16-17[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital] {
- fill-color: #D4C9C9;
- fill-opacity: 1.0;
- z-index: 20
-}
-/* fill-color: #D9CECE */
- area|z16-17[building=building]::border,
- area|z16-17[building=yes]::border,
- area|z16-17[building=detached]::border,
- area|z16-17[building=terrace]::border,
- area|z16-17[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital]::border {
- color: #B8A9A9;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=building],
-area|z18-[building=yes],
-area|z18-[building=detached],
-area|z18-[building=terrace],
-area|z18-[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital] {
- fill-color: #CFC4C4;
- fill-opacity: 1.0;
- z-index: 20
-}
-/* fill-color: #D9CCCC */
- area|z18-[building=building]::border,
- area|z18-[building=yes]::border,
- area|z18-[building=detached]::border,
- area|z18-[building=terrace]::border,
- area|z18-[building][building!=building][building!=detached][building!=terrace][building!=yes][building!=commercial][building!=office][building!=offices][building!=public][building!=retail][building!=shop][building!=store][building!=apartments][building!=condominium][building!=hotel][building!=house][building!=hut][building!=residential][building!=factory][building!=farm][building!=garage][building!=garages][building!=greenhouse][building!=hangar][building!=industrial][building!=roof][building!=service][building!=warehouse][building!=education][building!=kindergarten][building!=school][building!=university][building!=hospital]::border {
- color: #B8A9A9;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.2. */
-
-area|z14[building=commercial],
-area|z14[building=office],
-area|z14[building=offices],
-area|z14[building=public],
-area|z14[building=retail],
-area|z14[building=shop],
-area|z14[building=store] {
- fill-color: #D9CCCC;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=commercial]::border,
- area|z14[building=office]::border,
- area|z14[building=offices]::border,
- area|z14[building=public]::border,
- area|z14[building=retail]::border,
- area|z14[building=shop]::border,
- area|z14[building=store]::border {
- color: #BFACAC;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=commercial],
-area|z15[building=office],
-area|z15[building=offices],
-area|z15[building=public],
-area|z15[building=retail],
-area|z15[building=shop],
-area|z15[building=store] {
- fill-color: #D9CCCC;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=commercial]::border,
- area|z15[building=office]::border,
- area|z15[building=offices]::border,
- area|z15[building=public]::border,
- area|z15[building=retail]::border,
- area|z15[building=shop]::border,
- area|z15[building=store]::border {
- color: #BFACAC;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=commercial],
-area|z16-17[building=office],
-area|z16-17[building=offices],
-area|z16-17[building=public],
-area|z16-17[building=retail],
-area|z16-17[building=shop],
-area|z16-17[building=store] {
- fill-color: #D4C1C1;
- fill-opacity: 1.0;
- z-index: 20
-}
-/* fill-color: #D1C5C5 */
- area|z16-17[building=commercial]::border,
- area|z16-17[building=office]::border,
- area|z16-17[building=offices]::border,
- area|z16-17[building=public]::border,
- area|z16-17[building=retail]::border,
- area|z16-17[building=shop]::border,
- area|z16-17[building=store]::border {
- color: #B39D9D;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=commercial],
-area|z18-[building=office],
-area|z18-[building=offices],
-area|z18-[building=public],
-area|z18-[building=retail],
-area|z18-[building=shop],
-area|z18-[building=store] {
- fill-color: #CFBABA;
- fill-opacity: 1.0;
- z-index: 20
-}
-/* fill-color: #D1C2C2 */
- area|z18-[building=commercial]::border,
- area|z18-[building=office]::border,
- area|z18-[building=offices]::border,
- area|z18-[building=public]::border,
- area|z18-[building=retail]::border,
- area|z18-[building=shop]::border,
- area|z18-[building=store]::border {
- color: #B39D9D;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.3. */
-
-area|z14[building=apartments],
-area|z14[building=condominium],
-area|z14[building=hotel],
-area|z14[building=house],
-area|z14[building=hut],
-area|z14[building=residential] {
- fill-color: #E0DDD5;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=apartments]::border,
- area|z14[building=condominium]::border,
- area|z14[building=hotel]::border,
- area|z14[building=house]::border,
- area|z14[building=hut]::border,
- area|z14[building=residential]::border {
- color: #BFBAAC;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=apartments],
-area|z15[building=condominium],
-area|z15[building=hotel],
-area|z15[building=house],
-area|z15[building=hut],
-area|z15[building=residential] {
- fill-color: #E0DDD5;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=apartments]::border,
- area|z15[building=condominium]::border,
- area|z15[building=hotel]::border,
- area|z15[building=house]::border,
- area|z15[building=hut]::border,
- area|z15[building=residential]::border {
- color: #BFBAAC;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=apartments],
-area|z16-17[building=condominium],
-area|z16-17[building=hotel],
-area|z16-17[building=house],
-area|z16-17[building=hut],
-area|z16-17[building=residential] {
- fill-color: #D4D1CB;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z16-17[building=apartments]::border,
- area|z16-17[building=condominium]::border,
- area|z16-17[building=hotel]::border,
- area|z16-17[building=house]::border,
- area|z16-17[building=hut]::border,
- area|z16-17[building=residential]::border {
- color: #B8B3A7;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=apartments],
-area|z18-[building=condominium],
-area|z18-[building=hotel],
-area|z18-[building=house],
-area|z18-[building=hut],
-area|z18-[building=residential] {
- fill-color: #CCC9C2;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z18-[building=apartments]::border,
- area|z18-[building=condominium]::border,
- area|z18-[building=hotel]::border,
- area|z18-[building=house]::border,
- area|z18-[building=hut]::border,
- area|z18-[building=residential]::border {
- color: #B8B3A7;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.4. , */
-
-area|z14[building=factory],
-area|z14[building=farm],
-area|z14[building=garage],
-area|z14[building=garages],
-area|z14[building=greenhouse],
-area|z14[building=hangar],
-area|z14[building=industrial],
-area|z14[building=roof],
-area|z14[building=service],
-area|z14[building=warehouse] {
- fill-color: #D9DEDD;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=factory]::border,
- area|z14[building=farm]::border,
- area|z14[building=garage]::border,
- area|z14[building=garages]::border,
- area|z14[building=greenhouse]::border,
- area|z14[building=hangar]::border,
- area|z14[building=industrial]::border,
- area|z14[building=roof]::border,
- area|z14[building=service]::border,
- area|z14[building=warehouse]::border {
- color: #B1BDBC;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=factory],
-area|z15[building=farm],
-area|z15[building=garage],
-area|z15[building=garages],
-area|z15[building=greenhouse],
-area|z15[building=hangar],
-area|z15[building=industrial],
-area|z15[building=roof],
-area|z15[building=service],
-area|z15[building=warehouse] {
- fill-color: #D9DEDD;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=factory]::border,
- area|z15[building=farm]::border,
- area|z15[building=garage]::border,
- area|z15[building=garages]::border,
- area|z15[building=greenhouse]::border,
- area|z15[building=hangar]::border,
- area|z15[building=industrial]::border,
- area|z15[building=roof]::border,
- area|z15[building=service]::border,
- area|z15[building=warehouse]::border {
- color: #B1BDBC;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=factory],
-area|z16-17[building=farm],
-area|z16-17[building=garage],
-area|z16-17[building=garages],
-area|z16-17[building=greenhouse],
-area|z16-17[building=hangar],
-area|z16-17[building=industrial],
-area|z16-17[building=roof],
-area|z16-17[building=service],
-area|z16-17[building=warehouse] {
- fill-color: #D4D9D8;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z16-17[building=factory]::border,
- area|z16-17[building=farm]::border,
- area|z16-17[building=garage]::border,
- area|z16-17[building=garages]::border,
- area|z16-17[building=greenhouse]::border,
- area|z16-17[building=hangar]::border,
- area|z16-17[building=industrial]::border,
- area|z16-17[building=roof]::border,
- area|z16-17[building=service]::border,
- area|z16-17[building=warehouse]::border {
- color: #B0B8B7;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=factory],
-area|z18-[building=farm],
-area|z18-[building=garage],
-area|z18-[building=garages],
-area|z18-[building=greenhouse],
-area|z18-[building=hangar],
-area|z18-[building=industrial],
-area|z18-[building=roof],
-area|z18-[building=service],
-area|z18-[building=warehouse] {
- fill-color: #CFD4D3;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z18-[building=factory]::border,
- area|z18-[building=farm]::border,
- area|z18-[building=garage]::border,
- area|z18-[building=garages]::border,
- area|z18-[building=greenhouse]::border,
- area|z18-[building=hangar]::border,
- area|z18-[building=industrial]::border,
- area|z18-[building=roof]::border,
- area|z18-[building=service]::border,
- area|z18-[building=warehouse]::border {
- color: #B0B8B7;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.5. */
-
-area|z14[building=education],
-area|z14[building=kindergarten],
-area|z14[building=school],
-area|z14[building=university] {
- fill-color: #E3DED3;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=education]::border,
- area|z14[building=kindergarten]::border,
- area|z14[building=school]::border,
- area|z14[building=university]::border {
- color: #C7BFAF;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=education],
-area|z15[building=kindergarten],
-area|z15[building=school],
-area|z15[building=university] {
- fill-color: #E3DED3;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=education]::border,
- area|z15[building=kindergarten]::border,
- area|z15[building=school]::border,
- area|z15[building=university]::border {
- color: #C7BFAF;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=education],
-area|z16-17[building=kindergarten],
-area|z16-17[building=school],
-area|z16-17[building=university] {
- fill-color: #D4CFC1;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z16-17[building=education]::border,
- area|z16-17[building=kindergarten]::border,
- area|z16-17[building=school]::border,
- area|z16-17[building=university]::border {
- color: #BAB3A8;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=education],
-area|z18-[building=kindergarten],
-area|z18-[building=school],
-area|z18-[building=university] {
- fill-color: #CCC5B4;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z18-[building=education]::border,
- area|z18-[building=kindergarten]::border,
- area|z18-[building=school]::border,
- area|z18-[building=university]::border {
- color: #BAB3A8;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.6. */
-
-area|z14[building=hospital] {
- fill-color: #EDDAE0;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=hospital]::border {
- color: #D1C5C8;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=hospital] {
- fill-color: #EDDAE0;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=hospital]::border {
- color: #D1C5C8;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=hospital] {
- fill-color: #EBD1D9;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z16-17[building=hospital]::border {
- color: #CFB4BA;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=hospital] {
- fill-color: #E6CCD5;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z18-[building=hospital]::border {
- color: #CFB4BA;
- width: 0.7;
- z-index: 21
-}
-
-
-/* 1.6.7. */
-
-area|z14[building=chapel],
-area|z14[building=church],
-area|z14[building=temple] {
- fill-color: #F0E7CE;
- fill-opacity: 0.5;
- z-index: 20
-}
- area|z14[building=chapel]::border,
- area|z14[building=church]::border,
- area|z14[building=temple]::border {
- color: #C9BA89;
- opacity: 0.5;
- width: 0.5;
- z-index: 21
-}
-
-area|z15[building=chapel],
-area|z15[building=church],
-area|z15[building=temple] {
- fill-color: #F0E7CE;
- fill-opacity: 0.8;
- z-index: 20
-}
- area|z15[building=chapel]::border,
- area|z15[building=church]::border,
- area|z15[building=temple]::border {
- color: #C9BA89;
- opacity: 0.8;
- width: 0.6;
- z-index: 21
-}
-
-area|z16-17[building=chapel],
-area|z16-17[building=church],
-area|z16-17[building=temple] {
- fill-color: #F0E2B4;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z16-17[building=chapel]::border,
- area|z16-17[building=church]::border,
- area|z16-17[building=temple]::border {
- color: #C9BA89;
- width: 0.6;
- z-index: 21
-}
-
-area|z18-[building=chapel],
-area|z18-[building=church],
-area|z18-[building=temple] {
- fill-color: #EDDEAB;
- fill-opacity: 1.0;
- z-index: 20
-}
- area|z18-[building=chapel]::border,
- area|z18-[building=church]::border,
- area|z18-[building=temple]::border {
- color: #C9BA89;
- width: 0.7;
- z-index: 21
-}
-
-
-
-
-/* 2. */
-
-/* 2.1. */
-
-/* 2.1.1. "highway=motorway", "highway=motorway_link" */
-
-line|z6[highway=motorway] {
- color: #F0A689;
- width: 0.5;
- z-index: 50
-}
-
-line|z7[highway=motorway] {
- color: #F0A689;
- width: 0.6;
- z-index: 50
-}
-
-
-line|z8[highway=motorway] {
- color: #F09D7D;
- width: 0.7;
- z-index: 50
-}
-
-line|z9[highway=motorway] {
- color: #F09D7D;
- width: 1.3;
- z-index: 50
-}
- line|z9[highway=motorway_link] {
- color: #F09D7D;
- width: 1.3;
- z-index: 43
-}
-
-line|z10[highway=motorway] {
- color: #F29672;
- width: 1.7;
- z-index: 50
-}
- line|z10[highway=motorway_link] {
- color: #F29672;
- width: 1.7;
- z-index: 43
-}
-
-line|z11[highway=motorway] {
- color: #F29672;
- width: 2.3;
- z-index: 50
-}
- line|z11[highway=motorway_link] {
- color: #F29672;
- width: 2.3;
- z-index: 43
-}
-
-line|z12[highway=motorway] {
- color: #F78F65;
- width: 2.8;
- casing-color: #BD2900;
- casing-width: 0.2;
- z-index: 50
-}
- line|z12[highway=motorway_link] {
- color: #F78F65;
- width: 1.3;
- casing-color: #BD2900;
- casing-width: 0.2;
- z-index: 43
-}
-
-line|z13[highway=motorway] {
- color: #F78F65;
- width: 4.2;
- casing-color: #BD2900;
- casing-width: 0.3;
- z-index: 50
-}
- line|z13[highway=motorway_link] {
- color: #F78F65;
- width: 2.5;
- casing-color: #BD2900;
- casing-width: 0.3;
- z-index: 43
-}
-
-line|z14[highway=motorway] {
- color: #F78F65;
- width: 6.0;
- casing-color: #BD2900;
- casing-width: 0.4;
- z-index: 50
-}
- line|z14[highway=motorway_link] {
- color: #F78F65;
- width: 3.5;
- casing-color: #BD2900;
- casing-width: 0.4;
- z-index: 43
-}
-
-line|z15[highway=motorway] {
- color: #F78F65;
- width: 8.0;
- casing-color: #BD2900;
- casing-width: 0.5;
- z-index: 50
-}
- line|z15[highway=motorway_link] {
- color: #F78F65;
- width: 4.5;
- casing-color: #BD2900;
- casing-width: 0.5;
- z-index: 43
-}
-
-line|z16[highway=motorway] {
- color: #F78F65;
- width: 11.5;
- casing-color: #BD2900;
- casing-width: 0.6;
- z-index: 50
-}
- line|z16[highway=motorway_link] {
- color: #F78F65;
- width: 7.0;
- casing-color: #BD2900;
- casing-width: 0.6;
- z-index: 43
-}
-
-line|z17[highway=motorway] {
- color: #F58356;
- width: 14.0;
- casing-color: #BD2900;
- casing-width: 0.7;
- z-index: 50
-}
- line|z17[highway=motorway_link] {
- color: #F58356;
- width: 9.0;
- casing-color: #BD2900;
- casing-width: 0.7;
- z-index: 43
-}
-
-line|z18-[highway=motorway] {
- color: #F58356;
- width: 16.0;
- casing-color: #BD2900;
- casing-width: 1.0;
- z-index: 50
-}
- line|z18-[highway=motorway_link] {
- color: #F58356;
- width: 11.0;
- casing-color: #BD2900;
- casing-width: 1.0;
- z-index: 43
-}
-
-area|z15-[area:highway=motorway] {
- color: #F58356;
- width: 1;
- fill-color: #F58356;
- casing-color: #BD2900;
- casing-width: .1;
- z-index: 51
-}
-
-/* 2.1.2. "highway=trunk", "highway=trunk_link" */
-
-line|z6[highway=trunk] {
- color: #F5B28C;
- width: 0.5;
- z-index: 49
-}
-
-line|z7[highway=trunk] {
- color: #F5B28C;
- width: 0.6;
- z-index: 49
-}
-
-line|z8[highway=trunk] {
- color: #F7AE83;
- width: 0.7;
- z-index: 49
-}
-
-
-line|z9[highway=trunk] {
- color: #F7AE83;
- width: 1.2;
- z-index: 49
-}
-
-
-line|z10[highway=trunk] {
- color: #FAAB7D;
- width: 1.6;
- z-index: 49
-}
- line|z10[highway=trunk_link] {
- color: #FAAB7D;
- width: 1.6;
- z-index: 42
-}
-
-line|z11[highway=trunk] {
- color: #FAAB7D;
- width: 2.1;
- z-index: 49
-}
- line|z11[highway=trunk_link] {
- color: #FAAB7D;
- width: 2.1;
- z-index: 42
-}
-
-line|z12[highway=trunk] {
- color: #FCA572;
- width: 2.5;
- casing-color: #CF5A1F;
- casing-width: 0.2;
- z-index: 49
-}
- line|z12[highway=trunk_link] {
- color: #FCA572;
- width: 1.3;
- casing-color: #CF5A1F;
- casing-width: 0.2;
- z-index: 42
-}
-
-line|z13[highway=trunk] {
- color: #FCA572;
- width: 4.0;
- casing-color: #CF5A1F;
- casing-width: 0.3;
- z-index: 49
-}
- line|z13[highway=trunk_link] {
- color: #FCA572;
- width: 2.5;
- casing-color: #CF5A1F;
- casing-width: 0.3;
- z-index: 42
-}
-
-line|z14[highway=trunk] {
- color: #FCA572;
- width: 5.6;
- casing-color: #CF5A1F;
- casing-width: 0.4;
- z-index: 49
-}
- line|z14[highway=trunk_link] {
- color: #FCA572;
- width: 3.4;
- casing-color: #CF5A1F;
- casing-width: 0.4;
- z-index: 42
-}
-
-line|z15[highway=trunk] {
- color: #FCA572;
- width: 7.8;
- casing-color: #CF5A1F;
- casing-width: 0.5;
- z-index: 49
-}
- line|z15[highway=trunk_link] {
- color: #FCA572;
- width: 4.3;
- casing-color: #CF5A1F;
- casing-width: 0.5;
- z-index: 42
-}
-
-line|z16[highway=trunk] {
- color: #FCA572;
- width: 10.8;
- casing-color: #CF5A1F;
- casing-width: 0.6;
- z-index: 49
-}
- line|z16[highway=trunk_link] {
- color: #FCA572;
- width: 7.0;
- casing-color: #CF5A1F;
- casing-width: 0.6;
- z-index: 42
-}
-
-line|z17[highway=trunk] {
- color: #FCA572;
- width: 13.0;
- casing-color: #CF5A1F;
- casing-width: 0.7;
- z-index: 49
-}
- line|z17[highway=trunk_link] {
- color: #FCA572;
- width: 9.0;
- casing-color: #CF5A1F;
- casing-width: 0.7;
- z-index: 42
-}
-
-line|z18-[highway=trunk] {
- color: #FF9E66;
- width: 15.5;
- casing-color: #CF5A1F;
- casing-width: 0.9;
- z-index: 49
-}
- line|z18-[highway=trunk_link] {
- color: #FF9E66;
- width: 11.0;
- casing-color: #CF5A1F;
- casing-width: 0.9;
- z-index: 42
-}
-
-area|z15-[area:highway=trunk] {
- color: #FF9E66;
- width: 1;
- fill-color: #FF9E66;
- casing-color: #BD2900;
- casing-width: .1;
- z-index: 50
-}
-
-/* 2.1.3. "highway=primary", "highway=primary_link" */
-
-
-
-line|z7[highway=primary] {
- color: #F7CF92;
- width: 0.6;
- z-index: 48
-}
-
-
-line|z8[highway=primary] {
- color: #FACE8C;
- width: 0.7;
- z-index: 48
-}
-
-line|z9[highway=primary] {
- color: #FACE8C;
- width: 1.0;
- z-index: 48
-}
-
-line|z10[highway=primary] {
- color: #FCCF86;
- width: 1.5;
- z-index: 48
-}
-
-
-line|z11[highway=primary] {
- color: #FCCF86;
- width: 2.0;
- z-index: 48
-}
- line|z11[highway=primary_link] {
- color: #FCCF86;
- width: 2.0;
- z-index: 41
-}
-
-line|z12[highway=primary] {
- color: #FCCC7E;
- width: 2.2;
- casing-color: #C97F16;
- casing-width: 0.2;
- z-index: 48
-}
- line|z12[highway=primary] {
- color: #FCCC7E;
- width: 1.2;
- casing-color: #C97F16;
- casing-width: 0.2;
- z-index: 41
-}
-
-line|z13[highway=primary] {
- color: #FCCC7E;
- width: 3.7;
- casing-color: #C97F16;
- casing-width: 0.3;
- z-index: 48
-}
- line|z13[highway=primary_link] {
- color: #FCCC7E;
- width: 2.3;
- casing-color: #C97F16;
- casing-width: 0.3;
- z-index: 41
-}
-
-line|z14[highway=primary] {
- color: #FCCC7E;
- width: 5.3;
- casing-color: #C97F16;
- casing-width: 0.4;
- z-index: 48
-}
- line|z14[highway=primary_link] {
- color: #FCCC7E;
- width: 3.2;
- casing-color: #C97F16;
- casing-width: 0.4;
- z-index: 41
-}
-
-line|z15[highway=primary] {
- color: #FCCC7E;
- width: 7.5;
- casing-color: #C97F16;
- casing-width: 0.5;
- z-index: 48
-}
- line|z15[highway=primary_link] {
- color: #FCCC7E;
- width: 4.0;
- casing-color: #C97F16;
- casing-width: 0.5;
- z-index: 41
-}
-
-line|z16[highway=primary] {
- color: #FCCC7E;
- width: 10.0;
- casing-color: #C97F16;
- casing-width: 0.6;
- z-index: 48
-}
- line|z16[highway=primary_link] {
- color: #FCCC7E;
- width: 7.0;
- casing-color: #C97F16;
- casing-width: 0.6;
- z-index: 41
-}
-
-line|z17[highway=primary] {
- color: #FCCC7E;
- width: 12.5;
- casing-color: #C97F16;
- casing-width: 0.7;
- z-index: 48
-}
- line|z17[highway=primary_link] {
- color: #FCCC7E;
- width: 9.0;
- casing-color: #C97F16;
- casing-width: 0.7;
- z-index: 41
-}
-
-line|z18-[highway=primary] {
- color: #FCC572;
- width: 15.0;
- casing-color: #C97F16;
- casing-width: 0.8;
- z-index: 48
-}
- line|z18-[highway=primary_link] {
- color: #FCC572;
- width: 11.0;
- casing-color: #C97F16;
- casing-width: 0.8;
- z-index: 41
-}
-
-area|z15-[area:highway=primary] {
- color: #FCC572;
- width: 1;
- fill-color: #FCC572;
- casing-color: #C97F16;
- casing-width: .1;
- z-index: 49
-}
-
-
-/* 2.1.4. "highway=secondary", "highway=secondary_link" */
-
-line|z9[highway=secondary] {
- color: #CCCCCC;
- width: 0.5;
- z-index: 47
-}
-
-
-line|z10[highway=secondary] {
- color: #CCCCCC;
- width: 0.7;
- z-index: 47
-}
- line|z10[highway=secondary_link] {
- color: #CCCCCC;
- width: 0.7;
- z-index: 40
-}
-
-line|z11[highway=secondary] {
- color: #CCCCCC;
- width: 1.0;
- z-index: 47
-}
- line|z11[highway=secondary_link] {
- color: #CCCCCC;
- width: 1.0;
- z-index: 40
-}
-
-line|z12[highway=secondary] {
- color: #FAEB96;
- width: 2.0;
- casing-color: #CF9100;
- casing-width: 0.2;
- z-index: 47
-}
- line|z12[highway=secondary_link] {
- color: #FAEB96;
- width: 1.2;
- casing-color: #CF9100;
- casing-width: 0.2;
- z-index: 40
-}
-
-line|z13[highway=secondary] {
- color: #FAEB96;
- width: 3.3;
- casing-color: #CF9100;
- casing-width: 0.3;
- z-index: 47
-}
- line|z13[highway=secondary_link] {
- color: #FAEB96;
- width: 2.2;
- casing-color: #CF9100;
- casing-width: 0.3;
- z-index: 40
-}
-
-line|z14[highway=secondary] {
- color: #FAEB96;
- width: 5.0;
- casing-color: #CF9100;
- casing-width: 0.3;
- z-index: 47
-}
- line|z14[highway=secondary_link] {
- color: #FAEB96;
- width: 3.0;
- casing-color: #CF9100;
- casing-width: 0.3;
- z-index: 40
-}
-
-line|z15[highway=secondary] {
- color: #FAEB96;
- width: 7.3;
- casing-color: #CF9100;
- casing-width: 0.4;
- z-index: 47
-}
- line|z15[highway=secondary_link] {
- color: #FAEB96;
- width: 4.0;
- casing-color: #CF9100;
- casing-width: 0.4;
- z-index: 40
-}
-
-line|z16[highway=secondary] {
- color: #FAEB96;
- width: 9.5;
- casing-color: #CF9100;
- casing-width: 0.5;
- z-index: 47
-}
- line|z16[highway=secondary_link] {
- color: #FAEB96;
- width: 7.0;
- casing-color: #CF9100;
- casing-width: 0.5;
- z-index: 40
-}
-
-line|z17[highway=secondary] {
- color: #FFEE8C;
- width: 11.7;
- casing-color: #CF9100;
- casing-width: 0.6;
- z-index: 47
-}
- line|z17[highway=secondary_link] {
- color: #FFEE8C;
- width: 9.0;
- casing-color: #CF9100;
- casing-width: 0.6;
- z-index: 40
-}
-
-line|z18-[highway=secondary] {
- color: #FFEE8C;
- width: 13.5;
- casing-color: #CF9100;
- casing-width: 0.7;
- z-index: 47
-}
- line|z18-[highway=secondary_link] {
- color: #FFEE8C;
- width: 11.0;
- casing-color: #CF9100;
- casing-width: 0.7;
- z-index: 40
-}
-
-area|z15-[area:highway=secondary] {
- color: #FFEE8C;
- width: 1;
- fill-color: #FFEE8C;
- casing-color: #CF9100;
- casing-width: .1;
- z-index: 48
-}
-
-
-
-/* 2.1.5. "highway=tertiary", "highway=tertiary_link" */
-
-line|z10[highway=tertiary] {
- color: #CCCCCC;
- width: 0.5;
- z-index: 46
-}
- line|z10[highway=tertiary_link] {
- color: #CCCCCC;
- width: 0.5;
- z-index: 39
-}
-
-line|z11[highway=tertiary] {
- color: #CCCCCC;
- width: 0.7;
- z-index: 46
-}
- line|z11[highway=tertiary_link] {
- color: #CCCCCC;
- width: 0.7;
- z-index: 39
-}
-
-line|z12[highway=tertiary] {
- color: #CCCCCC;
- width: 1.0;
- z-index: 46
-}
- line|z12[highway=tertiary_link] {
- color: #CCCCCC;
- width: 1.0;
- z-index: 39
-}
-
-line|z13[highway=tertiary] {
- color: #FFFDC4;
- width: 3.0;
- casing-color: #8F884F;
- casing-width: 0.3;
- z-index: 46
-}
- line|z13[highway=tertiary_link] {
- color: #FFFDC4;
- width: 2.0;
- casing-color: #8F884F;
- casing-width: 0.3;
- z-index: 39
-}
-
-line|z14[highway=tertiary] {
- color: #FFFDC4;
- width: 4.5;
- casing-color: #8F884F;
- casing-width: 0.3;
- z-index: 46
-}
- line|z14[highway=tertiary_link] {
- color: #FFFDC4;
- width: 2.8;
- casing-color: #8F884F;
- casing-width: 0.3;
- z-index: 39
-}
-
-line|z15[highway=tertiary] {
- color: #FFFDC4;
- width: 6.5;
- casing-color: #8F884F;
- casing-width: 0.4;
- z-index: 46
-}
- line|z15[highway=tertiary_link] {
- color: #FFFDC4;
- width: 4.0;
- casing-color: #8F884F;
- casing-width: 0.4;
- z-index: 39
-}
-
-line|z16[highway=tertiary] {
- color: #FFFDC4;
- width: 8.5;
- casing-color: #8F884F;
- casing-width: 0.4;
- z-index: 46
-}
- line|z16[highway=tertiary_link] {
- color: #FFFDC4;
- width: 7.0;
- casing-color: #8F884F;
- casing-width: 0.4;
- z-index: 39
-}
-
-line|z17[highway=tertiary] {
- color: #FFFDB8;
- width: 10.3;
- casing-color: #8F884F;
- casing-width: 0.5;
- z-index: 46
-}
- line|z17[highway=tertiary_link] {
- color: #FFFDB8;
- width: 9.0;
- casing-color: #8F884F;
- casing-width: 0.5;
- z-index: 39
-}
-
-line|z18-[highway=tertiary] {
- color: #FFFDB8;
- width: 12.0;
- casing-color: #8F884F;
- casing-width: 0.6;
- z-index: 46
-}
- line|z18-[highway=tertiary_link] {
- color: #FFFDB8;
- width: 11.0;
- casing-color: #8F884F;
- casing-width: 0.6;
- z-index: 39
-}
-
-area|z15-[area:highway=tertiary] {
- color: #FFFDB8;
- width: 1;
- fill-color: #FFFDB8;
- casing-color: #8F884F;
- casing-width: .1;
- z-index: 47
-}
-
-/* 2.1.6. "highway=unclassified", "highway=road" */
-
-line|z11[highway=unclassified],
-line|z11[highway=road] {
- color: #CCCCCC;
- width: 0.4;
- z-index: 38
-}
-
-line|z12[highway=unclassified],
-line|z12[highway=road] {
- color: #CCCCCC;
- width: 0.5;
- z-index: 38
-}
-
-line|z13[highway=unclassified],
-line|z13[highway=road] {
- color: #BFBFBF;
- width: 1.6;
- z-index: 38
-}
-
-line|z14[highway=unclassified],
-line|z14[highway=road] {
- color: #FFFFFF;
- width: 2.5;
- casing-color: #8F8F8F;
- casing-width: 0.3;
- z-index: 38
-}
-
-line|z15[highway=unclassified],
-line|z15[highway=road] {
- color: #FFFFFF;
- width: 4.0;
- casing-color: #8F8F8F;
- casing-width: 0.4;
- z-index: 38
-}
-
-line|z16[highway=unclassified],
-line|z16[highway=road] {
- color: #FFFFFF;
- width: 7.0;
- casing-color: #8F8F8F;
- casing-width: 0.4;
- z-index: 38
-}
-
-line|z17[highway=unclassified],
-line|z17[highway=road] {
- color: #FFFFFF;
- width: 9.0;
- casing-color: #8F8F8F;
- casing-width: 0.5;
- z-index: 38
-}
-
-line|z18-[highway=unclassified],
-line|z18-[highway=road] {
- color: #FFFFFF;
- width: 11.0;
- casing-color: #8F8F8F;
- casing-width: 0.6;
- z-index: 38
-}
-
-area|z15-[area:highway=unclassified],
-area|z15-[area:highway=road] {
- color: #FFFFFF;
- width: 1;
- fill-color: #FFFFFF;
- casing-color: #8F8F8F;
- casing-width: .1;
- z-index: 39
-}
-
-/* 2.1.7. "highway=residential", "highway=living_street" */
-
-line|z12[highway=residential],
-line|z12[highway=living_street] {
- color: #CCCCCC;
- width: 0.4;
- z-index: 37
-}
-
-line|z13[highway=residential],
-line|z13[highway=living_street] {
- color: #BFBFBF;
- width: 1.2;
- z-index: 37
-}
-
-line|z14[highway=residential],
-line|z14[highway=living_street] {
- color: #FFFFFF;
- width: 2.5;
- casing-color: #8F8F8F;
- casing-width: 0.3;
- z-index: 37
-}
-
-line|z15[highway=residential],
-line|z15[highway=living_street] {
- color: #FFFFFF;
- width: 4.0;
- casing-color: #8F8F8F;
- casing-width: 0.4;
- z-index: 37
-}
-
-line|z16[highway=residential],
-line|z16[highway=living_street] {
- color: #FFFFFF;
- width: 7.0;
- casing-color: #8F8F8F;
- casing-width: 0.4;
- z-index: 37
-}
-
-line|z17[highway=residential],
-line|z17[highway=living_street] {
- color: #FFFFFF;
- width: 9.0;
- casing-color: #8F8F8F;
- casing-width: 0.5;
- z-index: 37
-}
-
-line|z18-[highway=residential],
-line|z18-[highway=living_street] {
- color: #FFFFFF;
- width: 11.0;
- casing-color: #8F8F8F;
- casing-width: 0.6;
- z-index: 37
-}
-
-area|z15-[area:highway=residential],
-area|z15-[area:highway=living_street] {
- color: #FFFFFF;
- width: 1;
- fill-color: #FFFFFF;
- casing-color: #8F8F8F;
- casing-width: .1;
- z-index: 39
-}
-
-/* 2.1.8. "highway=service" */
-
-line|z13[highway=service] {
- color: #CCCCCC;
- width: 0.8;
- z-index: 35
-}
-
-line|z14[highway=service] {
- color: #C7C7C7;
- width: 1.3;
- casing-color: #FFFFFF;
- casing-width: 0.9;
- casing-opacity: 0.7;
- z-index: 35
-}
-
-line|z15[highway=service] {
- color: #FFFFFF;
- width: 2.3;
- casing-color: #8C8C8C;
- casing-width: 0.4;
- z-index: 35
-}
-
-line|z16[highway=service] {
- color: #FFFFFF;
- width: 4.5;
- casing-color: #8C8C8C;
- casing-width: 0.4;
- z-index: 35
-}
-
-line|z17[highway=service] {
- color: #FFFFFF;
- width: 5.2;
- casing-color: #8C8C8C;
- casing-width: 0.5;
- z-index: 35
-}
-
-line|z18-[highway=service] {
- color: #FFFFFF;
- width: 6.0;
- casing-color: #8C8C8C;
- casing-width: 0.6;
- z-index: 35
-}
-
-area|z15-[area:highway=service] {
- color: #FFFFFF;
- width: 1;
- fill-color: #FFFFFF;
- casing-color: #8C8C8C;
- casing-width: .1;
- z-index: 36
-}
-
-/* 2.1.9. "highway=track" */
-
-line|z13[highway=track] {
- color: #B3A186;
- width: 0.6;
- z-index: 34
-}
-
-line|z14[highway=track] {
- color: #AD9B7F;
- width: 0.7;
- z-index: 34
-}
-/* casing-width: 0.7;
- casing-color: #FFFFFF;
- casing-opacity: 0.6;
- casing-linecap: round; */
-
-line|z15[highway=track] {
- color: #AD9B7F;
- width: 1.2;
- z-index: 34
-}
-
-line|z16[highway=track] {
- color: #AD9B7F;
- width: 1.8;
- z-index: 34
-}
-
-line|z17[highway=track] {
- color: #9E8C6F;
- width: 2.3;
- z-index: 34
-}
-
-line|z18-[highway=track] {
- color: #947A5F;
- width: 2.5;
- casing-color: #8C7357;
- casing-width: 0.5;
- z-index: 34
-}
- line|z18-[highway=track]::pseudocasing {
- color: #FFFFFF;
- width: 4.5;
- opacity: 0.5;
- z-index: 33
-}
-
-
-
-/* 2.2. */
-
-/* 2.2.1. "highway=pedestrian" */
-
-area|z12[highway=pedestrian][area=yes],
-area|z12[area:highway=pedestrian] {
- fill-color: #CCCCCC;
- linejoin: miter;
- z-index: 30
-}
- line|z12[highway=pedestrian] {
- color: #CCCCCC;
- width: 0.4;
- z-index: 36
-}
-
-area|z13[highway=pedestrian][area=yes],
-area|z13[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- width: 0.0;
- linejoin: miter;
- z-index: 30
-}
- line|z13[highway=pedestrian] {
- color: #D4CAC3;
- width: 1.2;
- z-index: 36
-}
-
-area|z14[highway=pedestrian][area=yes],
-area|z14[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- casing-width: 0.3;
- casing-color: #918C87;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z14[highway=pedestrian] {
- color: #F7F0EB;
- width: 2.0;
- casing-color: #918C87;
- casing-width: 0.3;
- z-index: 36
-}
-
-area|z15[highway=pedestrian][area=yes],
-area|z15[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- casing-width: 0.4;
- casing-color: #918C87;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z15[highway=pedestrian] {
- color: #F7F0EB;
- width: 3.5;
- casing-width: 0.4;
- casing-color: #918C87;
- z-index: 36
-}
-
-area|z16[highway=pedestrian][area=yes],
-area|z16[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- casing-width: 0.4;
- casing-color: #918C87;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z16[highway=pedestrian] {
- color: #F7F0EB;
- width: 6.0;
- casing-width: 0.4;
- casing-color: #918C87;
- z-index: 36
-}
-
-area|z17[highway=pedestrian][area=yes],
-area|z17[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- casing-width: 0.5;
- casing-color: #918C87;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z17[highway=pedestrian] {
- color: #F7F0EB;
- width: 9.0;
- casing-width: 0.5;
- casing-color: #918C87;
- z-index: 36
-}
-
-area|z18-[highway=pedestrian][area=yes],
-area|z18-[area:highway=pedestrian] {
- fill-color: #F7F0EB;
- casing-width: 0.6;
- casing-color: #918C87;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z18-[highway=pedestrian] {
- color: #FAF0F4;
- width: 11.0;
- casing-color: #918C87;
- casing-width: 0.6;
- z-index: 36
-}
-
-
-/* 2.2.2. "highway=cycleway" */
-
-line|z13[highway=cycleway] {
- color: #97A698;
- width: 0.6;
- z-index: 33
-}
-
-line|z14[highway=cycleway] {
- color: #8D9E8E;
- width: 0.9;
- z-index: 33
-}
-
-line|z15[highway=cycleway] {
- color: #6B826D;
- width: 1.0;
- z-index: 33
-}
-
-line|z16[highway=cycleway] {
- color: #627A64;
- width: 1.3;
- z-index: 33
-}
-
-line|z17[highway=cycleway] {
- color: #4E6951;
- width: 1.7;
- z-index: 33
-}
-
-line|z18-[highway=cycleway] {
- color: #DCE0DC;
- width: 2.2;
- casing-width: 0.6;
- casing-color: #4E6951;
- z-index: 33
-}
- line|z18-[highway=cycleway]::pseudocasing {
- color: #FFFFFF;
- width: 4.4;
- opacity: 0.5;
- z-index: 33
-}
-
-
-/* 2.2.3. "highway=bridleway" */
-/* */
-
-
-/* 2.2.4. "highway=footway" */
-
-/* */
-line|z14[highway=footway] {
- color: #826527;
- width: 0.6;
- dashes: 1,2;
- z-index: 32
-}
- line|z14[highway=footway]::pseudocasing {
- color: #FFFFFF;
- width: 1.2;
- opacity: 0.4;
- z-index: 32
-}
-
-area|z15[highway=footway][area=yes],
-area|z15[area:highway=footway] {
- fill-color: #F5F2E9;
- casing-width: 0.4;
- casing-color: #CCC4AD;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z15[highway=footway] {
- color: #826527;
- width: 0.8;
- dashes: 1,2;
- z-index: 32
-}
- line|z15[highway=footway]::pseudocasing {
- color: #FFFFFF;
- width: 1.8;
- opacity: 0.4;
- z-index: 32
-}
-
-area|z16[highway=footway][area=yes],
-area|z16[area:highway=footway] {
- fill-color: #F5F2E9;
- color: #F5F2E9;
- width: 0.5;
- casing-width: 0.4;
- casing-color: #CCC4AD;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z16[highway=footway] {
- color: #826527;
- width: 1.2;
- dashes: 2,3;
- z-index: 32
-}
- line|z16[highway=footway]::pseudocasing {
- color: #FFFFFF;
- width: 2.2;
- opacity: 0.4;
- z-index: 32
-}
-
-area|z17[highway=footway][area=yes],
-area|z17[area:highway=footway] {
- fill-color: #F5F2E9;
- color: #F5F2E9;
- width: 0.6;
- casing-width: 0.5;
- casing-color: #CCC4AD;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z17[highway=footway] {
- color: #826527;
- width: 1.6;
- dashes: 2,4;
- z-index: 32
-}
- line|z17[highway=footway]::pseudocasing {
- color: #FFFFFF;
- width: 2.4;
- opacity: 0.4;
- z-index: 32
-}
-
-area|z18-[highway=footway][area=yes],
-area|z18-[area:highway=footway] {
- fill-color: #F5F2E9;
- color: #F5F2E9;
- width: 0.6;
- casing-width: 0.6;
- casing-color: #CCC4AD;
- casing-linejoin: miter;
- z-index: 30
-}
- line|z18-[highway=footway] {
- color: #826527;
- width: 1.8;
- dashes: 2,4;
- z-index: 32
-}
- line|z18-[highway=footway]::pseudocasing {
- color: #FFFFFF;
- width: 2.8;
- opacity: 0.4;
- z-index: 32
-}
-
-
-/* 2.2.5. "highway=path" */
-
-/* */
-line|z14[highway=path] {
- color: #525252;
- width: 0.5;
- dashes: 5,3;
- z-index: 31
-}
- line|z14[highway=path]::pseudocasing {
- color: #FFFFFF;
- width: 0.9;
- opacity: 0.4;
- z-index: 31
-}
-
-line|z15[highway=path] {
- color: #525252;
- width: 0.7;
- dashes: 5,3;
- z-index: 31
-}
- line|z15[highway=path]::pseudocasing {
- color: #FFFFFF;
- width: 1.2;
- opacity: 0.4;
- z-index: 31
-}
-
-line|z16[highway=path] {
- color: #525252;
- width: 1.1;
- dashes: 5,3;
- z-index: 31
-}
- line|z16[highway=path]::pseudocasing {
- color: #FFFFFF;
- width: 1.6;
- opacity: 0.4;
- z-index: 31
-}
-
-line|z17[highway=path] {
- color: #525252;
- width: 1.3;
- dashes: 6,4;
- z-index: 31
-}
- line|z17[highway=path]::pseudocasing {
- color: #FFFFFF;
- width: 2.0;
- opacity: 0.4;
- z-index: 31
-}
-
-line|z18-[highway=path] {
- color: #525252;
- width: 1.5;
- dashes: 6,4;
- z-index: 31
-}
- line|z18-[highway=path]::pseudocasing {
- color: #FFFFFF;
- width: 2.3;
- opacity: 0.4;
- z-index: 31
-}
-
-
-/* 2.2.5. "highway=steps" */
-
-line|z16-17[highway=steps] {
- width: 3.0;
- color: #705940;
- dashes: 1,2;
- linecap: butt;
- z-index: 37
-}
- line|z16-17[highway=steps]::pseudocasing {
- color: #FFFFFF;
- width: 3.5;
- opacity: 0.6;
- z-index: 36
-}
-line|z18-[highway=steps] {
- width: 4.0;
- color: #705940;
- dashes: 1,2;
- linecap: butt;
- z-index: 37
-}
- line|z18-[highway=steps]::pseudocasing {
- color: #FFFFFF;
- width: 4.8;
- opacity: 0.6;
- z-index: 36
-}
-/*
- text: name;
- text-position: line;
- text-color: #404040;
- font-family: DejaVu Sans Book;
- font-size: 9;
- text-halo-radius: 1;
- text-halo-color: #ffffff;
- text-halo-radius: 1;
- text-halo-color: #ffffff;
-
- , "".
-linecap:butt , "" .
-*/
-
-
-
-
-
-/* 2.3. , */
-
-/* 2.3.1. "railway=rail" */
-
-line|z6[railway=rail][!usage][!service],
-line|z6[railway=rail][usage=main],
-line|z6[railway=rail][service=main] {
- width: 0.3;
- color: #9E9E9E;
- opacity: 0.5;
- z-index: 35
-}
-
-line|z7[railway=rail][!usage][!service],
-line|z7[railway=rail][usage=main],
-line|z7[railway=rail][service=main] {
- width: 0.4;
- color: #9E9E9E;
- opacity: 0.7;
- z-index: 35
-}
-
-line|z8[railway=rail][!usage][!service],
-line|z8[railway=rail][usage=main],
-line|z8[railway=rail][service=main] {
- width: 0.5;
- color: #969696;
- opacity: 0.8;
- z-index: 35
-}
-
-line|z9[railway=rail][!usage][!service],
-line|z9[railway=rail][usage=main],
-line|z9[railway=rail][service=main] {
- width: 0.9;
- color: #969696;
- z-index: 35
-}
-
-line|z10[railway=rail][!usage][!service],
-line|z10[railway=rail][usage=main],
-line|z10[railway=rail][service=main] {
- width: 1.2;
- color: #969696;
- z-index: 35
-}
-
-line|z11[railway=rail][!usage][!service],
-line|z11[railway=rail][usage=main],
-line|z11[railway=rail][service=main] {
- width: 1.4;
- color: #969696;
- z-index: 35
-}
-
-line|z12[railway=rail][!usage][!service],
-line|z12[railway=rail][usage=main],
-line|z12[railway=rail][service=main] {
- width: 1.6;
- color: #858585;
- z-index: 62
-}
- line|z12[railway=rail][!usage][!service]::ticks,
- line|z12[railway=rail][usage=main]::ticks,
- line|z12[railway=rail][service=main]::ticks {
- width: 1.0;
- color: #FFFFFF;
- dashes: 6,6;
- z-index: 63
-}
-/*
- :
- - ()
- - ,
-*/
-
-line|z13[railway=rail][!usage][!service],
-line|z13[railway=rail][usage=main],
-line|z13[railway=rail][service=main] {
- width: 2.0;
- color: #858585;
- z-index: 62
-}
- line|z13[railway=rail][!usage][!service]::ticks,
- line|z13[railway=rail][usage=main]::ticks,
- line|z13[railway=rail][service=main]::ticks {
- width: 1.4;
- color: #FFFFFF;
- dashes: 6,6;
- z-index: 63
-}
-
-line|z14[railway=rail][!usage][!service],
-line|z14[railway=rail][usage=main],
-line|z14[railway=rail][service=main] {
- width: 2.6;
- color: #858585;
- z-index: 62
-}
- line|z14[railway=rail][!usage][!service]::ticks,
- line|z14[railway=rail][usage=main]::ticks,
- line|z14[railway=rail][service=main]::ticks {
- width: 2.0;
- color: #FFFFFF;
- dashes: 7,7;
- z-index: 63
-}
-
-line|z15[railway=rail][!usage][!service],
-line|z15[railway=rail][usage=main],
-line|z15[railway=rail][service=main] {
- width: 3.0;
- color: #858585;
- z-index: 62
-}
- line|z15[railway=rail][!usage][!service]::ticks,
- line|z15[railway=rail][usage=main]::ticks,
- line|z15[railway=rail][service=main]::ticks {
- width: 2.4;
- color: #FFFFFF;
- dashes: 9,9;
- z-index: 63
-}
-
-line|z16-[railway=rail][!usage][!service],
-line|z16-[railway=rail][usage=main],
-line|z16-[railway=rail][service=main] {
- width: 3.5;
- color: #808080;
- z-index: 62
-}
- line|z16-[railway=rail][!usage][!service]::ticks,
- line|z16-[railway=rail][usage=main]::ticks,
- line|z16-[railway=rail][service=main]::ticks {
- width: 2.9;
- color: #FFFFFF;
- dashes: 10,10;
- z-index: 63
-}
-
-
-/* 2.3.2 "rail=narrow_gauge" */
-
-line|z12[railway=narrow_gauge],
-line|z12[railway=rail][usage=branch],
-line|z12[railway=rail][usage=industrial],
-line|z12[railway=rail][usage=military],
-line|z12[railway=rail][usage=tourism],
-line|z12[railway=rail][service=spur],
-line|z12[railway=rail][service=yard],
-line|z12[railway=rail][service=siding] {
- width: 1.0;
- color: #858585;
- z-index: 33
-}
- line|z12[railway=narrow_gauge]::ticks,
- line|z12[railway=rail][usage=branch]::ticks,
- line|z12[railway=rail][usage=industrial]::ticks,
- line|z12[railway=rail][usage=military]::ticks,
- line|z12[railway=rail][usage=tourism]::ticks,
- line|z12[railway=rail][service=spur]::ticks,
- line|z12[railway=rail][service=yard]::ticks,
- line|z12[railway=rail][service=siding]::ticks {
- width: 0.6;
- color: #FFFFFF;
- dashes: 5,5;
- z-index: 34
-}
-
-line|z13[railway=narrow_gauge],
-line|z13[railway=rail][usage=branch],
-line|z13[railway=rail][usage=industrial],
-line|z13[railway=rail][usage=military],
-line|z13[railway=rail][usage=tourism],
-line|z13[railway=rail][service=spur],
-line|z13[railway=rail][service=yard],
-line|z13[railway=rail][service=siding] {
- width: 1.2;
- color: #858585;
- z-index: 60
-}
- line|z13[railway=narrow_gauge]::ticks,
- line|z13[railway=rail][usage=branch]::ticks,
- line|z13[railway=rail][usage=industrial]::ticks,
- line|z13[railway=rail][usage=military]::ticks,
- line|z13[railway=rail][usage=tourism]::ticks,
- line|z13[railway=rail][service=spur]::ticks,
- line|z13[railway=rail][service=yard]::ticks,
- line|z13[railway=rail][service=siding]::ticks {
- width: 0.8;
- color: #FFFFFF;
- dashes: 5,5;
- z-index: 61
-}
-
-line|z14[railway=narrow_gauge],
-line|z14[railway=rail][usage=branch],
-line|z14[railway=rail][usage=industrial],
-line|z14[railway=rail][usage=military],
-line|z14[railway=rail][usage=tourism],
-line|z14[railway=rail][service=spur],
-line|z14[railway=rail][service=yard],
-line|z14[railway=rail][service=siding] {
- width: 1.7;
- color: #858585;
- z-index: 60
-}
- line|z14[railway=narrow_gauge]::ticks,
- line|z14[railway=rail][usage=branch]::ticks,
- line|z14[railway=rail][usage=industrial]::ticks,
- line|z14[railway=rail][usage=military]::ticks,
- line|z14[railway=rail][usage=tourism]::ticks,
- line|z14[railway=rail][service=spur]::ticks,
- line|z14[railway=rail][service=yard]::ticks,
- line|z14[railway=rail][service=siding]::ticks {
- width: 1.2;
- color: #FFFFFF;
- dashes: 6,6;
- z-index: 61
-}
-
-line|z15[railway=narrow_gauge],
-line|z15[railway=rail][usage=branch],
-line|z15[railway=rail][usage=industrial],
-line|z15[railway=rail][usage=military],
-line|z15[railway=rail][usage=tourism],
-line|z15[railway=rail][service=spur],
-line|z15[railway=rail][service=yard],
-line|z15[railway=rail][service=siding] {
- width: 2.0;
- color: #858585;
- z-index: 60
-}
- line|z15[railway=narrow_gauge]::ticks,
- line|z15[railway=rail][usage=branch]::ticks,
- line|z15[railway=rail][usage=industrial]::ticks,
- line|z15[railway=rail][usage=military]::ticks,
- line|z15[railway=rail][usage=tourism]::ticks,
- line|z15[railway=rail][service=spur]::ticks,
- line|z15[railway=rail][service=yard]::ticks,
- line|z15[railway=rail][service=siding]::ticks {
- width: 1.4;
- color: #FFFFFF;
- dashes: 7,7;
- z-index: 61
-}
-
-
-line|z16-[railway=narrow_gauge],
-line|z16-[railway=rail][usage=branch],
-line|z16-[railway=rail][usage=industrial],
-line|z16-[railway=rail][usage=military],
-line|z16-[railway=rail][usage=tourism],
-line|z16-[railway=rail][service=spur],
-line|z16-[railway=rail][service=yard],
-line|z16-[railway=rail][service=siding] {
- width: 2.2;
- color: #808080;
- z-index: 60
-}
- line|z16-[railway=narrow_gauge]::ticks,
- line|z16-[railway=rail][usage=branch]::ticks,
- line|z16-[railway=rail][usage=industrial]::ticks,
- line|z16-[railway=rail][usage=military]::ticks,
- line|z16-[railway=rail][usage=tourism]::ticks,
- line|z16-[railway=rail][service=spur]::ticks,
- line|z16-[railway=rail][service=yard]::ticks,
- line|z16-[railway=rail][service=siding]::ticks {
- width: 1.6;
- color: #FFFFFF;
- dashes: 8,8;
- z-index: 61
-}
-
-
-/* 2.3.3 "railway=tram" */
-
-line|z12[railway=tram] {
- color: #61422D;
- width: 0.3;
- opacity: 0.5;
- z-index: 60
-}
-
-line|z13[railway=tram] {
- color: #61422D;
- width: 0.6;
- opacity: 0.6;
- z-index: 60
-}
-
-line|z14[railway=tram] {
- color: #61422D;
- width: 0.8;
- opacity: 0.7;
- z-index: 60
-}
-
-line|z15[railway=tram] {
- color: #61422D;
- width: 2.8;
- opacity: 0.7;
- dashes: 1,5;
- z-index: 60;
- -x-kot-layer: top
-}
- line|z15[railway=tram]::racks {
- color: #61422D;
- width: 0.6;
- opacity: 0.7;
- z-index: 59
-}
-
-line|z16[railway=tram] {
- color: #61422D;
- width: 3.3;
- opacity: 0.7;
- dashes: 1,6;
- z-index: 60;
- -x-kot-layer: top
-}
- line|z16[railway=tram]::racks {
- color: #61422D;
- width: 0.7;
- opacity: 0.7;
- z-index: 59
-}
-
-line|z17[railway=tram] {
- color: #61422D;
- width: 4.0;
- opacity: 0.7;
- dashes: 1,7;
- z-index: 60;
- -x-kot-layer: top
-}
- line|z17[railway=tram]::racks {
- color: #61422D;
- width: 0.8;
- opacity: 0.7;
- z-index: 59
-}
-
-line|z18-[railway=tram] {
- color: #61422D;
- width: 4.7;
- opacity: 0.8;
- dashes: 1,8;
- z-index: 60;
- -x-kot-layer: top
-}
- line|z18-[railway=tram]::racks {
- color: #61422D;
- width: 0.9;
- opacity: 0.8;
- z-index: 59
-}
-
-
-/* 2.3.4 */
-
-way|z12-[railway=subway][colour=red] {
- width: 3.6;
- color: #DD0000;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-way|z12-[railway=subway][colour=blue] {
- width: 3.6;
- color: #072889;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-way|z12-[railway=subway][colour=purple] {
- width: 3.6;
- color: #8B509C;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-way|z12-[railway=subway][colour=orange] {
- width: 3.6;
- color: #FF7700;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-way|z12-[railway=subway][colour=green] {
- width: 3.6;
- color: #006600;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-way|z12-[railway=subway][colour=brown] {
- width: 3.6;
- color: #BB7700;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-
-way|z12-[railway=subway][!colour] {
- width: 3.6;
- color: #072889;
- z-index: 28;
- dashes: 3,3;
- opacity: 0.4;
- linecap: butt;
- -x-kot-layer: top
-}
-
-
-/* 2.4 */
-
-
-way|z16-[barrier=fence] {
- width: 0.3;
- color: #9C9C9C;
- z-index: 20
-}
-way|z16-[barrier=wall],
-way|z16-[barrier=retaining_wall] {
- width: 0.5;
- color: #9C9C9C;
- z-index: 20
-}
-
-
-
-/*
-HIGHWAY
-
-
-
-way|z13-16[highway=construction]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:0.5; casing-color:#996703;
-width:2; color: #ffffff; z-index:10; dashes:9,9}
-
-
-way|z17-[highway=construction]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:0.5; casing-color:#996703;
-width:3; color: #ffffff; z-index:10; dashes:9,9}
-
-HIGHWAY
-*/
-
-/*
-dashes - ( )
-, linecap c round butt
-*/
-
-
-/*
-HIGHWAY
-
-way|z12[highway=track],
-way|z12[highway=residential],
-way|z12[highway=unclassified],
-way|z9[highway=secondary],
-way|z9-10[highway=tertiary],
-way|z14[highway=service][living_street!=yes][service!=parking_aisle]
- {width:0.3; opacity: 0.6; color: #996703; z-index:10; -x-kot-layer: bottom;}
-
-
-
-
-way|z13[highway=unclassified],
-way|z13[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:0.6; opacity: 0.5; color: #996703; z-index:10; -x-kot-layer: bottom;}
-
-
-way|z14-16[highway=road],
-way|z14-16[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.5; color: #ffffff;
-casing-width:0.5; casing-color: #996703;
-z-index:9}
-
-
-
-
-way|z16-[highway=road],
-way|z16-[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:2.5; color: #ffffff;
-casing-width:0.5; casing-color: #996703;
-z-index:9}
-
-
-
-
-
-
-way|z13[highway=residential]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.2; color: #ffffff;
-casing-width:0.3; casing-color: #996703;
-z-index:10}
-
-
-
-
-way|z15[highway=service][living_street=yes],
-way|z15[highway=service][service=parking_aisle],
-{width:0.2; opacity: 0.5; color: #996703; z-index:10}
-
-
-
-
-
-
-
-
-way|z16-[highway=service][living_street=yes],
-way|z16-[highway=service][service=parking_aisle],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:1.2; color: #ffffff;
- casing-width:0.3; casing-color: #996703;
- z-index:10}
-
-
-way|z14-15[highway=residential],
-way|z14-15[highway=unclassified],
-way|z15[highway=service][living_street!=yes][service!=parking_aisle],
-
-
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:2.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-
-way|z16[highway=residential],
-way|z16[highway=unclassified],
-way|z16[highway=living_street],
-way|z16[highway=service][living_street!=yes][service!=parking_aisle],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-
-way|z17-[highway=residential],
-way|z17-[highway=unclassified],
-way|z17-[highway=living_street],
-way|z17-[highway=service][living_street!=yes][service!=parking_aisle],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-
-way|z10[highway=secondary]
- {text: name; text-position: line;
- width:1.2; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-
-way|z11[highway=secondary],
-way|z11[highway=tertiary]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
- width:1.4; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-
-way|z12[highway=secondary],
-way|z12[highway=secondary_link],
-way|z12[highway=tertiary],
-way|z12[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-
-way|z13[highway=secondary],
-way|z13[highway=secondary_link],
-way|z13[highway=tertiary],
-way|z13[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-
-way|z14[highway=secondary],
-way|z14[highway=secondary_link],
-way|z14[highway=tertiary],
-way|z14[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:5; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-
-way|z15[highway=secondary],
-way|z15[highway=secondary_link],
-way|z15[highway=tertiary],
-way|z15[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:6; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-
-way|z16[highway=secondary],
-way|z16[highway=secondary_link],
-way|z16[highway=tertiary],
-way|z16[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:7; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-
-
-
-way|z17[highway=secondary],
-way|z17[highway=secondary_link],
-way|z17[highway=tertiary],
-way|z17[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:8; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-
-way|z18-[highway=secondary],
-way|z18-[highway=secondary_link],
-way|z18-[highway=tertiary],
-way|z18-[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:9; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-
-
-way|z7[highway=primary],
-{width:1; color: #fcea97;
-z-index:12}
-
-
-way|z8[highway=primary],
-{width:2; color: #fcea97;
-z-index:12}
-
-
-way|z9[highway=primary],
-way|z9[highway=primary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:2; color: #fcea97;
-casing-width:.5; casing-color: #996703;
-z-index:12}
-
-
-way|z10[highway=primary],
-way|z10[highway=primary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-way|z11[highway=primary],
-way|z11[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z12[highway=primary],
-way|z12[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:5; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z13[highway=primary],
-way|z13[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:6; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z14[highway=primary],
-way|z14[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:7; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z15[highway=primary],
-way|z15[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:8; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z16[highway=primary],
-way|z16[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:9; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z17[highway=primary],
-way|z17[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:10; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-way|z18-[highway=primary],
-way|z18-[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:11; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-
-
-way|z6[highway=trunk]
-{width:0.9; color: #fbcd40;
-z-index:13}
-
-
-way|z6[highway=motorway]
-{width:1; color: #fc9265;
-z-index:13}
-
-
-way|z7[highway=trunk]
-{width:1; color: #fbcd40;
-z-index:13}
-
-
-way|z7[highway=motorway]
-{width:1.2; color: #fc9265;
-z-index:13}
-
-
-
-
-way|z8[highway=trunk],
-{width:2; color: #fbcd40;
-z-index:13}
-
-
-way|z8[highway=motorway],
-{width:2; color: #fc9265;
-z-index:13}
-
-
-
-
-way|z9[highway=trunk],
-way|z9[highway=motorway],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:3; color: #ffd780;
-casing-width:1; casing-color: #996703;
-z-index:13}
-
-
-
-
-way|z10[highway=trunk],
-way|z10[highway=motorway],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z11[highway=trunk],
-way|z11[highway=motorway],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:5; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z12[highway=trunk],
-way|z12[highway=motorway],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:7; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z13[highway=trunk],
-way|z13[highway=motorway],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:8; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z14[highway=trunk],
-way|z14[highway=trunk_link],
-way|z14[highway=motorway],
-way|z14[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:9; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-
-
-way|z15[highway=trunk],
-way|z15[highway=trunk_link],
-way|z15[highway=motorway],
-way|z15[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:10; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z16[highway=trunk],
-way|z16[highway=trunk_link],
-way|z16[highway=motorway],
-way|z16[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:11; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z17[highway=trunk],
-way|z17[highway=trunk_link],
-way|z17[highway=motorway],
-way|z17[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:12; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-way|z18-[highway=trunk],
-way|z18-[highway=trunk_link],
-way|z18-[highway=motorway],
-way|z18-[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:13; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-
-
-
-way|z9-[highway=trunk]::centerline,
-way|z9-[highway=trunk_link]::centerline,
-way|z9-[highway=motorway]::centerline,
-way|z9-[highway=motorway_link]::centerline,
-way|z13-[highway=primary]::centerline,
-way|z13-[highway=primary_link]::centerline,
- {width:.3; color: #fa6478; z-index:14; -x-kot-layer: top}
-
-
-
-
-area|z15-[highway=service][area=yes],
-area|z15-[area:highway=service],
-area|z15-[area:highway=residential],
-area|z15-[area:highway=unclassified],
-area|z15-[area:highway=living_street]
- {width: 1; casing-width:0.3; fill-color:#ffffff; color: #ffffff; z-index: 15; casing-color: #996703;}
-
-area|z15-[landuse=carriageway],
-area|z15-[area:highway=secondary],
-area|z15-[area:highway=tertiary]
- {width: 1; casing-width:0.3; fill-color:#fcffd1; color: #fcffd1; z-index: 15; casing-color: #996703;}
-
-
-area|z15-[area:highway=primary]
- {width: 1; casing-width:0.3; fill-color:#fcea97; color: #fcea97; z-index: 15; casing-color: #996703;}
-
-
-area|z15-[area:highway=trunk],
-area|z15-[area:highway=motorway]
- {width: 1; casing-width:0.3; fill-color:#ffd780; color: #ffd780; z-index: 15; casing-color: #996703;}
-
-
-area|z15-[area:highway=footway],
-area|z15-[area:highway=pedestrian],
-area|z15-[area:highway=path]
- {width: 1; casing-width:1; fill-color:#DDB8EA; color: #DDB8EA; z-index: 15; casing-color:#c2a2ce; casing-dashes:2,2}
-
-
-HIGHWAY
-*/
-
-
-
-
-/*
-
- subpart' _ _ ( )
-
-::subpart_name
-
- (, highway=trunk) : (. , subpart) ( subpart centerline), , .
-
-*/
-
-/* */
-/* way|z16-[oneway=yes]{pattern-image:arrows;z-index:15; -x-kot-layer: top;} */
-
-/*
-pattern-image - .
-arrows - ,
-*/
-
-
-/* */
-/*
-way|z15-[marking][!colour],
- {width:.5; color: #a0a0a0;z-index:16; -x-kot-layer: top;}
-way|z15-[marking][colour=white],
-way|z15-[marking][color=white] {width:1; color: white;z-index:16; -x-kot-layer: top;}
-way|z15-[marking][colour=red],
-way|z15-[marking][color=red] {width:1; color: #c00000;z-index:16; -x-kot-layer: top;}
-way|z15-[marking][colour=black],
-way|z15-[marking][color=black] {width:1; color: black;z-index:16; -x-kot-layer: top;}
-way|z15-[marking][colour=blue],
-way|z15-[marking][color=blue] {width:1; color: #0000c0;z-index:16; -x-kot-layer: top;}
-*/
-
-
-
-/*
-node|z15-[amenity=bus_station] {icon-image:aut2_16x16_park.png}
-node|z16-[highway=bus_stop] {icon-image:autobus_stop_14x10.png}
-node|z16-[railway=tram_stop] {icon-image:tramway_14x13.png}
-*/
-
-
-
-/*
-node|z15-[amenity=fuel] {icon-image:tankstelle1_10x11.png}
-*/
-
-/*
-icon-image -
-*/
-
-
-
-
-/* Minsk */
-/*
-node|z12-15[railway=station][transport=subway][colour=red][operator= ] {
- icon-image: minsk_metro_red.png;
- z-index: 17
-}
-node|z12-15[railway=station][transport=subway][colour=blue][operator= ] {
- icon-image: minsk_metro_blue.png;
- z-index: 17
-}
-*/
-
-
-/* Others */
-
-
-/*
-node|z12-15[railway=station][transport=subway][!colour] {icon-image:metro_others6.png;z-index:17;}
-
-
-node|z12-15[railway=station][transport=subway]::label {text:name; text-offset:13; font-size:9; font-family: DejaVu Sans Book; text-halo-radius:2; text-color:#1300bb;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0; text-placement:any;}
-node|z16-[railway=subway_entrance] {icon-image:metro_others6.png;z-index:17;}
-node|z16-[railway=subway_entrance][name] {text:name; text-offset:12; font-size:9; font-family: DejaVu Sans Book; text-halo-radius:2; text-color:#1300bb;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0}
-
-
-
-
-node|z10-[aeroway=aerodrome]
- {icon-image:airport_world.png;
- text:name; text-offset:12; font-size:9; font-family: DejaVu Sans Condensed Bold; text-halo-radius:1; text-color:#1e7ca5;text-halo-color:#ffffff; text-allow-overlap: false;z-index:17}
-
-
-node|z3[place][capital=yes][population>5000000] {
- icon-image: adm_5.png;
- text-offset:4; text:name; font-size:8; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff; allow-overlap: true; -x-kot-min-distance:0; text-align: left;collision-sort-by:population;z-index: 5;}
-node|z4-6[place][capital=yes][population>5000000] {
- icon-image: adm_5.png;
- text-offset:6; text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; allow-overlap: true; -x-kot-min-distance:0; text-align: left;collision-sort-by: population;z-index: 5;}
-
-
-node|z4-5[place][population<100000][capital][admin_level<5] { icon-image:adm_4.png;
- text-offset:5; text:name; font-size: 7; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z4-5[place][population>=100000][population<=5000000][capital][admin_level<5] {icon-image:adm_5.png;
-text-offset:5; text:name; font-size: 8; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;z-index:1;collision-sort-by:population;z-index: 5;}
-
-
-
-
-node|z6[place=city][population<100000],
-node|z6[place=town][population<100000][admin_level]
-{icon-image:adm1_4_6.png; text-offset:5; text:name; font-size:8; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z7[place=city][population<100000],
-node|z7[place=town][population<100000],
-{icon-image:town_6.png; text-offset:5; text:name; font-size:9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z7[place=town][!population],
-node|z7[place=city][!population],
-{icon-image:town_6.png; text-offset:5; text:name; font-size:8; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z8[place=town]
-{icon-image:town_6.png; text-offset:5; text:name; font-size:8; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z6-8[place=city][population>=100000][population<=1000000],
-node|z6[place=town][population>=100000][population<=1000000][admin_level]
-{icon-image:adm1_5.png; text-offset:5; text:name; font-size:9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z7-8[place=city][population>=100000][population<=1000000],
-node|z7[place=town][population>=100000][population<=1000000]
-{icon-image:adm1_5.png; text-offset:5; text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-
-node|z6[place=city][population>1000000]
-{icon-image:adm1_6_test2.png; text-offset:5; text:name; font-size: 10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;z-index:1;collision-sort-by:population;z-index: 5;}
-
-
-node|z7-8[place=city][population>1000000][population<5000000]
-{icon-image:adm1_6_test2.png; text-offset:5; text:name; font-size: 11; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;z-index:2;collision-sort-by:population;z-index: 5;}
-
-
-node|z7-8[place=city][population>=5000000]
-{icon-image:adm_6.png; text-offset:5; text:name; font-size: 12; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;z-index:3;collision-sort-by:population;z-index: 5;}
-*/
-
-
-
-/*
-node|z6-7[place=city][capital=yes] {text:name; font-size:11; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0;z-index:1}
-node|z6-7[place=city][capital!=yes] {text:name; font-size:11; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:0}
-*/
-
-
-/*
-node|z9-11[place=city] {text:name; font-size:14; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:20; z-index:20;collision-sort-by:population;}
-*/
-
-/*
-node|z6-12[place=town],
-{text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-kot-min-distance:3}
-*/
-
-/*
-node|z9-11[place=town] {text:name; font-size:12; font-family: DejaVu Sans Book; text-color:#101010; text-halo-radius:1; text-halo-color:#ffffff; z-index:20;collision-sort-by:population;}
-node|z12-[place=town] {text:name; font-size:20; font-family: DejaVu Sans Book; text-color:#101010; text-opacity:0.2; text-allow-overlap: true; z-index:20;collision-sort-by:population;}
-node|z12-[place=city] {text:name; font-size:25; font-family: DejaVu Sans Book; text-color:#101010; text-opacity:0.3; text-allow-overlap: true; z-index:20;collision-sort-by:population;}
-
-
-node|z9-[place=village]{text:name; font-size:10; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#606060;text-halo-color:#ffffff; text-allow-overlap: false;collision-sort-by:population;z-index: 5;}
-
-
-node|z9-[place=hamlet]{text:name; font-size:9; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff; text-allow-overlap: false;collision-sort-by:population;z-index: 5;}
-
-
-area|z9-[landuse=nature_reserve],
-area|z11-[leisure=park],
-{text:name; font-size:10;font-family: DejaVu Serif Italic; text-halo-radius:0; text-color:#3c8000;text-halo-color:#ffffff; text-allow-overlap: false}
-
-
-
-way|z10-[waterway=stream], way|z9-[waterway=river], way|z13-[waterway=canal]
-{text:name; font-size:9; font-family: DejaVu Sans Oblique; text-color:#547bd1; text-position: line}
-
-
-node|z1-3[place=continent]
-{text:name; text-offset:-10; font-size:10; font-family: DejaVu Sans ExtraLight; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-kot-min-distance:0}
-node|z2-3[place=continent]
-{text:name; text-offset:-10; font-size:8; font-family: DejaVu Sans ExtraLight; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-kot-min-distance:0}
-
-
-node|z2-6[place=ocean]
-{text:name; font-size:8; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-kot-min-distance:0}
-node|z7-[place=ocean]
-{text:name; text-offset:0; font-size:11; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-kot-min-distance:0}
-
-
-node|z3-6[place=sea]
-{text:name; text-offset:0; font-size:8; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-kot-min-distance:0}
-
-
-node|z7-9[place=sea]
-{text:name; text-offset:0; font-size:10; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-kot-min-distance:0}
-
-
-
-
-node|z2-3[place=country][population>9000000]
-{text:name; font-size:10,9,8,7,6; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#dd5875;text-halo-color:#ffffff;z-index:1;-x-kot-min-distance:0;text-placement:any;collision-sort-by:population}
-
-
-node|z4[place=country]
-{text:name; font-size:12,11,10,9; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-kot-min-distance:0;text-placement:any;collision-sort-by:population}
-
-
-node|z5-8[place=country]
-{text:name; font-size:13,12,11,10,9; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-kot-min-distance:0;text-placement:any;collision-sort-by:population}
-
-
-node|z8-10[place=country]
-{text:name; font-size:16,15,14,13,12,11; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-kot-min-distance:0;text-placement:any;collision-sort-by:population}
-
-*/
-
-
-
-/*
-node|z13-[highway=milestone][pk]{text:pk; font-size:7; text-halo-radius:5;-x-kot-min-distance:0}
-*/
-
-/* */
-
-/*
- -x-kot-snap-to-street: true;
- text-position: line;
-*/
-area|z16[building] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 1;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-area|z17[building] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 5;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-area|z18-[building] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 10;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-
-node|z16[addr:housenumber][addr:street][!amenity][!shop] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 10;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-/* , */
-node|z17[addr:housenumber][addr:street][!amenity][!shop] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 5;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-node|z18-[addr:housenumber][addr:street][!amenity][!shop] {
- text: addr:housenumber;
- text-color: #402922;
- text-halo-color: #F0E3DF;
- text-halo-radius: 1.0;
- font-size: 9;
- opacity: 0.8;
- -x-kot-min-distance: 1;
- -x-kot-snap-to-street: true;
- text-position: line;
-}
-
-
-
-/* */
-
-way|z13[highway=unclassified],
-way|z13[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-way|z14-16[highway=road],
-way|z14-16[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-way|z16-[highway=road],
-way|z16-[highway=track]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-way|z13[highway=residential]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-
-way|z16-[highway=service][living_street=yes],
-way|z16-[highway=service][service=parking_aisle]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-way|z14-15[highway=residential],
-way|z14-15[highway=unclassified],
-way|z15[highway=service][living_street!=yes][service!=parking_aisle] {
-text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-
-way|z16[highway=residential],
-way|z16[highway=unclassified],
-way|z16[highway=living_street],
-way|z16[highway=service][living_street!=yes][service!=parking_aisle] {
-text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-
-way|z17-[highway=residential],
-way|z17-[highway=unclassified],
-way|z17-[highway=living_street],
-way|z17-[highway=service][living_street!=yes][service!=parking_aisle] {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff}
-
-
-
-
-way|z12[highway=secondary],
-way|z12[highway=secondary_link],
-way|z12[highway=tertiary],
-way|z12[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8 }
-
-
-way|z13[highway=secondary],
-way|z13[highway=secondary_link],
-way|z13[highway=tertiary],
-way|z13[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z14[highway=secondary],
-way|z14[highway=secondary_link],
-way|z14[highway=tertiary],
-way|z14[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z15[highway=secondary],
-way|z15[highway=secondary_link],
-way|z15[highway=tertiary],
-way|z15[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z16[highway=secondary],
-way|z16[highway=secondary_link],
-way|z16[highway=tertiary],
-way|z16[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-
-
-way|z17[highway=secondary],
-way|z17[highway=secondary_link],
-way|z17[highway=tertiary],
-way|z17[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z18-[highway=secondary],
-way|z18-[highway=secondary_link],
-way|z18-[highway=tertiary],
-way|z18-[highway=tertiary_link]
-{text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-way|z12[highway=primary],
-way|z12[highway=primary_link]
- {text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z13[highway=primary],
-way|z13[highway=primary_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z14[highway=primary],
-way|z14[highway=primary_link]
- {text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z15[highway=primary],
-way|z15[highway=primary_link]
- {text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z16[highway=primary],
-way|z16[highway=primary_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z17[highway=primary],
-way|z17[highway=primary_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z18-[highway=primary],
-way|z18-[highway=primary_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-
-way|z12[highway=trunk],
-way|z12[highway=motorway] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z13[highway=trunk],
-way|z13[highway=motorway] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z14[highway=trunk],
-way|z14[highway=trunk_link],
-way|z14[highway=motorway],
-way|z14[highway=motorway_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z15[highway=trunk],
-way|z15[highway=trunk_link],
-way|z15[highway=motorway],
-way|z15[highway=motorway_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z16[highway=trunk],
-way|z16[highway=trunk_link],
-way|z16[highway=motorway],
-way|z16[highway=motorway_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8}
-
-
-way|z17[highway=trunk],
-way|z17[highway=trunk_link],
-way|z17[highway=motorway],
-way|z17[highway=motorway_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8 }
-
-
-way|z18-[highway=trunk],
-way|z18-[highway=trunk_link],
-way|z18-[highway=motorway],
-way|z18-[highway=motorway_link] {
-text: name; text-position: line; text-color: #451600; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #FAF3E8 }
-
-
-/* - */
-
-line|z2-3[boundary=administrative][admin_level=2] {
- width: 0.6; color:#000000; opacity:0.2; z-index:9.1}
-line|z4[boundary=administrative][admin_level=2] {
- width: 0.35; color: #705842; opacity:0.6; z-index:9.1}
-line|z5-6[boundary=administrative][admin_level=2]{
- width: 0.5; color: #705842; opacity:0.8; z-index:9}
-line|z7-[boundary=administrative][admin_level=2]{
- width: 1; color: #705842; opacity:0.8; z-index:9}
-
-line|z8-9[boundary=administrative][admin_level=2]::centerline{
- width: .7; color: #705842; opacity:0.8; z-index:30}
-line|z8-9[boundary=administrative][admin_level=2]{
- width: 4; color: #705842; opacity:0.2; z-index:30}
-
-line|z10-[boundary=administrative][admin_level=2]::centerline{
- width: .6; color: #705842; opacity:0.8; z-index:30}
-line|z10-[boundary=administrative][admin_level=2]{
- width: 5; color: #705842; opacity:0.2; z-index:30}
-
-
-line|z3[boundary=administrative][admin_level=3]{
- width: 0.4; color: #705842; opacity:0.3; z-index:9}
-line|z4-[boundary=administrative][admin_level=3]{
- width: 1.3; color: #705842; opacity:0.3; z-index:9}
-
-
-line|z6[boundary=administrative][admin_level=4] {
- width: 0.7; color: #7D4006; opacity:0.2; z-index:16.4}
-
-line|z7[boundary=administrative][admin_level=4] {
- width: 0.8; color: #7D4006; opacity:0.3; z-index:16.4}
-
-line|z8-9[boundary=administrative][admin_level=4]{
- width: 3.4; color: #705842; opacity:0.2; z-index:16.4}
-line|z8-9[boundary=administrative][admin_level=4]::centerline {
- width: 0.3; color: #7D4006; opacity:0.7; z-index:30}
-
-line|z10-[boundary=administrative][admin_level=4]{
- width: 4.5; color: #705842; opacity:0.2; z-index:16.4}
-line|z10-[boundary=administrative][admin_level=4]::centerline {
- width: 0.7; color: #7D4006; opacity:0.6; z-index:30}
-
-line|z10-[boundary=administrative][admin_level=6],
-line|z10-[boundary=administrative][admin_level=8] {
- width: 0.4; color: #705842; opacity:0.6; dashes: 1,2; z-index:30}
-
-node|z2-4[place=country]{text-color:#9d6c9d;
-text: name; collision-sort-by: population; font-size: 10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 5; max-width: 20; z-index: 15
-}
-
-node|z5-7[place=country]{text-color:#9d6c9d;
-text: name; collision-sort-by: population; font-size: 12,11,10,9,8,7;
-text-halo-radius: 1.5; text-halo-color: white;
--x-kot-min-distance: 5; max-width: 20; z-index: 15
-}
-
-
-
-node|z6-[place=state]{
-text:name; text-offset:0; font-size:11,10,9,8,7,6; font-family: DejaVu Sans ExtraLight;
-text-halo-radius:1; text-color:#606060; text-halo-color:#ffffff;-x-kot-min-distance:5;
-z-index:6
-}
-
-
-
-area|z6-10[boundary=administrative][admin_level=4]
-{text:name; text-offset:0; font-size:11,10,9,8; font-family: DejaVu Sans ExtraLight;
-text-halo-radius:1; text-color:#606060; text-halo-color:#ffffff;-x-kot-min-distance:5;
-z-index:6
-}
-
-area|z10-[boundary=administrative][admin_level=6]
-{text:name; text-offset:-10; font-size:12; font-family: DejaVu Sans ExtraLight; text-halo-radius:1; text-color:#7848a0;text-halo-color:#ffffff}
-node|z12-[place=suburb]
-{text:name; font-size:12; font-family: DejaVu Sans ExtraLight; text-color:#7848a0;z-index:20}
-
-
-
-
-node|z3-4[place=city]{text-color:grey;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 10; max-width: 20; z-index: 5
-}
-
-node|z5[place=city]{text-color:black;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 7; max-width: 20; z-index: 5
-}
-
-node|z6-8[place=city][capital?]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 13,12,11,10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 2; max-width: 20; z-index: 7
-}
-
-
-node|z6-8[place=city][!capital?]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 1; max-width: 20; z-index: 5
-}
-
-node|z8-[place=town]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 5; max-width: 20; z-index: 5
-}
-
-node|z9-[place=city]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 12,11,10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 2; max-width: 20; z-index: 7
-}
-
-node|z10-[place=village]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 7,6,5;
-text-halo-radius: 1; text-halo-color: white;
--x-kot-min-distance: 2; max-width: 20; z-index: 7
-}
diff --git a/src/styles/mapink.mapcss b/src/styles/mapink.mapcss
deleted file mode 100644
index e3e327a..0000000
--- a/src/styles/mapink.mapcss
+++ /dev/null
@@ -1,210 +0,0 @@
-canvas{fill-color:#B5D0D0}
-
-area[natural=ocean]{fill-color:#B5D0D0}
-area[natural=coastline]{fill-color:#B5D0D0}
-/*area[natural=coastline]{fill-color:#F1EEE8}*/
-
-
-area|z10-[landuse=military]{fill-color:#F1EEE8; z-index:100}
-
-
-line|z2-3[boundary=administrative][admin_level=2] {color:#B2B0AE; width:.3}
-line|z4-6[boundary=administrative][admin_level=2] {color:#9d6c9d; width:.5}
-line|z7-[boundary=administrative][admin_level=2] {color:#9d6c9d; width: 1}
-line|z10-[boundary=administrative][admin_level=2]::halo {color:#9d6c9d; width: 6; opacity:0.3}
-line|z4-6[boundary=administrative][admin_level=3] {color:#9d6c9d; width:.3}
-line|z7-[boundary=administrative][admin_level=3] {color:#9d6c9d; width:.5}
-line|z4-6[boundary=administrative][admin_level=4] {color:#9d6c9d; width:.2}
-line|z7-[boundary=administrative][admin_level=4] {color:#9d6c9d; width:.3}
-
-node|z2-4[place=country]{text-color:#9d6c9d;
-text: name; collision-sort-by: population; font-size: 10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 5; max-width: 20; z-index: 15
-}
-
-node|z5-6[place=country]{text-color:#9d6c9d;
-text: name; collision-sort-by: population; font-size: 12,11,10,9,8,7;
-text-halo-radius: 1.5; text-halo-color: white;
--x-mapnik-min-distance: 5; max-width: 20; z-index: 15
-}
-
-
-node|z4[place=state]{text-color:#9d6c9d;
-font-family: "DejaVu Sans Oblique";
-text: ref; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 2; max-width: 20; z-index: 10
-}
-
-node|z5-6[place=state]{text-color:#9d6c9d;
-font-family: "DejaVu Sans Oblique";
-text: name; collision-sort-by: population; font-size: 9,8,7,6;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 3; max-width: 30; z-index: 10
-}
-
-node|z7-[place=state]{text-color:#9d6c9d;
-font-family: "DejaVu Sans Oblique";
-text: name; collision-sort-by: population; font-size: 11,10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 2; max-width: 80; z-index: 10
-}
-
-node|z3-4[place=city]{text-color:grey;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 10; max-width: 20; z-index: 5
-}
-
-node|z5[place=city]{text-color:black;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 7; max-width: 20; z-index: 5
-}
-
-node|z6-8[place=city][capital?]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 13,12,11,10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 2; max-width: 20; z-index: 7
-}
-
-
-node|z6-8[place=city][!capital?]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 1; max-width: 20; z-index: 5
-}
-
-node|z8-[place=town]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 5; max-width: 20; z-index: 5
-}
-
-node|z9-[place=city]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 12,11,10,9,8,7;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 2; max-width: 20; z-index: 7
-}
-
-
-node|z10-[place=village]
-{text-color:black;
-text: name; collision-sort-by: population; font-size: 7,6,5;
-text-halo-radius: 1; text-halo-color: white;
--x-mapnik-min-distance: 2; max-width: 20; z-index: 7
-}
-
-
-line|z5-6[highway=motorway] {color: #d6dfea; width: 0.35}
-line|z7[highway=motorway] {color: #809bc0; width: 1}
-line|z8[highway=motorway] {color: #809bc0; width: 1}
-line|z9-10[highway=motorway]{color: #809bc0; width: 1.5}
-line|z11[highway=motorway] {color: #809bc0; width: 2}
-line|z12-[highway=motorway] {color: #809bc0; width: 2.5}
-area|z14-[area:highway=motorway] {fill-color: #809bc0}
-
-line|z0[highway=trunk] {color: #cdeacd; width: 0.35}
-line|z5-6[highway=trunk] {color: #cdeacd; width: 0.35}
-line|z7[highway=trunk] {color: #a9dba9; width: 1; casing-width:.3; casing-color:#F1EEE8}
-line|z8[highway=trunk] {color: #a9dba9; width: 1; casing-width:3; casing-color:#F1EEE8}
-line|z9-10[highway=trunk] {color: #98D296; width: 1.5; casing-width:1; casing-color:#F1EEE8}
-line|z10-[highway=trunk_link] {color: #98D296; width: 1.5; casing-width:1; casing-color:#F1EEE8}
-line|z11[highway=trunk] {color: #98D296; width: 2; casing-width:1; casing-color:#F1EEE8}
-line|z12-[highway=trunk] {color: #98D296; width: 2.5; casing-width:1; casing-color:#F1EEE8}
-area|z14-[area:highway=trunk] {fill-color: #98D296}
-
-
-line|z7[highway=primary] {color: #ec989a; width: 0.5}
-line|z8[highway=primary] {color: #ec989a; width: 0.5; casing-width:1; casing-color:#F1EEE8}
-line|z9-10[highway=primary] {color: #ec989a; width: 1.2}
-line|z11-[highway=primary] {color: #ec989a; width: 2}
-area|z14-[area:highway=primary] {fill-color: #ec989a}
-
-line|z9-10[highway=secondary] {color: #fed7a5; width: 1.2}
-line|z11-[highway=secondary] {color: #fed7a5; width: 2}
-area|z14-[area:highway=secondary] {fill-color: #fed7a5}
-
-area[area:highway]{z-index:100}
-
-line|z10-[highway=tertiary],
-line|z10-[highway=tertiary_link],
-line|z10-[highway=residential],
-line|z10-[highway=unclassified],
-line|z10-[highway=living_street] {color: #BCBCBC; width: .7}
-
-
-line|z11-[highway=trunk]
-{text: name; text-position: line; font-size: 8;
-text-halo-radius: 1; text-halo-color: #98D296; text-spacing: 256;}
-line|z11-[highway=primary]
-{text: name; text-position: line; font-size: 8;
-text-halo-radius: 1; text-halo-color: #ec989a; text-spacing: 256;}
-line|z11-[highway=motorway]
-{text: name; text-position: line; font-size: 8;
-text-halo-radius: 1; text-halo-color: #809bc0; text-spacing: 256;}
-line|z11-[highway=secondary]
-{text: name; text-position: line; font-size: 8;
-text-halo-radius: 1; text-halo-color: #fed7a5; text-spacing: 256;}
-
-
-
-line|z6-9[railway=rail] {color: grey; width: 0.27}
-line|z10-[railway=rail] {color: #aaa; width: 1}
-
-area|z6-[natural=water],
-area|z6-[waterway=riverbank],
-area|z8-[landuse=reservoir],
-{fill-color:#B5D0D0}
-
-line|z9-[waterway=river]{color:#B5D0D0; width:1.2}
-
-
-area|z8-[landuse=forest],
-area|z8-[natural=wood]
-{fill-color:#AED0A0; fill-position: background; z-index:5}
-
-area|z8-[landuse=residential],
-area|z8-[place=town],
-area|z8-[place=village],
-area|z8-[place=hamlet]
-{fill-color:#dddddd; fill-position: background}
-
-
-area|z7-[boundary=national_park]{fill-color:#E5E8DD;fill-position:background; color:green; width:.3; dashes:2,2}
-
-area|z8-[boundary=national_park]{text: name; font-family: DejaVu Sans Bold; font-size:8;
-text-halo-radius: 1.5; text-halo-color: white; text-color: #9c9; z-index:6; max-width: 40}
-
-
-line|z7-[route=ferry] {color:#66f; width:0.4; dashes:4,4; z-index:5}
-
-
-area|z9-[landuse=farmland],
-area|z9-[landuse=farm]
-{fill-color:#E9D8BD;fill-position:background}
-
-area|z9-[landuse=field],
-{fill-color:#D5D2BA;fill-position:background}
-
-
-area|z10-[landuse=construction],
-area|z10-[landuse=brownfield]{fill-color:#B3B592;fill-position:background}
-
-area|z10-[landuse=industrial]{fill-color:#DED1D5;fill-position:background}
-area|z10-[landuse=grass]{fill-color:#CEEBA8;fill-position:background}
-area|z10-[leisure=park]{fill-color:#CCF5C9;fill-position:background}
-
-area|z12-[building][building!=no][building!=planned]{fill-color:#C1B0AE}
-
-area|z15-[building]{text: "addr:housenumber";
-font-size:8;
-text-halo-radius: 1;
-text-halo-color: white;
-/* text-position:line; -x-mapnik-snap-to-street: true */
-}
\ No newline at end of file
diff --git a/src/styles/openstreetinfo.mapcss b/src/styles/openstreetinfo.mapcss
deleted file mode 100644
index bacc0e3..0000000
--- a/src/styles/openstreetinfo.mapcss
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- Deja Vu MapCSS styles
- OpenStreetInfo style
-*/
-
-canvas {fill-color: #ffffc8}
-
-way[landuse=residential]
- {fill-color: #daf4a4; color:#b8cd14 }
-
-way[highway]
- {width: eval( any( metric(tag("width")), metric ( num(tag("lanes")) * 4), metric("7m")));
- color:#ffffff;
- text: name; text-position: line; text-color:#0000ff;text-halo-radius:2;text-halo-color:#ffffc8}
-
-way[highway]
- {casing-width: eval(min(1, num(prop("width"))/5 ));}
-
-
-way[highway][area=yes]{fill-color: #ffffff;width:0}
-
-/* With this eval, if bridge is applied to invisible line, no bridge renders */
-way[bridge=yes] {casing-width:eval(min(3, num(prop("width"))/2 ));}
-
-
-way[natural=forest],
-way[natural=wood],
-way[landuse=forest],
-way[landuse=wood]
- {fill-color: #68ec80; color: #45a56b}
-
-way|z15-[landuse=grass],
-way[natural=grass]{fill-color: #e7ffd0; color: #45a56b}
-
-
-way[landuse=garages]
-{fill-color: #d2e8ed; color: #cad4e1}
-
-way[waterway=riverbank],
-way[natural=water] {fill-color: #5ba7ff; color: #0000a0}
-
-way[waterway=river],
-way[waterway=stream]{color: #5ba7ff;casing-width: 1}
-
-way[leisure=stadium]{fill-color: #d0ffff; casing-width: 2; casing-color: #00ccff;z-index:10;}
-
-way[railway=tram]{width: eval( any( metric(tag("width")), metric("1.52m")));color: #ffffff; casing-color: #000000}
- {width: eval( metric("2.7m")); color: #000000; dashes: 1,10; z-index:1; object-id: "shpala"}
-
-/*way[landuse=industrial] {fill-color: #855}*/
-way[landuse=military] {fill-color: pink}
-
-way[amenity=parking] {fill-color: #d2e8ed;color:cad4e1}
-
-
-
-way|z16-[building] {
- width: .5;
- text: addr:housenumber; text-halo-radius:1; text-position: center;
-
- fill-color: #EDEDED;
- extrude: eval( any( metric(tag("height")), metric ( num(tag("building:levels")) * 3), metric("15m")));
- extrude-face-color: #e2e2e2;
- extrude-edge-width: 1;
- extrude-edge-color: #404040;
-}
\ No newline at end of file
diff --git a/src/styles/osmosnimki-hybrid.mapcss b/src/styles/osmosnimki-hybrid.mapcss
deleted file mode 100644
index 861044c..0000000
--- a/src/styles/osmosnimki-hybrid.mapcss
+++ /dev/null
@@ -1,1148 +0,0 @@
-/*
- Deja Vu MapCSS styles
- Osmosnimki hybrid style
-*/
-
-
-canvas {opacity:0; -x-mapnik-true-layers: false}
-
-area|z13-[aeroway=aerodrome] {color: #008ac6; width: 0.8; z-index:5; fill-image:bull2.png}
-
-
-way|z7-9[waterway=river] {color: #abc4f5; width: .2; z-index:9}
-way|z7-9[waterway=river] {color: #abc4f5; width: .3; z-index:9}
-way|z9[waterway=stream] {color: #abc4f5; width: .3; z-index:9}
-way|z10[waterway=river] {color: #abc4f5; width: .6; z-index:9}
-way|z10[waterway=stream] {color: #abc4f5; width: .5; z-index:9}
-way|z10-14[waterway=river] {color: #abc4f5; width: .8; z-index:9}
-way|z15-[waterway=river] {color: #abc4f5; width: 1.1; z-index:9}
-way|z10-[waterway=stream]{color: #abc4f5; width: .7; z-index:9}
-way|z10-[waterway=canal] {color: #abc4f5; width: .7; z-index:9}
-
-area|z13-[natural=water]{text:name; text-offset:1; font-size:10; font-family: DejaVu Serif Italic; text-color:#a3e6ff; text-allow-overlap: false;text-halo-radius: 1; text-halo-color: #2e2e2e; }
-
-way|z15-16[highway=construction]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:9.5; text-halo-radius: 1; text-halo-color: #040404}
-way|z15-16[highway=construction]
-{width:2; opacity: 0.7; color: #ffffff; z-index:10; dashes:9,9}
-
-way|z17-[highway=construction]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:10; text-halo-radius: 1; text-halo-color: #040404}
-way|z17-[highway=construction]
-{width:3; opacity: 0.7; color: #ffffff; z-index:10; dashes:9,9}
-
-
-
-way|z12[highway=road],
-way|z12[highway=track],
-way|z12[highway=residential],
-way|z9[highway=secondary],
-way|z9-10[highway=tertiary],
- {width:0.3; opacity: 0.6; color: #996703; z-index:10; -x-mapnik-layer: bottom;}
-
-way|z14[highway=service][living_street!=yes][service!=parking_aisle]
- {width:0.5; opacity: 0.5; color: #ffffff; z-index:10; -x-mapnik-layer: bottom;}
-
-way|z14[highway=service][living_street!=yes][service!=parking_aisle]
-
-
-way|z13[highway=road],
-way|z13[highway=track],
-way|z13[highway=residential]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #404040}
-
-way|z13[highway=road],
-way|z13[highway=track],
-way|z13[highway=residential]
-{width:0.5; color: #ffffff;opacity: 0.8;
-z-index:9}
-
-
-way|z14[highway=road],
-way|z14[highway=track],
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:9.5; text-halo-radius: 1; text-halo-color: #404040}
-
-way|z14[highway=road],
-way|z14[highway=track],
-{width:0.5; color: #ffffff;opacity: 0.7;
-z-index:9}
-
-
-
-way|z16-[highway=road],
-way|z16-[highway=track]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:10; text-halo-radius: 1; text-halo-color: #404040}
-
-way|z16-[highway=road],
-way|z16-[highway=track]
-{width:1.5; color: #ffffff;opacity: 0.7;
-z-index:9}
-
-
-way|z15[highway=service][living_street=yes],
-way|z15[highway=service][service=parking_aisle],
-{width:0.5; opacity: 0.7; color: #ffffff; z-index:10}
-
-
-way|z16-[highway=service][living_street=yes],
-way|z16-[highway=service][service=parking_aisle],
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:10; text-halo-radius: 1; text-halo-color: #040404;
-way|z16-[highway=service][living_street=yes],
-way|z16-[highway=service][service=parking_aisle],
-{width:0.7; color: #ffffff;opacity: 0.7;
- z-index:10}
-
-way|z14-15[highway=residential],
-way|z14-15[highway=unclassified],
-way|z15[highway=service][living_street!=yes][service!=parking_aisle],
-
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:10; text-halo-radius: 1; text-halo-color: #404040}
-
-
-way|z14-15[highway=residential],
-way|z14-15[highway=unclassified],
-way|z15[highway=service][living_street!=yes][service!=parking_aisle],
-{width:0.7; color: #ffffff;opacity: 0.7;
- z-index:10}
-
-
-way|z16[highway=residential],
-way|z16[highway=unclassified],
-way|z16[highway=living_street],
-way|z16[highway=service][living_street!=yes][service!=parking_aisle],
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:11; text-halo-radius: 1; text-halo-color: #040404}
-way|z16[highway=residential],
-way|z16[highway=unclassified],
-way|z16[highway=living_street],
-way|z16[highway=service][living_street!=yes][service!=parking_aisle],
-{width:2; color: #ffffff;opacity: 0.5;
- z-index:10}
-
-way|z17-[highway=residential],
-way|z17-[highway=unclassified],
-way|z17-[highway=living_street],
-way|z17-[highway=service][living_street!=yes][service!=parking_aisle],
-
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Book; font-size:12; text-halo-radius: 1; text-halo-color: #404040}
-
-way|z17-[highway=residential],
-way|z17-[highway=unclassified],
-way|z17-[highway=living_street],
-way|z17-[highway=service][living_street!=yes][service!=parking_aisle],
-{width:4.5; color: #ffffff;opacity: 0.5; z-index:10}
-
-
-
-/* way|z10[highway=tertiary] */
-/*way|z10[highway=secondary]
- {text: name; text-position: line}
-way|z10[highway=secondary]
- {width:0.5; color: #fcffd1;opacity: 0.8;
- z-index:11}*/
-
-way|z11[highway=secondary],
-way|z11[highway=tertiary]
-{width:0.5; color: #fcffd1;opacity: 0.5;
- z-index:11}
-
-/*way|z12[highway=secondary],
-way|z12[highway=secondary_link],
-way|z12[highway=tertiary],
-way|z12[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Book; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3; color: #fcffd1;opacity: 0.5;
- z-index:11}*/
-
-
-way|z12[highway=secondary],
-way|z12[highway=secondary_link]
-{width:2; color: #d2c269;opacity: 0.4;
- z-index:11}
-
-way|z12[highway=secondary],
-way|z12[highway=secondary_link],
-way|z12[highway=tertiary],
-way|z12[highway=tertiary_link]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #404040; z-index:11}
-
-
-way|z12[highway=tertiary],
-way|z12[highway=tertiary_link]
-{width:0.5; color: #d2c269;opacity: 0.4;
- z-index:11}
-
-
-way|z13[highway=secondary],
-way|z13[highway=secondary_link]
-{width:3; color: #d2c269;opacity: 0.7;
- z-index:11}
-
-
-way|z13[highway=tertiary],
-way|z13[highway=tertiary_link]
-{width:1; color: #d2c269;opacity: 0.7;
- z-index:11}
-
-way|z13-14[highway=secondary],
-way|z13-14[highway=secondary_link]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Book; font-size:10; text-halo-radius: 1; text-halo-color: #202020; z-index:11}
-
-way|z13-14[highway=tertiary],
-way|z13-14[highway=tertiary_link]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Book; font-size:11; text-halo-radius: 1; text-halo-color: #303030; z-index:11}
-
-
-way|z14[highway=secondary],
-way|z14[highway=secondary_link]
-{width:3; color: #fffac2; opacity: 0.5;
- z-index:11}
-
-
-way|z14[highway=tertiary],
-way|z14[highway=tertiary_link]
-
-{width:4; color: #fffac2;opacity: 0.7;
- z-index:11}
-
-
-
-
-
-way|z13[highway=motorway_link]
-{width:1.5; color: #FFFAC0;opacity: 0.4;
- z-index:11}
-
-way|z14[highway=motorway_link]
-{width:2; color: #FFDFB0;opacity: 0.4;
- z-index:11}
-
-way|z15[highway=motorway_link]
-{width:3; color: #FFDFB0;opacity: 0.4;
- z-index:11}
-
-
-
- way|z16[highway=motorway_link]
-{width:3.5; color: #FFDFB0;opacity: 0.4;
- z-index:11}
-
-way|z17[highway=motorway_link]
-{width:4; color: #FFDFB0;opacity: 0.4;
- z-index:11}
-
-
-way|z15[highway=secondary],
-way|z15[highway=secondary_link],
-way|z15[highway=tertiary],
-way|z15[highway=tertiary_link]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #040404}
-way|z15[highway=secondary][tunnel!=yes],
-way|z15[highway=secondary_link][tunnel!=yes],
-way|z15[highway=tertiary][tunnel!=yes],
-way|z15[highway=tertiary_link][tunnel!=yes]
- {width:3; color: #fcffd1;opacity: 0.5;
- z-index:11}
-
-
-way|z15[highway=secondary][tunnel=yes],
-way|z15[highway=secondary_link][tunnel=yes],
-way|z15[highway=tertiary][tunnel=yes],
-way|z15[highway=tertiary_link][tunnel=yes]
- {width:3; color: #cdcdcd; opacity: 0.5; linecap:square;
- z-index:11}
-
-
-
-way|z16[highway=secondary],
-way|z16[highway=secondary_link],
-way|z16[highway=tertiary],
-way|z16[highway=tertiary_link]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #040404}
-way|z16[highway=secondary][tunnel!=yes],
-way|z16[highway=secondary_link][tunnel!=yes],
-way|z16[highway=tertiary][tunnel!=yes],
-way|z16[highway=tertiary_link][tunnel!=yes]
- {width:5; color: #fcffd1;opacity: 0.5;
- z-index:11}
-
-way|z16[highway=secondary][tunnel=yes],
-way|z16[highway=secondary_link][tunnel=yes],
-way|z16[highway=tertiary][tunnel=yes],
-way|z16[highway=tertiary_link][tunnel=yes]
- {width:5; color: #cdcdcd; opacity: 0.5; linecap:square;
- z-index:11}
-
-
-way|z16[highway=service][living_street=yes]
-{width:1; color: #ffffff;opacity: 0.5; z-index:11}
-
-way|z17[highway=service][living_street=yes]
-{width:2; color: #ffffff;opacity: 0.5; z-index:11}
-
-
-
-
-way|z17[highway=secondary],
-way|z17[highway=secondary_link],
-way|z17[highway=tertiary],
-way|z17[highway=tertiary_link]
-{text: name; text-position: line; text-color: #ffffff; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #020202}
-way|z17[highway=secondary][tunnel!=yes],
-way|z17[highway=secondary_link][tunnel!=yes],
-way|z17[highway=tertiary][tunnel!=yes],
-way|z17[highway=tertiary_link][tunnel!=yes]
- {width:6; color: #fcffd1;opacity: 0.5;
- z-index:11}
-
-way|z17[highway=secondary][tunnel=yes],
-way|z17[highway=secondary_link][tunnel=yes],
-way|z17[highway=tertiary][tunnel=yes],
-way|z17[highway=tertiary_link][tunnel=yes]
- {width:6; color: #cdcdcd; opacity: 0.5; linecap:square;
- z-index:11}
-
-
-/*way|z18[highway=secondary],
-way|z18[highway=secondary_link],
-way|z18[highway=tertiary],
-way|z18[highway=tertiary_link]
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:9; color: #fcffd1;opacity: 0.5;
- z-index:11}*/
-
-/*
-
-на данный момент конвертер не умеет каскадировать стили, поэтому каждый раз на каждую выбранную линию приходится писать все свойства.
-
-*/
-
-
-way|z7[highway=primary],
-{width:0.7; color: #fcea97;opacity: 0.6;
-z-index:12}
-
-way|z8[highway=primary],
-{width:1; color: #fcea97;opacity: 0.6;
-z-index:12}
-
-/*way|z10[highway=primary] [name=Рублёвское шоссе],
-[name=Кутузовский проспект],
-[name=Мичуринский проспект],
-[name=Ленинский проспект],
-[name=Профсоюзная улица],
-[name=Варшавское шоссе],
-[name=Каширское шоссе],
-[name=Волгоградский проспект],
-[name=Рязанский проспект],
-[name=шоссе Энтузиастов],
-[name=проспект Мира],
-[name=МКАД],
-[name=Садовое кольцо],
-[name=3-е транспортное кольцо],
-{width:5; color: red; opacity: 1;
-z-index:13}*/
-
-
-way|z9[highway=primary_link]
-{width:1.5; color: #fcea97;opacity: 0.8;
-z-index:12}
-
-way|z9[highway=primary],
-
-way|z10[highway=primary],
-way|z10[highway=primary_link]
-{width:1; color: #fcea97;opacity: 0.7;
- z-index:12}
-
-way|z10[highway=primary]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z11[highway=primary],
-way|z11[highway=primary_link]
- {width:3.5; color: #fad870; opacity: 0.4;
- z-index:12}
-way|z11[highway=primary],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-
-
-way|z12[highway=primary],
-way|z12[highway=primary_link]
-{width:3.5; color: #fad870;opacity: 0.4;
- z-index:12}
-
-way|z12-13[highway=primary],
-way|z12-13[highway=primary_link]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z13[highway=primary],
-way|z13[highway=primary_link]
-{width:5.5; color: #fad870;opacity: 0.4;
- z-index:12}
-
-way|z14[highway=primary][tunnel!=yes],
-way|z14[highway=primary_link][tunnel!=yes]
-
-{width:6; color: #fce57e;opacity: 0.5;
- z-index:12}
-way|z14[highway=primary],
-way|z14[highway=primary_link],
-
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z14[highway=primary][tunnel=yes],
-way|z14[highway=primary_link][tunnel=yes]
-{width:6; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-way|z14[highway=primary],
-way|z14[highway=primary_link]
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #404040}
-
-
-way|z15[highway=primary],
-way|z15[highway=primary_link]
- {text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10.5; text-halo-radius: 1; text-halo-color: #404040}
-way|z15[highway=primary][tunnel!=yes],
-way|z15[highway=primary_link][tunnel!=yes]
-{width:8; color: #fcea97;opacity: 0.5;
- z-index:12}
-
-way|z15[highway=primary][tunnel=yes],
-way|z15[highway=primary_link][tunnel=yes]
-{width:8; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-way|z15[highway=primary][bridge],
-way|z15[highway=primary_link][bridge]
-{width:8; color: #fcea97;opacity: 0.5; linecap:square;
- z-index:12}
-
-
-way|z16[highway=primary],
-way|z16[highway=primary_link]
- {text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #404040}
-way|z16[highway=primary][tunnel!=yes],
-way|z16[highway=primary_link][tunnel!=yes]
- {width:9; color: #fcea97;opacity: 0.5;
- z-index:12}
-
-way|z16[highway=primary][tunnel=yes],
-way|z16[highway=primary_link][tunnel=yes]
-{width:9; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-way|z17[highway=primary],
-way|z17[highway=primary_link]
- {text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:12; text-halo-radius: 1; text-halo-color: #404040}
-way|z17[highway=primary][tunnel!=yes],
-way|z17[highway=primary_link][tunnel!=yes]
- {width:10; color: #fcea97;opacity: 0.5;
- z-index:12}
-
-way|z17[highway=primary][tunnel=yes],
-way|z17[highway=primary_link][tunnel=yes]
-{width:10; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-/*way|z18[highway=primary],
-way|z18[highway=primary_link]
- {text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:11; color: #fcea97;opacity: 0.5;
- z-index:12}*/
-
-
-way|z6[highway=trunk]
-{width:0.6; color: #d2c269;opacity: 0.7;
-z-index:13}
-
-way|z6[highway=motorway]
-{width:0.7; color: #d2c269;opacity: 0.7;
-z-index:13}
-
-way|z7[highway=trunk]
-{width:0.7; color: #d2c269;opacity: 0.7;
-z-index:13}
-
-way|z7[highway=motorway]
-{width:0.9; color: #d2c269;opacity: 0.7;
-z-index:13}
-
-
-way|z8[highway=trunk],
-way|z8[highway=motorway],
-{width:1.3; color: #F69166;opacity: 0.7;
-z-index:13}
-
-way|z9[highway=trunk],
-way|z9[highway=motorway],
-{width:1.7; color: #fc9265;opacity: 0.7;
-z-index:13}
-
-
-way|z10[highway=trunk],
-way|z10[highway=motorway],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z10[highway=trunk],
-way|z10[highway=motorway],
-{width:3; color: #fad870;opacity: 0.7;
- z-index:13}
-
-way|z11[highway=trunk],
-way|z11[highway=motorway],
-{width:5; color: #fad870;opacity: 0.5;
- z-index:13}
-
-way|z11[highway=trunk],
-way|z11[highway=motorway],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z12[highway=trunk],
-way|z12[highway=motorway],
-{width:5; color: #fffeb4;opacity: 0.4;
- z-index:13}
-
-way|z12[highway=trunk],
-way|z12[highway=motorway],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-
-way|z13[highway=trunk],
-way|z13[highway=motorway],
-{width:6,5; color: #fad870;opacity: 0.4;
- z-index:13}
-
-way|z13[highway=trunk],
-way|z13[highway=motorway],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10; text-halo-radius: 1; text-halo-color: #4c4c4c; z-index:13}
-
-
-way|z14[highway=trunk][tunnel!=yes],
-way|z14[highway=motorway][tunnel!=yes],
-
-{width:7; color: #fce57e;opacity: 0.5;
- z-index:13}
-
-way|z14[highway=trunk],
-way|z14[highway=motorway],
-
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #404040; z-index:13}
-
-way|z14[highway=trunk][tunnel=yes],
-way|z14[highway=motorway][tunnel=yes]
-{width:7; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-way|z15[highway=trunk],
-way|z15[highway=trunk_link],
-way|z15[highway=motorway],
-way|z15[highway=motorway_link],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:10.5; text-halo-radius: 1; text-halo-color: #404040}
-way|z15[highway=trunk][tunnel!=yes],
-way|z15[highway=trunk_link][tunnel!=yes],
-way|z15[highway=motorway][tunnel!=yes]
- {width:8; color: #fce57e;opacity: 0.5;
- z-index:13}
-
-way|z15[highway=trunk][tunnel=yes],
-way|z15[highway=motorway][tunnel=yes],
-way|z15[highway=trunk_link][tunnel=yes],
-
-{width:8; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-
-way|z15[highway=trunk][bridge],
-way|z15[highway=trunk_link][bridge],
-way|z15[highway=motorway][bridge],
-way|z15[highway=motorway_link][bridge],
- {width:9; color: #fce57e;opacity: 0.5; linecap:square;
- z-index:13}
-
-
-way|z16[highway=trunk],
-way|z16[highway=trunk_link],
-way|z16[highway=motorway],
-way|z16[highway=motorway_link],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:11; text-halo-radius: 1; text-halo-color: #404040}
-way|z16[highway=trunk][tunnel!=yes],
-way|z16[highway=trunk_link][tunnel!=yes],
-way|z16[highway=motorway][tunnel!=yes],
-
- {width:10; color: #fce57e;opacity: 0.5;
- z-index:13}
-
-way|z16[highway=trunk][tunnel=yes],
-way|z16[highway=motorway][tunnel=yes],
-way|z16[highway=trunk_link][tunnel=yes],
-way|z16[highway=motorway_link][tunnel=yes],
-{width:10; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-way|z16[highway=trunk][bridge],
-way|z16[highway=trunk_link][bridge],
-way|z16[highway=motorway][bridge],
-way|z16[highway=motorway_link][bridge],
- {width:10; color: #fce57e;opacity: 0.5; linecap:square;
- z-index:13}
-
-
-way|z17[highway=trunk],
-way|z17[highway=trunk_link],
-way|z17[highway=motorway],
-way|z17[highway=motorway_link],
-{text: name; text-position: line; text-color: #fffeb4; font-family: DejaVu Sans Bold; font-size:12; text-halo-radius: 1; text-halo-color: #404040}
-way|z17[highway=trunk][tunnel!=yes],
-way|z17[highway=trunk_link][tunnel!=yes],
-way|z17[highway=motorway][tunnel!=yes],
-
- {width:11; color: #fce57e;opacity: 0.5;
- z-index:13}
-
-way|z17[highway=trunk][bridge],
-way|z17[highway=trunk_link][bridge],
-way|z17[highway=motorway][bridge],
-way|z17[highway=motorway_link][bridge],
- {width:11; color: #fce57e;opacity: 0.5; linecap:square; z-index:13}
-
-way|z17[highway=trunk][tunnel=yes],
-way|z17[highway=motorway][tunnel=yes],
-way|z17[highway=trunk_link][tunnel=yes],
-way|z17[highway=motorway_link][tunnel=yes],
-{width:11; color: #cdcdcd;opacity: 0.5; linecap:square;
- z-index:12}
-
-/*way|z18[highway=trunk],
-way|z18[highway=trunk_link],
-way|z18[highway=motorway],
-way|z18[highway=motorway_link],
-{text: name; text-position: line; text-color: #404040; font-family: DejaVu Sans Bold; font-size:9; text-halo-radius: 1; text-halo-color: #404040;
- width:13; color: #ffd780;opacity: 0.5;
- z-index:13}*/
-
-
-
-
-way|z10-14[highway=trunk]::centerline,
-way|z10-14[highway=trunk_link]::centerline,
-way|z10-14[highway=motorway]::centerline,
-way|z10-14[highway=motorway_link]::centerline,
-way|z13-14[highway=primary]::centerline,
-way|z13-14[highway=primary_link]::centerline,
- {width:.5; color: #fa6478; z-index:14;opacity: 0.8; -x-mapnik-layer: top}
-
-way|z15-[highway=trunk]::centerline,
-way|z15-[highway=trunk_link]::centerline,
-way|z15-[highway=motorway]::centerline,
-way|z15-[highway=motorway_link]::centerline,
-way|z15-[highway=primary]::centerline,
-way|z15-[highway=primary_link]::centerline,
- {width:.3; color: #fa6478; z-index:14;opacity: 1; -x-mapnik-layer: top}
-
-way|z10-13[highway=primary]::centerline,
-way|z10-13[highway=primary_link]::centerline,
- {width:.2; color: #fa6478; z-index:14;opacity: 0.8; -x-mapnik-layer: top}
-
-
-
-/*ЖД*/
-
-line|z7[railway=rail][service!=siding][service!=spur][service!=yard]
-{width:.5; color: #303030;z-index:11}
-line|z7[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
-{width:.3; color: #B9BABA; dashes: 3,5;z-index:11}
-
-line|z8-10[railway=rail][service!=siding][service!=spur][service!=yard]
- {width:1.4; color: #202020;z-index:11}
-line|z8-10[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
- {width:1; color: #B9BABA; dashes: 4,8;z-index:11}
-
-line|z11-13[railway=rail][service!=siding][service!=spur][service!=yard]
- {width:1.4; color: #666699;z-index:11}
-line|z11-13[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
- {width:0.5; color: #ffffff; dashes: 6,6; opacity: 1; z-index:11}
-
-line|z14-15[railway=rail][service!=siding][service!=spur][service!=yard]
- {width:2.2; color: #666699;z-index:11}
-line|z14-15[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
- {width:1; color: #ffffff; dashes: 11,9; opacity: 1; z-index:12}
-
-line|z16-[railway=rail]
- {width:3; color: #666699; z-index:1}
-line|z16-[railway=rail]::ticks
- {width:1.1; color: #ffffff; dashes: 12,9; opacity: 1; z-index:2}
-
-line|z14-15[railway][bridge][service!=siding][service!=spur][service!=yard]
-{pattern-image:tun73.png; pattern-rotate:0; pattern-scale:1.1; pattern-spacing: 0.7; z-index:12.1 }
-line|z14-15[railway][bridge][service!=siding][service!=spur][service!=yard]
-{width:2.2; color: #666699;z-index:12.2}
-line|z14-15[railway=rail][bridge][service!=siding][service!=spur][service!=yard]::ticks
- {width:1; color: #ffffff; dashes: 11,9; opacity: 1; z-index:12.3}
-
-
-line|z16-[railway][bridge]
-{pattern-image:tun73.png; pattern-rotate:0; pattern-scale:1.3; pattern-spacing: 0.7; z-index:12.1 }
-line|z16-[railway=rail][bridge]
- {width:3; color: #666699;z-index:12.2}
-line|z16-[railway=rail][bridge]::ticks
- {width:1.1; color: #ffffff; dashes: 12,9; opacity: 1; z-index:12.3}
-
-line|z14-15[railway][bridge]
-{text:name; font-size:10; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000}
-
-line|z16-[railway][bridge]
-{text:name; font-size:11; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000}
-
-/*
-железная дорога рисуется в две линии:
- - цельная широкая чёрная линия (фон)
- - белый тонкий пунктир поверх нее
-
-*/
-
-/*way|z12-15[railway=subway]
-{width:2; color: #524F84 ;z-index:15; dashes:3,3; opacity:1; linecap: butt; -x-mapnik-layer: top;z-index:12.3}
-*/
-
-
-node|z15-[amenity=bus_station] {icon-image:aut2_16x16_park.png}
-node|z16-[highway=bus_stop] {icon-image:autobus_stop_14x10.png}
-node|z16-[railway=tram_stop] {icon-image:tramway_14x13.png}
-
-node|z15-[amenity=fuel] {icon-image:tankstelle1_10x11.png}
-/*
-icon-image - картинка иконки
-
-*/
-
-node|z16-[amenity=pharmacy] {icon-image:med1_11x14.png}
-node|z16-[amenity=cinema] {icon-image:cinema_14x14.png}
-node|z15-[amenity=museum] {icon-image:mus_13x12.png}
-node|z16-[tourism=zoo] {icon-image:zoo4_14x14.png}
-node|z16-[amenity=courthouse] {icon-image:sud_14x13.png}
-node|z16-[amenity=theatre] {icon-image:teater_14x14.png}
-node|z16-[amenity=university] {icon-image:univer_15x11.png}
-node|z16-[amenity=toilets] {icon-image:wc-3_13x13.png}
-node|z16-[amenity=place_of_worship][religion=christian]
- {icon-image:pravosl_kupol_11x15.png;}
-area|z16-[amenity=place_of_worship][religion=christian]
- {icon-image:pravosl_kupol_11x15.png;}
-node|z16-[amenity=place_of_worship]
-{text: name; text-color: #623f00; font-family: DejaVu Serif Italic; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;text-offset:3;max-width:70; z-index:9}
-area|z16-[amenity=place_of_worship]
-{text: name; text-color: #623f00; font-family: DejaVu Serif Italic; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;text-offset:3;max-width:70;z-index:16;
-width:0.1; color: #111111; text-opacity: 1; fill-color: #777777; fill-opacity: 0.5; z-index:9}
-
-
-
-node|z17-[amenity=kindergarten]{icon-image:kindergarten_14x14.png}
-node|z17-[amenity=school] {icon-image:school_13x13.png}
-node|z17-[amenity=library] {icon-image:lib_13x14.png}
-node|z17-[tourism=hotel] {icon-image:hotell_14x14.png}
-node|z17-[amenity=post_office] {icon-image:post_14x11.png}
-node|z17-[amenity=restaurant] {icon-image:rest_14x14.png}
-node|z17-[shop] {icon-image:superm_12x12.png}
-
-/*
-boundary
-*/
-
-
-area|z2-3[boundary=administrative][admin_level=2]
-{width: 0.4; color: red; opacity:0.9; z-index:16}
-
-area|z4[boundary=administrative][admin_level=2]
-{width: 1.2; color:#ffffff; opacity:1; z-index:16}
-
-area|z4[boundary=administrative][admin_level=2]::centerline,
- {width: 1.1; color:#91192B; opacity:1; z-index:16}
-
-
-
-
-
-area|z5[boundary=administrative][admin_level=2]
-{width: 1.5; color: #ffffff; opacity:0.7; z-index:17}
-area|z5[boundary=administrative][admin_level=2]::centerline
-{width: 1; color: #91192B; z-index:17}
-
-area|z6[boundary=administrative][admin_level=2]
-{width: 2; color: #ffffff; opacity:0.7; dashes: 6,4,1,4; z-index:17}
-area|z6[boundary=administrative][admin_level=2]::centerline
-{width: 1.5; color: #91192B; opacity:0.7; z-index:17}
-
-area|z7[boundary=administrative][admin_level=2]
-{width: 3; color: #ffffff; opacity:0.6; z-index:17}
-area|z7[boundary=administrative][admin_level=2]::centerline
-{width: 2; color: #91192B; opacity:0.7; z-index:17}
-
-
-area|z8-[boundary=administrative][admin_level=2]
-{width: 4; color: #ffffff; opacity:0.7; z-index:17}
-area|z8-[boundary=administrative][admin_level=2]::centerline
-{width: 3; color: #91192B; opacity:0.9; z-index:17}
-
-
-
-area|z3[boundary=administrative][admin_level=3]
-{width: 0.8; color: #fffeb4; dashes: 3,3; opacity:0.5; z-index:16}
-
-area|z4[boundary=administrative][admin_level=3]
-{width: 1; color: #fffeb4; dashes: 3,3; opacity:0.5; z-index:16}
-
-area|z5-16[boundary=administrative][admin_level=3]
-{width: 1.5; color: #fffeb4; dashes: 3,3; opacity:0.5; z-index:16}
-
-
-area|z10-[boundary=administrative][admin_level=6]
-{width: 0.5; color: #101010; dashes: 1,2; opacity:0.6; z-index:16.1}
-
-area|z5[boundary=administrative][admin_level=4]
-{width: 0.6; color: #ffc3e1;opacity:0.5; z-index:16.3}
-
-
-area|z5[boundary=administrative][admin_level=4]
-{width: 0.3; color: #ffffff; dashes: 1,2; opacity:0.8; z-index:16.3}
-
-area|z6-7[boundary=administrative][admin_level=4]
-{width: 1; color: #A788BC;opacity:0.8; z-index:16.3}
-
-area|z6-7[boundary=administrative][admin_level=4]
-{width: 0.5; color: #806B8E; dashes: 1,2; opacity:0.8; z-index:16.4}
-
-area|z8-[boundary=administrative][admin_level=4]
-{width: 1.5; color: #A788BC; opacity:0.8; z-index:16.3}
-
-area|z8-[boundary=administrative][admin_level=4]
-{width: 0.5; color: #806B8E; dashes: 1,2; opacity:0.8; z-index:16.4}
-
-
-/*
-Москва
-*/
-/*way|z9[boundary=administrative][admin_level=4][name=Москва] {line-style:admin77_1.png; z-index:16}
-way|z10-14[boundary=administrative][admin_level=4][name=Москва] {line-style:admin9_1.png; z-index:16}
-way|z11[boundary=administrative][admin_level=4][name=Москва]
-{width: 1; color: #ffffff; dashes: 3,3; opacity:0.5; z-index:16}
-way|z15-[boundary=administrative][admin_level=4][name=Москва] {line-style:admin13_1.png; z-index:16} */
-
-
-
-
-
-way|z12-[railway=tram]{line-style:rway44.png;z-index:17}
-
-
-
-area|z12-[building=train_station][name=~/.*вокзал.*/] {icon-image:station_11x14_blue.png; z-index:9}
-area|z12-15[building=train_station][name=~/.*вокзал.*/]::lable{text:name; text-offset:13; font-size:10; font-family: DejaVu Sans Condensed Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#363c6b; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:11}
-
-area|z16-[building=train_station][name=~/.*вокзал.*/]::lable{text:name; text-offset:13; font-size:11; font-family: DejaVu Sans Condensed Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#363c6b; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:10}
-
-/*area|z12-15[building=train_station][name!=~/.*вокзал.*//*] {icon-image:station_13x13_blue3.png; z-index:9}*/
-
-
-
-
-
-node|z12-15[railway=station][transport=subway]{icon-image:metro_others6.png; z-index:10}
-node|z12-15[railway=station][transport=subway]::label{text:name; text-offset:13; font-size:10; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:9}
-
-/*node|z12-15[railway=station][station=subway]{icon-image:metro_others6.png; z-index:10}
-node|z12-15[railway=station][station=subway]::label{text:name; text-offset:13; font-size:10; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:9}
-*/
-node|z16-[railway=station][transport=subway]{icon-image:metro_others6.png; z-index:10}
-node|z16-[railway=station][transport=subway]::label{text:name; text-offset:13; font-size:11; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:9}
-/*
-node|z16-[railway=station][station=subway]{icon-image:metro_others6.png; z-index:10}
-node|z16-[railway=station][station=subway]::label{text:name; text-offset:13; font-size:11; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:9}
-*/
-
-node|z12-[railway=halt][transport!=subway],
-node|z12-[railway=station][transport!=subway] {icon-image:rw_stat6_2_blue.png; z-index:11}
-
-node|z12-15[railway=halt][transport!=subway],
-node|z12-15[railway=station][transport!=subway]::lable{text:name; text-offset:10; font-size:9; font-family: DejaVu Sans Mono Book; text-halo-radius:1; text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:11}
-
-node|z16-[railway=halt][transport!=subway],
-node|z16-[railway=station][transport!=subway]::lable{text:name; text-offset:7; font-size:10; font-family: DejaVu Sans Mono Book; text-halo-radius:1; text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:11}
-
-/*area|z11-[building=train_station][name=~/.*вокзал.] {icon-image:station_11x14_blue.png; z-index:1}
-area|z11-[building=train_station][name=~/.*вокзал.]::label{text:name; text-offset:10; font-size:9; font-family: DejaVu Sans Mono Book; text-halo-radius:1; text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;-x-mapnik-layer: top;}
-
-area|z13-[building=train_station] {icon-image:rw_stat_stanzii_2_blue.png}
-area|z13-[building][name=~/.*вокзал.]{icon-image:rw_stat_stanzii_2_blue.png}
-
-
-node|z11-[railway=station][transport!=subway]
-{icon-image:rw_stat_stanzii_2_blue.png;
-node|z12-[railway=station][transport!=subway]
-{text:name; text-offset:7; font-size:9; font-family: DejaVu Sans Mono Book; text-halo-radius:1; text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0}
-
-
-node|z12-15[railway=station][transport=subway]{icon-image:metro_others6.png; z-index:10}
-node|z12-15[railway=station][transport=subway]::label{text:name; text-offset:13; font-size:10; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#ffffff;text-halo-color:#524F84; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:10}
-*/
-
-
-/*node|z16-[railway=subway_entrance],
-node|z16-[railway=station][transport=subway]::label{text:name; text-offset:13; font-size:10; font-family: DejaVu Sans Book; text-halo-radius:2; text-color:#ffffff;text-halo-color:#524F84; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;}
-*/
-
-
-node|z10-[aeroway=aerodrome]
- {icon-image:airport_world.png;
- text:name; text-offset:12; font-size:9; font-family: DejaVu Sans Condensed Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#1e7ca5; text-allow-overlap: false;z-index:17}
-
-
-
-node|z4-5[place][admin_level=2][capital=yes],
-node|z4-5[place][!admin_level][capital=yes]
-{icon-image: adm_5.png;allow-overlap:true; z-index:1}
-
-node|z4-5[place][admin_level=2][capital=yes],
-node|z4-5[place][!admin_level][capital=yes]
-{text-offset:6; text:name; font-size:12; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#4D0000; text-allow-overlap: false; -x-mapnik-min-distance:0; text-align: left; z-index:1}
-
-node|z4-5[place][population<100000][capital][admin_level<5] { icon-image:adm_4.png;
- text-offset:5; text:name; font-size: 10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#4D0000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z4-5[place][population>=100000][population<=5000000][capital][admin_level<5] {icon-image:adm_5.png;
-text-offset:5; text:name; font-size: 9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:1}
-
-node|z5[place=town][capital]{icon-image:town_4.png}
-node|z6[place=city][population<100000],
-node|z6[place=town][population<100000][admin_level]
-{icon-image:adm1_4_6.png; text-offset:5; text:name; font-size:9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z7[place=city][population<100000],
-node|z7[place=town][population<100000],
-{icon-image:town_6.png; text-offset:5; text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z7[place=town][!population],
-node|z7[place=city][!population],
-{icon-image:town_6.png; text-offset:5; text:name; font-size:9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z8[place=town]
-{icon-image:town_6.png; text-offset:5; text:name; font-size:9; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z6-8[place=city][population>=100000][population<=1000000],
-node|z6[place=town][population>=100000][population<=1000000][admin_level]
-{icon-image:adm1_5.png; text-offset:5; text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z7-8[place=city][population>=100000][population<=1000000],
-node|z7[place=town][population>=100000][population<=1000000]
-{icon-image:adm1_5.png; text-offset:5; text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;}
-
-node|z6[place=city][population>1000000]
-{icon-image:adm1_6_test2.png; text-offset:5; text:name; font-size: 10; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:1}
-
-node|z7-8[place=city][population>1000000][population<5000000]
-{icon-image:adm1_6_test2.png; text-offset:5; text:name; font-size: 11; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:2}
-
-node|z7-8[place=city][population>=5000000]
-{icon-image:adm_6.png; text-offset:5; text:name; font-size: 12; font-family: DejaVu Sans Bold; text-halo-radius:1; text-color:#ffffff;text-halo-color:#000000; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:3}
-
-
-/*node|z6-7[place=city][capital=yes] {text:name; font-size:11; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:1}
-node|z6-7[place=city][capital!=yes] {text:name; font-size:11; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0}*/
-
-node|z9-11[place=city][capital=yes][admin_level=2]{text:name; text-offset:-20; font-size:14; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#ffffff;text-halo-color:#4d0000; text-allow-overlap: false; -x-mapnik-min-distance:50; z-index:20}
-node|z9-11[place=city] {text:name; text-offset:-20; font-size:12; font-family: DejaVu Sans Bold; text-halo-radius:1.5; text-color:#ffffff;text-halo-color:#303030; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:16}
-
-
-
-
-
-/*node|z6-12[place=town],
-{text:name; font-size:10; font-family: DejaVu Sans Bold; text-halo-radius:2; text-color:#101010;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:3}*/
-
-node|z11[place=town] {text:name; font-size:12; font-family: DejaVu Sans Bold; text-color:#ffffff; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z12[place=town] {text:name; font-size:12; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z12[place=city] {text:name; font-size:13; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z13[place=town] {text:name; font-size:13; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z13[place=city] {text:name; font-size:14; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z14-[place=town] {text:name; font-size:14; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-node|z14-[place=city] {text:name; font-size:15; font-family: DejaVu Sans Bold; text-color:#ffffff; text-opacity:1; text-allow-overlap: true; text-halo-radius:1; text-halo-color:#000000; z-index:20}
-
-node|z9-[place=village]{text:name; text-offset:1; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#ffffff;text-halo-color:#303030; text-allow-overlap: false}
-
-node|z9-[place=hamlet]{text:name; text-offset:1; font-size:11; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#ffffff;text-halo-color:#303030; text-allow-overlap: false}
-
-/*
-
-area|z11-[landuse=nature_reserve],
-area|z12-[leisure=park],
-{text:name;text-offset:1; font-size:10;font-family: DejaVu Serif Italic; text-halo-radius:0.5; text-color:#fffccc;text-halo-color:#285500; text-allow-overlap: false}
-*/
-
-
-
-area|z11-12[landuse=nature_reserve],
-area|z11-12[boundary=national_park]
-{text:name;text-offset:1; font-size:9;font-family: DejaVu Serif Italic;
-text-halo-radius:0.7; text-color:#fffccc;text-halo-color:#092316;
-text-allow-overlap: false; max-width:100; text-offset:15;z-index:11;
-icon-image: botanic_12x13green1.png; z-index:11}
-
-
-/*area|z11-12[leisure=park]
-{
-icon-image: park_14x14green1.png; z-index:11}*/
-
-area|z13-15[landuse=nature_reserve],
-area|z13-15[boundary=national_park]
-{text:name;text-offset:1; font-size:9;font-family: DejaVu Serif Italic;
-text-halo-radius:0.7; text-color:#fffccc;text-halo-color:#092316;
-text-allow-overlap: false; max-width:100; text-offset:15;z-index:11;
-icon-image: botanic_12x13green1.png; z-index:11}
-
-
-area|z13-15[leisure=park]
-{text:name;text-offset:1; font-size:10;font-family: DejaVu Serif Italic;
-text-halo-radius:1; text-color:#fffccc;text-halo-color:#092316;
-text-allow-overlap: false; max-width:100; text-offset:15;z-index:11;
-icon-image: park_14x14green1.png; z-index:11}
-
-
-
-area|z16-[landuse=nature_reserve],
-area|z16-[boundary=national_park]
-{text:name;text-offset:1; font-size:12;font-family: DejaVu Serif Italic;
-text-halo-radius:1; text-color:#fffccc;text-halo-color:#092316;
-text-allow-overlap: false; max-width:100; text-offset:15;z-index:11;
-icon-image: botanic_12x13green1.png; z-index:11}
-
-
-area|z16-[leisure=park]
-{text:name;text-offset:1; font-size:12;font-family: DejaVu Serif Italic;
-text-halo-radius:1; text-color:#fffccc;text-halo-color:#092316;
-text-allow-overlap: false; max-width:100; text-offset:15;z-index:11;
-icon-image: park_14x14green1.png; z-index:11}
-
-
-
-
-
-/*node|z10-[landuse=nature_reserve]
-{icon-image:airport_world.png; z-index:17}*/
-
-/*node|z9-[leisure=park]
-{icon-image:airport_world.png; z-index:17}*/
-/*
-shields!!!!
-
-*/
-
-way|z10-[waterway=stream], way|z9-[waterway=river], way|z13-[waterway=canal]
-{text:name; font-size:10; font-family: DejaVu Sans Oblique; text-color:#a3e6ff; text-halo-radius:1; text-halo-color:#2e2e2e; text-position: line}
-
-way|z8-[natural=water]
-{text:name;text-offset:1; font-size:10.5;font-family: DejaVu Serif Italic; text-halo-radius:1; text-color:#a3e6ff;text-halo-color:#2e2e2e}
-
-
-node|z1-3[place=continent]
-{text:name; text-offset:-10; font-size:11; font-family: DejaVu Sans ExtraLight; text-halo-radius:1; text-color:#fffeb4;text-halo-color:#7a7a7a;z-index:-1;-x-mapnik-min-distance:0}
-
-node|z1-6[place=ocean]
-{text:name; text-offset:0; font-size:10; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#a3e6ff;text-halo-color:#2e2e2e;z-index:-1;-x-mapnik-min-distance:0}
-
-
-
-node|z7-[place=ocean]
-{text:name; text-offset:0; font-size:11; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-mapnik-min-distance:0}
-
-node|z6[place=sea]
-{text:name; text-offset:0; font-size:8; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-node|z7-[place=sea]
-{text:name; text-offset:0; font-size:10; font-family: DejaVu Sans Oblique; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-node|z3-4[natural=peak][ele>4500]
-{icon-image: mountain_peak6.png;
-text:ele; text-offset:3; font-size:7; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-}
-node|z5-6[natural=peak][ele>3500]
-{icon-image: mountain_peak6.png;
-text:ele; text-offset:3; font-size:7; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-}
-node|z7-12[natural=peak][ele>2500]
-{icon-image: mountain_peak6.png;
-text:ele; text-offset:3; font-size:7; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-}
-node|z12-[natural=peak]
-{icon-image: mountain_peak6.png;
-text:name; text-offset:3; font-size:7; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-}
-
-node|z2-3[place=country]
-{text:name; text-offset:0; font-size:9; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#91192B;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0;}
-
-node|z4-8[place=country]
-{text:name; text-offset:0; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#91192B;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0}
-
-node|z8-10[place=country]
-{text:name; text-offset:0; font-size:16; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0}
-
-/* подписи границ административно-территориальное деление */
-
-area|z3[boundary=administrative][admin_level=3]
-{text:name; text-offset:-5; font-size:9; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#fffeb4;text-halo-color:#ffffff;-x-mapnik-min-distance:0;max-width:50}
-
-
-area|z4[boundary=administrative][admin_level=3]
-{text:name; text-offset:-5; font-size:11; font-family: DejaVu Sans Mono Book; text-halo-radius:0; text-color:#fffeb4;text-halo-color:#ffffff;-x-mapnik-min-distance:0;max-width:50}
-
-
-area|z6-7[boundary=administrative][admin_level=4][name!=Москва]
-{text:name; text-offset:0; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:0.7; text-color:#ffffff;text-halo-color:#DB53EA; opacity:0.5; -x-mapnik-min-distance:0; z-index:11}
-
-area|z8-10[boundary=administrative][admin_level=4][name!=Москва]
-{text:name; text-offset:0; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:0.7; text-color:#ffffff;text-halo-color:#DB53EA; opacity:0.5; -x-mapnik-min-distance:0; z-index:11}
-
-
-area|z10-[boundary=administrative][admin_level=6]
-{text:name; text-offset:-10; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#EFDCFF;text-halo-color:#404040}
-
-area|z10-[boundary=administrative][admin_level=7]
-{text:name; text-offset:-10; font-size:12; font-family: DejaVu Sans Book; text-halo-radius:1; text-color:#EFDCFF;text-halo-color:#404040}
-
-
-/*node|z11-[place=suburb]
-{text:name; font-size:12; font-family: DejaVu Sans Book; text-color:#E3C2FF;z-index:20; text-halo-radius:0.3; text-halo-color:#662D91;opacity:0.9}
-*/
-
-node|z11-[place=suburb]
-{text:name; font-size:12; font-family: DejaVu Sans Book; text-color:#F0E1FF;z-index:20; text-halo-radius:0.3; text-halo-color:#662D91;opacity:0.7}
-
-
-
-area|z15-16[building] {text: addr:housenumber; text-halo-radius:1; text-halo-color:#1e0000; text-color: #ffeecc; text-position: line; font-size:8; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-node|z15-16[addr:housenumber][addr:street][!amenity][!shop] {text: addr:housenumber; text-halo-radius:1; text-halo-color:#1e0000; text-color: #ffeecc; text-position: line; font-size:8; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-
-area|z17-[building] {text: addr:housenumber; text-halo-radius:1; text-halo-color:#1e0000; text-color: #ffeecc; text-position: line; font-size:8; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-node|z17-[addr:housenumber][addr:street][!amenity][!shop] {text: addr:housenumber; text-halo-radius:1; text-halo-color:#1e0000; text-color: #ffeecc; text-position: line; font-size:8; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-
-
-
-node|z13-[highway=milestone][pk]{text:pk; font-size:7; text-halo-radius:5;-x-mapnik-min-distance:0}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/styles/osmosnimki-maps.mapcss b/src/styles/osmosnimki-maps.mapcss
deleted file mode 100644
index 1162683..0000000
--- a/src/styles/osmosnimki-maps.mapcss
+++ /dev/null
@@ -1,2887 +0,0 @@
-meta {
- title: "Osmosnimki mapcss stylesheet"; /* title shown in the menu */
-}
-
-
-
-
-/*
- Deja Vu MapCSS styles
- Osmosnimki maps style
-*/
-
-/* коментарии отделяются так и могут встречаться везде, где можно поставить пробел */
-
-
-/*
-
- ele[-11000]{fill-color:#98b7f5}
- ele[-10000]{fill-color:#9fbcf5}
- ele[-9000] {fill-color:#a6c1f5}
- ele[-8000] {fill-color:#abc4f5}
- ele[-7000] {fill-color:#b0c7f5}
- ele[-6000] {fill-color:#b5caf5}
- ele[-5000] {fill-color:#bacef5}
- ele[-4000] {fill-color:#bfd1f5}
- ele[-3000] {fill-color:#c4d4f5}
- ele[-2000] {fill-color:#c6d6f5}
- ele[-500] {fill-color:#c9d7f5}
- ele[-200] {fill-color:rgb(231, 209, 175); fill-opacity: 0.1}
- ele[200] {fill-color:rgb(231, 209, 175); fill-opacity: 0.2}
- ele[500] {fill-color:rgb(226, 203, 170); fill-opacity: 0.2}
- ele[1000] {fill-color:rgb(217, 194, 159); fill-opacity: 0.3}
- ele[2000] {fill-color:rgb(208, 184, 147); fill-opacity: 0.4}
- ele[3000] {fill-color:rgb(197, 172, 136); fill-opacity: 0.5}
- ele[4000] {fill-color:rgb(188, 158, 120); fill-opacity: 0.55}
- ele[5000] {fill-color:rgb(179, 139, 102); fill-opacity: 0.6}
- ele[6000] {fill-color:rgb(157, 121, 87); fill-opacity: 0.7}
- ele[7000] {fill-color:rgb(157, 121, 87); fill-opacity: 0.8}
- ele[8000] {fill-color:rgb(144, 109, 77); fill-opacity: 0.9}
-
-
-*/
-
-
-
-
-
-canvas {
- fill-color: #C4D4F5;
-
-}
-
-canvas {
- background-color: #fcf8e4; /* for josm: ground color*/
- default-points: false;
- default-lines: false;
-}
-
-way::* {
- linejoin: miter;
- linecap: none;
-}
-
-area {
- fill-opacity: 0.0001;
-}
-
-way:closed, relation[type=multipolygon] {
- fill-opacity: 1.0;
-}
-
-*::* {
- text-halo-color: white;
- text-anchor-horizontal: center;
- text-anchor-vertical: center;
-}
-
-
-
-/*
-селектор, что рисовать.
-
-canvas - фон, считается одним большим полигоном, намного больше карты.
- К нему можно применять свойства заливок.
- Для mapnik'a нельзя выбирать разные параметры фона для разных зумов, и не поддерживаются иные параметры, кроме цвета
-
-node - точка.
-way - путь. выбирает одновременно все границы полигонов и все линейные объекты
-line - линейные объекты (обычно - незамкнутые пути, обычно к ним неприменима заливка)
-area - площадные объекты (обычно - замкнутые пути, применимы как заливки, так и линии контуров)
-
- */
-
-area[natural=coastline] {fill-color: #fcf8e4;-x-mapnik-layer: bottom}
-
-area|z2-[natural=ocean] {fill-color: #C4D4F5;z-index:10; fill-opacity: 0.5}
-
-area|z3-[natural=glacier]{fill-position:background; fill-color: #fcfeff; fill-image: "glacier.png"}
-
-area|z10-[place=city],
-area|z10-[place=town]
-{fill-position:background; fill-color:#FAF7F7; z-index:1}
-
-area|z10-[place=hamlet],
-area|z10-[place=village],
-area|z10-[place=locality]
-/*
-квадратные скобки после объекта - селектор по тегам.
-основные варианты:
-тег=значение
-тег!=значение - выбрать все, кроме тег=значение
-тег - тег присутствует, значение не важно
-
- */
- {fill-position:background; fill-color:#f3eceb; z-index:1}
-/*
-z-index - порядковый номер слоя, в котором будет лежать объект.
-чем меньше, тем ниже будет находиться объект (другие будут перекрывать),
-относительно z-index можно расставлять приоритеты в отрисовке, то что рисуется раньше,
-вытеснит, то что рисуется позже.
-
-магия: на развязках обводки будут учитывать слои эстакад, номер слоя можно посмотреть в семантике - ключ layer.
-Если нужно принудительно положить линию поверх всех дорог:
--x-mapnik-layer: top;
-(к примеру, использовалось для рисования разделительных полос на primary )
-
-Если (вдруг) понадобится принудительно положить линию под все дороги (фон):
--x-mapnik-layer: bottom;
-
- */
-
-/*node|z14-[place=locality]{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-*/
-
-/* fill-color: - html-цвет заливки */
-
-area|z10-12[landuse=residential], area|z10-12[residential=urban]
-{fill-position:background; fill-color:#F7EFEC; z-index:3.1}
-
-area|z13-14[landuse=residential], area|z13-14[residential=urban]
-{fill-position:background; fill-color:#F7EFDC; z-index:2}
-
-area|z15-[landuse=residential], area|z10-[residential=urban]
-{fill-position:background; fill-color:#F7EFEC; z-index:2}
-
-area|z14-15[landuse=residential], area|z14-15[residential=urban], area|z14-15[place=locality]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#8B5E3C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:40}
-
-area|z15-[building][office]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#101010;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:40}
-
-area|z15-[landuse=commercial]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#101010;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:40}
-
-node|z14-15[place=locality]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#8B5E3C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:40}
-
-node|z16-[place=locality]
-{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#8B5E3C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-
-
-area|z16-[landuse=residential],
-area|z16-[residential=urban],
-area|z16-[place=locality]
-{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#8B5E3C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-area|z15-[landuse=construction]
-{
- fill-image: "construction-hatch.png";
- z-index:9;
- width: 0.3;
- color:#cb8904;
- dashes: 2,2;
-}
-
-area|z15-[amenity=kindergarten][!building],
-area|z15-[amenity=school][!building],
-area|z15-[amenity=university][!building]
-{fill-position:background; fill-color: #F7E1DD; z-index:9;}
-
-
-
-area|z13-[landuse=commercial]
-{fill-color: #EADCE5; z-index:9}
-
-area|z13-[highway=footway]
-{fill-color: #EADCE5; z-index:9}
-
-area|z15[highway=footway]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#7F747C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-area|z16-[highway=footway]
-{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#7F747C;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-area|z14-[power=generator]
-{width: .5; color: #D8D6D7; fill-position:background; fill-color: #D8D6D7; z-index:17}
-
-area|z14-[power=generator]
-{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#303030; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50;
- width: .5; color: #D8D6D7; fill-position:background; fill-color: #D8D6D7; z-index:17}
-
-
-area|z10-[residential=rural]
-{fill-position:background; fill-color:#F2E6DF; z-index:2}
-
-area|z16-[landuse=residential]
-{ width: 0.3; color:#cb8904; z-index:2}
-
-area|z10-[landuse=allotments],
-area|z10-15[leisure=garden],
-area|z10-15[landuse=orchard]
- {fill-position:background; fill-color:#edf2c1; z-index:3}
-
-area|z10-[leisure=park] {fill-position:background; fill-color:#C5E0A3; z-index:3}
-/* fill-image: картинка, которой надо заполнить полигон */
-
-
-area|z16-[leisure=garden],
-area|z16-[landuse=orchard]
- {fill-image:"sady10.png"; z-index:3}
-
-area|z12-[natural=scrub]
- {fill-position:background; fill-color: #e5f5dc; fill-image:"kust1.png"; z-index:3}
-area|z12-[natural=heath]
- {fill-position:background; fill-color: #ecffe5; z-index:3}
-
-
-
-area|z10-13[landuse=industrial],
-area|z10-13[landuse=railway],
-area|z10-13[landuse=military]
- {fill-position:background; fill-color: #D8D6D7; z-index:3}
-
-area|z14-[landuse=industrial],
-area|z14-[landuse=railway],
-area|z14-[landuse=military]
- {fill-position:background; fill-color: #DDDDDD; z-index:3}
-
-area|z14-15[landuse=industrial],
-area|z14-15[landuse=garages][name!=гаражи],
-area|z14-15[landuse=allotments],
-/*,area|z14-15[landuse=military]*/
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#303030; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-area|z16-[landuse=industrial],
-area|z16-[landuse=garages][name!=гаражи],
-area|z16-[landuse=allotments],
-/*,area|z16-[landuse=military]*/
-{text:name; font-size:11;
-font-family: "DejaVu Sans Book"; text-color:#303030; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-
-area|z15-[amenity=parking]{fill-position:background; fill-color: #ecedf4; z-index:3}
-
-area|z4-[natural=desert] {fill-image: "desert22.png" }
-
-
-/*
-после селектора типа объекта можно опционально ограничить зумы:
-|zA-B, A < B
-если нам не нужна какая-то из границ ("от минимального зума до такого-то"
-либо "от такого-то до бесконечности") - число A или B можно опустить.
-*/
-
-
-
-
-area|z12-[landuse=grass],
-area|z12-[natural=grass],
-area|z12-[natural=grassland],
-area|z12-[natural=meadow],
-area|z12-[landuse=meadow],
-area|z12-[landuse=recreation_ground]{
- fill-position: background;
- fill-color: #c4e9a4;
- z-index: 3;
- fill-image: "parks2.png";
-}
-
-
-
-
-area|z10-[natural=wetland] {fill-image:"swamp_world2.png"; fill-position:background; z-index:4}
-
-area|z10-[landuse=farmland], area|z10-[landuse=farm], area|z10-[landuse=field]
-{fill-position:background; fill-color: #E9D9BD; z-index:5}
-
-
-
-way|z10[mooring=yes]
-{icon-image:"port_11x14_blue.png"}
-
-way|z11-12[mooring=yes]
-{icon-image:"port_11x14_blue.png"; text:name; text-offset:11; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:40}
-
-node|z11-12[mooring=yes]
-{icon-image:"port_11x14_blue.png"; text:name; text-offset:11; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40}
-
-node|z11-12[amenity=ferry_terminal]
-{icon-image:"ferry_terminal.png"; text:name; text-offset:11; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40}
-
-
-
- way|z13-15[mooring=yes] {icon-image:"port_11x14_blue.png"; text:name; text-offset:13; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-node|z13-15[mooring=yes]
-{icon-image:"port_11x14_blue.png"; text:name; text-offset:13; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
- node|z13-15[amenity=ferry_terminal]
-{icon-image:"ferry_terminal.png"; text:name; text-offset:13; font-size:9;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
- way|z16-[mooring=yes] {icon-image:"port_11x14_blue.png"; text:name; text-offset:13; font-size:10;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
- max-width:50}
-
-node|z16-[mooring=yes]
-{icon-image:"port_11x14_blue.png"; text:name; text-offset:13; font-size:10;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:50}
-
-
-node|z16-[amenity=ferry_terminal]
-{icon-image:"ferry_terminal.png"; text:name; text-offset:13; font-size:10;
-font-family: "DejaVu Sans Condensed Bold"; text-color:#114fcd;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:50}
-
-
-area|z8-9[place=city],
-area|z8-9[place=town]
-{fill-position:background; fill-color: #F2ECEB; z-index:3}
-
-
-area|z10-[landuse=cemetery] {fill-position:background; fill-color: #e5f5dc; z-index:5; fill-image:"cemetry7_2.png"}
-area|z12-[landuse=cemetery] {text:name; text-offset:1; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#040404;text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; max-width:50}
-
-area|z13-[aeroway=aerodrome] {color: #008ac6; width: 0.8; z-index:5; fill-image:"bull2.png"}
-
-
-
-
-area|z12-[leisure=stadium],
-area|z12-[leisure=pitch]
-{fill-position:background; fill-color: #e3deb1; casing-width:0.1; casing-color: #996703; z-index:10;}
-
-area|z12-[leisure=track],
-area|z12-[leisure=playground]
-{fill-position:background; fill-color: #DEE7B4; casing-width:0.1; casing-color: #996703; z-index:10;}
-
-
-
-line|z9-10[waterway=river] {color: #C4D4F5; width: .6; z-index:9}
-
-
-
-/*
-свойства с префиксом background- в основном относятся к заливкам, без префиксов - к линиям.
-width - ширина линии
-color - цвет линии
-opacity - прозрачность (1 - видимый полностью, 0 - совсем невидимый)
-casing-width - ширина обводки
-casing-color - цвет обводки
-casing-opacity - прозрачность обводки
- */
-
-
-line|z9-10[waterway=stream] {color: #C4D4F5; width: .3; z-index:9}
-line|z10-12[waterway=stream] {color: #C4D4F5; width: .5; z-index:9}
-line|z13-14[waterway=stream] {color: #C4D4F5; width: 1; z-index:9}
-line|z14-[waterway=stream] {color: #C4D4F5; width: 1.5; z-index:9}
-
-line|z10-14[waterway=river] {color: #C4D4F5; width: .7; z-index:9}
-
-
-
-line|z15[waterway=river][!tunnel] {color: #C4D4F5; width: 4; z-index:9}
-line|z15[waterway=river][tunnel] {color: #C4D4F5; width: 4; z-index:9; dashes:3,3; linecap: butt}
-
-line|z16[waterway=river][!tunnel] {color: #C4D4F5; width: 6; z-index:9}
-line|z16[waterway=river][tunnel] {color: #C4D4F5; width: 6; z-index:9; dashes:6,6; linecap: butt}
-
-line|z17[waterway=river][!tunnel] {color: #C4D4F5; width: 10; z-index:9}
-line|z17[waterway=river][tunnel] {color: #C4D4F5; width: 10; z-index:9; dashes:6,6; linecap: butt}
-
-line|z18-[waterway=river][!tunnel] {color: #C4D4F5; width: 13; z-index:9}
-line|z18-[waterway=river][tunnel] {color: #C4D4F5; width: 13; z-index:9; dashes:6,6; linecap: butt}
-
-
-line|z10-[waterway=canal] {color: #abc4f5; width: .6; z-index:9}
-
-line|z14-[waterway=ditch],
-line|z14-[waterway=drain]
- {color: #abc4f5; width: .4; z-index:9}
-
-line|z10-13[waterway=stream],
-line|z9-13[waterway=river],
-line|z13[waterway=canal]
-{text:name; font-size:8; font-family: "DejaVu Sans Oblique"; text-color:#547bd1; text-position: line}
-
-line|z14-15[waterway=stream],
-line|z14-15[waterway=river][!tunnel],
-line|z14-15[waterway=canal]
-{text:name; font-size:9; font-family: "DejaVu Sans Oblique"; text-color:#547bd1; text-position: line}
-
-line|z16-[waterway]
-{text:name; font-size:11; font-family: "DejaVu Sans Oblique"; text-color:#547bd1; text-position: line}
-
-
-
-
-
-way|z10-[mooring=yes]{icon-image:"port_11x14_blue.png"}
-
-area|z6-[waterway=riverbank],
-area|z6-[natural=water],
-area|z10-[landuse=reservoir]
-{fill-position:background; fill-color: #C4D4F5; color: #C4D4F5; width:.1; z-index:9}
-
-area|z9-13[natural=water]{text:name; text-offset:1; font-size:9; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-node|z9-13[natural=water]{text:name; text-offset:1; font-size:9; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-
-area|z13-14[natural=water]{text:name; text-offset:1; font-size:10; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-node|z13-14[natural=water]{text:name; text-offset:1; font-size:10; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-
-area|z15-[natural=water]{text:name; text-offset:1; font-size:11; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-node|z15-[natural=water]{text:name; text-offset:1; font-size:11; font-family: "DejaVu Serif Italic"; text-color:#285fd1; text-allow-overlap: false; max-width: 30 }
-
-
-/*
-text - из какого поля брать текст
-text-offset - на сколько сдвинуть текст
-font-size - размер шрифта
-font-family - название шрифта
-text-color - цвет шрифта
-text-allow-overlap - разрешить этим надписям перекрывать другие
-text-halo-radius - радиус обводки у текста. ограничение mapnik'a - только в целых значениях пикселей
-text-halo-color - цвет обводки текста
-*/
-
-area|z15-[highway=service][area=yes],
-area|z15-[area:highway=service],
-area|z15-[area:highway=residential],
-area|z15-[area:highway=unclassified],
-area|z15-[area:highway=living_street]
-{width: 1; casing-width:0.3; fill-color:#ffffff; color: #ffffff; z-index: 15; casing-color: #996703;}
-
-area|z15-[landuse=carriageway],
-area|z15-[area:highway=secondary],
-area|z15-[area:highway=tertiary]
-{width: 1; casing-width:0.3; fill-color:#fcffd1; color: #fcffd1; z-index: 15; casing-color: #996703;}
-
-
-area|z15-[area:highway=primary]
-{width: 1; casing-width:0.3; fill-color:#fcea97; color: #fcea97; z-index: 15; casing-color: #996703;}
-
-
-area|z15-[area:highway=trunk],
-area|z15-[area:highway=motorway]
-{width: 1; casing-width:0.3; fill-color:#ffd780; color: #ffd780; z-index: 15; casing-color: #996703;}
-
-area|z15-[area:highway=footway],
-area|z15-[area:highway=pedestrian],
-area|z15-[highway=pedestrian][area],
-area|z15-[area:highway=path]
-{casing-width: 0.3; fill-color:#F2EFE9; z-index: 14; width:1; color: #F2EFE9;
-casing-color:#996703}
-
-/*{width: 1; casing-width:1; fill-color:#ffffff; color: #DDB8EA; z-index: 15;
-casing-color:#c2a2ce; casing-dashes:2,2}*/
-
-
-line|z13-16[highway=construction]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:0.5; casing-color:#996703;
-width:2; color: #ffffff; z-index:10; dashes:9,9}
-
-line|z17-[highway=construction]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:0.5; casing-color:#996703;
-width:3; color: #ffffff; z-index:10; dashes:9,9}
-
-/*
-dashes - пунктир (длины сегментов включенных и отключенных)
-возможно, кроме этого потребуется сменить linecap c round на butt
-*/
-
-
-
-
-line|z12[highway=footway],
-line|z12[highway=path]
-{casing-width:.3; casing-color: #ffffff; z-index:10}
-
-
-line|z13[highway=footway],
-line|z13[highway=path]
-{casing-width:.4; casing-color: #ffffff; z-index:10}
-
-line|z14[highway=footway],
-line|z14[highway=path]
-{casing-width:.5; casing-color: #ffffff; z-index:10}
-
-
-line|z15[highway=footway],
-line|z15[highway=path]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:.6; casing-color: #ffffff; z-index:10}
-
-/*line|z16-[highway=footway][tunnel!=yes][layer!=-1],
-line|z16-[highway=path][tunnel!=yes][layer!=-1]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.7; color: #ffffff; casing-width:0.5; casing-color:#bf96ce; z-index:10}*/
-
-line|z16-[highway=footway][tunnel!=yes][layer!=-1],
-line|z16-[highway=path][tunnel!=yes][layer!=-1]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.7; color: #ffffff; casing-width:0.5; casing-color:#D8B495; z-index:10}
-
-line|z16-[highway=footway][tunnel=yes][layer=-1],
-line|z16-[highway=path][tunnel=yes][layer=-1]
-{width:4; color: #D8B495; opacity: 0.5; z-index:10}
-
-line|z14[highway=cycleway]
-{width:1; color: #4BBD94; z-index:10}
-
-
-line|z15[highway=cycleway]
-{width:1.5; color: #4BBD94; z-index:10}
-
-line|z15-[highway=cycleway]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z16-[highway=cycleway]
-{width:2; color: #4BBD94; z-index:10}
-
-
-
-
-line|z14-[highway=pedestrian][!area]
-{width:2; color: #ffffff; casing-width:0.5; casing-color:#996703; z-index:10}
-
-line|z14-[highway=pedestrian]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:.3; casing-color:#bf96ce}
-
-area|z14-[highway=pedestrian]
-{text: name; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:.3; casing-color:#bf96ce}
-
-/*line|z15-[highway=steps]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
-casing-width:.3; casing-color:#ffffff;
-width:3; color: #bf96ce; z-index:10; dashes:1,1; linecap:butt;}*/
-
-/*
-для отрисовки лестницы используется широкая линия с частым пунктиром, создающая впечатление перпендикулярных линий "ступенек".
-linecap:butt требуется для того, чтобы сегменты не "слипались" в одну линию.
-*/
-
-
-line|z12[highway=road],
-line|z12[highway=track],
-line|z12[highway=residential],
-line|z9[highway=secondary],
-line|z9-10[highway=tertiary],
-line|z14[highway=service][living_street!=yes][service!=parking_aisle]
- {width:0.3; opacity: 0.6; color: #996703; z-index:10; -x-mapnik-layer: bottom;}
-
-
-line|z13[highway=road],
-line|z13[highway=track]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:0.6; opacity: 0.5; color: #996703; z-index:10; -x-mapnik-layer: bottom;}
-
-line|z14-16[highway=road],
-line|z14-16[highway=track]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.5; color: #ffffff;
-casing-width:0.5; casing-color: #996703;
-z-index:9}
-
-
-line|z16-[highway=road],
-line|z16-[highway=track]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
-width:2.5; color: #ffffff;
-casing-width:0.5; casing-color: #996703;
-z-index:9}
-
-
-
-line|z13-14[highway=residential]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:2; color: #ffffff;
-casing-width:0.1; casing-color: #996703;
-z-index:10}
-
-line|z15-[highway=residential]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.2; color: #ffffff;
-casing-width:0.3; casing-color: #996703;
-z-index:10}
-
-line|z15[highway=service][living_street=yes],
-line|z15[highway=service][service=parking_aisle]
-{width:1.5; opacity: 1; color: #ffffff; casing-width:0.1; casing-color: #996703; z-index:10}
-
-
-
-
-line|z16-[highway=service][living_street=yes],
-line|z16-[highway=service][service=parking_aisle]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
- width:2; color: #ffffff;
- casing-width:0.3; casing-color: #996703;
- z-index:10}
-
-
-line|z12[highway=residential],
-line|z12[highway=unclassified]
-{width:0.5; color: #ffffff;
-casing-width:0.1; casing-color: #996703;
- z-index:10}
-
-line|z13[highway=residential],
-line|z13[highway=unclassified]
-{width:2; color: #ffffff;
-casing-width:0.1; casing-color: #996703;
- z-index:10}
-
-
-line|z14-15[highway=residential],
-line|z14-15[highway=unclassified],
-line|z15[highway=service][living_street!=yes][service!=parking_aisle],
-
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:2.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-line|z16[highway=residential],
-line|z16[highway=unclassified],
-line|z16[highway=living_street],
-line|z16[highway=service][living_street!=yes][service!=parking_aisle]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:11; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-line|z17-[highway=residential],
-line|z17-[highway=unclassified],
-line|z17-[highway=living_street],
-line|z17-[highway=service][living_street!=yes][service!=parking_aisle]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:11; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4.5; color: #ffffff;
- casing-width:0.5; casing-color: #996703;
- z-index:10}
-
-
-
-/* line|z10[highway=tertiary] */
-line|z10[highway=secondary]
- {text: name; text-position: line; text-spacing: 512;
- width:1.2; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-line|z11[highway=secondary],
-line|z11[highway=tertiary]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
- width:0.4; color: #fcffd1;
- casing-width:0.1; casing-color: #996703;
- z-index:11}
-
-line|z12[highway=secondary],
-line|z12[highway=secondary_link],
-line|z12[highway=tertiary],
-line|z12[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff; text-halo-radius: 1; text-halo-color: #ffffff;
- width:1; color: #fcffd1;
- casing-width:0.2; casing-color: #996703;
- z-index:11}
-
-line|z13[highway=secondary],
-line|z13[highway=secondary_link],
-line|z13[highway=tertiary],
-line|z13[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Book"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #fcffd1;
- casing-width:0.35; casing-color: #996703;
- z-index:11}
-
-line|z14[highway=secondary],
-line|z14[highway=secondary_link],
-line|z14[highway=tertiary],
-line|z14[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Bold"; font-size:9;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z14[highway=secondary][tunnel!=yes],
-line|z14[highway=secondary_link][tunnel!=yes],
-line|z14[highway=tertiary][tunnel!=yes],
-line|z14[highway=tertiary_link][tunnel!=yes]
- {width:5; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-line|z14[highway=secondary][tunnel=yes],
-line|z14[highway=secondary_link][tunnel=yes],
-line|z14[highway=tertiary][tunnel=yes],
-line|z14[highway=tertiary_link][tunnel=yes]
- {width:5; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:11}
-
-
-line|z15[highway=secondary],
-line|z15[highway=secondary_link],
-line|z15[highway=tertiary],
-line|z15[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Bold"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z15[highway=secondary][tunnel!=yes],
-line|z15[highway=secondary_link][tunnel!=yes],
-line|z15[highway=tertiary][tunnel!=yes],
-line|z15[highway=tertiary_link][tunnel!=yes]
- {width:6; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-line|z15[highway=secondary][tunnel=yes],
-line|z15[highway=secondary_link][tunnel=yes],
-line|z15[highway=tertiary][tunnel=yes],
-line|z15[highway=tertiary_link][tunnel=yes]
- {width:6; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:11}
-
-line|z16[highway=secondary],
-line|z16[highway=secondary_link],
-line|z16[highway=tertiary],
-line|z16[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:10;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z16[highway=secondary][tunnel!=yes],
-line|z16[highway=secondary_link][tunnel!=yes],
-line|z16[highway=tertiary][tunnel!=yes],
-line|z16[highway=tertiary_link][tunnel!=yes]
- {width:7; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-line|z16[highway=secondary][tunnel=yes],
-line|z16[highway=secondary_link][tunnel=yes],
-line|z16[highway=tertiary][tunnel=yes],
-line|z16[highway=tertiary_link][tunnel=yes]
- {width:7; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:11}
-
-
-line|z17[highway=secondary],
-line|z17[highway=secondary_link],
-line|z17[highway=tertiary],
-line|z17[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Bold"; font-size:11;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z17[highway=secondary][tunnel!=yes],
-line|z17[highway=secondary_link][tunnel!=yes],
-line|z17[highway=tertiary][tunnel!=yes],
-line|z17[highway=tertiary_link][tunnel!=yes]
- {width:9; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-line|z17[highway=secondary][tunnel=yes],
-line|z17[highway=secondary_link][tunnel=yes],
-line|z17[highway=tertiary][tunnel=yes],
-line|z17[highway=tertiary_link][tunnel=yes]
- {width:9; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:11}
-
-
-line|z18-[highway=secondary],
-line|z18-[highway=secondary_link],
-line|z18-[highway=tertiary],
-line|z18-[highway=tertiary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Bold"; font-size:13;
-text-halo-radius: 2; text-halo-color: #fcffd1; width:11; color: #fcffd1;
- casing-width:0.5; casing-color: #996703;
- z-index:11}
-
-/*
-
-на данный момент конвертер не умеет каскадировать стили, поэтому каждый раз на каждую выбранную линию приходится писать все свойства.
-
-*/
-
-/*закладка*/
-line|z7[highway=primary]
-{width:1; color: #fcea97;
-z-index:12}
-
-line|z8[highway=primary]
-{width:1.2; color: #fcea97;
-casing-width:0.1; casing-color: #996703;
-z-index:13}
-
-
-
-
-line|z9[highway=primary],
-line|z9[highway=primary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:1.5; color: #fcea97;
-casing-width:.3; casing-color: #996703;
-z-index:12}
-
-line|z10[highway=primary],
-line|z10[highway=primary_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:3; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-line|z11[highway=primary],
-line|z11[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z12[highway=primary],
-line|z12[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:5; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z13[highway=primary],
-line|z13[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
- width:6; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z14[highway=primary],
-line|z14[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050;
- font-family: "DejaVu Sans Bold"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z14[highway=primary][tunnel!=yes],
-line|z14[highway=primary_link][tunnel!=yes]
- {width:7; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z14[highway=primary][tunnel=yes],
-line|z14[highway=primary_link][tunnel=yes]
-{width:7; color: #cdcdcd;opacity: 0.6; linecap:square;
- z-index:12}
-
-line|z15[highway=primary],
-line|z15[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold";
- font-size:10; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z15[highway=primary][tunnel!=yes],
-line|z15[highway=primary_link][tunnel!=yes]
- {width:8; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z15[highway=primary][tunnel=yes],
-line|z15[highway=primary_link][tunnel=yes]
-{width:8; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-
-line|z16[highway=primary],
-line|z16[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold";
- font-size:11; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z16[highway=primary][tunnel!=yes],
-line|z16[highway=primary_link][tunnel!=yes]
- {width:9; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-line|z16[highway=primary][tunnel=yes],
-line|z16[highway=primary_link][tunnel=yes]
-{width:9; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-line|z17[highway=primary],
-line|z17[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #505050;
- font-family: "DejaVu Sans Bold"; font-size:11; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z17[highway=primary][tunnel!=yes],
-line|z17[highway=primary_link][tunnel!=yes]
- {width:13; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-line|z17[highway=primary][tunnel=yes],
-line|z17[highway=primary_link][tunnel=yes]
-{width:13; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-line|z18-[highway=primary],
-line|z18-[highway=primary_link]
- {text: name; text-position: line; text-spacing: 512; text-color: #404040; font-family: "DejaVu Sans Bold"; font-size:13; text-halo-radius: 1; text-halo-color: #ffffff;
- width:15; color: #fcea97;
- casing-width:.5; casing-color: #996703;
- z-index:12}
-
-
-line|z6[highway=trunk]
-{width:0.9; color: #F7EFA9;
-z-index:13}
-
-line|z6[highway=motorway]
-{width:0.9; color: #F7EFA9;
-z-index:13}
-
-line|z7[highway=trunk]
-{width:1; color: #fbcd40;
-z-index:13}
-
-line|z7[highway=motorway]
-{width:1.2; color: #fc9265;
-z-index:13}
-
-line|z8[highway=trunk],
-line|z8[highway=motorway]
-{width:1.7; color: #EDBF88;
-casing-width:0.2; casing-color: #996703;
-z-index:13}
-
-line|z8[highway=trunk]::centerline,
-line|z8[highway=motorway]::centerline
-{width:0.3; color: #fa6478; z-index:13}
-
-line|z9[highway=trunk],
-line|z9[highway=motorway]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
-width:2.5; color: #ffd780;
-casing-width:0.5; casing-color: #996703;
-z-index:13}
-
-
-
-line|z10[highway=trunk],
-line|z10[highway=motorway]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:4; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z11[highway=trunk],
-line|z11[highway=motorway]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;
- width:5; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z12[highway=trunk],
-line|z12[highway=motorway]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:10; text-halo-radius: 1; text-halo-color: #ffffff;
- width:7; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z13[highway=trunk],
-line|z13[highway=motorway]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:11; text-halo-radius: 1; text-halo-color: #ffffff;
- width:8; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z14[highway=trunk],
-line|z14[highway=trunk_link],
-line|z14[highway=motorway],
-line|z14[highway=motorway_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:11;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z14[highway=trunk][tunnel!=yes],
-line|z14[highway=trunk_link][tunnel!=yes],
-line|z14[highway=motorway][tunnel!=yes],
-line|z14[highway=motorway_link][tunnel!=yes]
- {width:9; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
- line|z14[highway=trunk][tunnel=yes],
-line|z14[highway=trunk_link][tunnel=yes],
-line|z14[highway=motorway][tunnel=yes],
-line|z14[highway=motorway_link][tunnel=yes]
-{width:9; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-
-
-line|z15[highway=trunk],
-line|z15[highway=trunk_link],
-line|z15[highway=motorway],
-line|z15[highway=motorway_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:12;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z15[highway=trunk][tunnel!=yes],
-line|z15[highway=trunk_link][tunnel!=yes],
-line|z15[highway=motorway][tunnel!=yes],
-line|z15[highway=motorway_link][tunnel!=yes]
- {width:10; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z15[highway=trunk][tunnel=yes],
-line|z15[highway=trunk_link][tunnel=yes],
-line|z15[highway=motorway][tunnel=yes],
-line|z15[highway=motorway_link][tunnel=yes]
-{width:10; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-
-line|z16[highway=trunk],
-line|z16[highway=trunk_link],
-line|z16[highway=motorway],
-line|z16[highway=motorway_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold"; font-size:11;
-text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z16[highway=trunk][tunnel!=yes],
-line|z16[highway=trunk_link][tunnel!=yes],
-line|z16[highway=motorway][tunnel!=yes],
-line|z16[highway=motorway_link][tunnel!=yes]
- {width:11; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
- line|z16[highway=trunk][tunnel=yes],
-line|z16[highway=trunk_link][tunnel=yes],
-line|z16[highway=motorway][tunnel=yes],
-line|z16[highway=motorway_link][tunnel=yes]
-{width:11; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-
-line|z17[highway=trunk],
-line|z17[highway=trunk_link],
-line|z17[highway=motorway],
-line|z17[highway=motorway_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold";
-font-size:11; text-halo-radius: 1; text-halo-color: #ffffff}
-
-line|z17[highway=trunk][tunnel!=yes],
-line|z17[highway=trunk_link][tunnel!=yes],
-line|z17[highway=motorway][tunnel!=yes],
-line|z17[highway=motorway_link][tunnel!=yes]
- {width:13; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-line|z17[highway=trunk][tunnel=yes],
-line|z17[highway=trunk_link][tunnel=yes],
-line|z17[highway=motorway][tunnel=yes],
-line|z17[highway=motorway_link][tunnel=yes]
-{width:13; color: #cdcdcd; opacity: 0.6; linecap:square;
- z-index:12}
-
-
-line|z18-[highway=trunk],
-line|z18-[highway=trunk_link],
-line|z18-[highway=motorway],
-line|z18-[highway=motorway_link]
-{text: name; text-position: line; text-spacing: 512; text-color: #505050; font-family: "DejaVu Sans Bold";
-font-size:12; text-halo-radius: 1; text-halo-color: #ffffff;
- width:15; color: #ffd780;
- casing-width:1; casing-color: #996703;
- z-index:13}
-
-/*закладка*/
-line|z9-[highway=trunk]::centerline,
-line|z9-[highway=trunk_link]::centerline,
-line|z9-[highway=motorway]::centerline,
-line|z9-[highway=motorway_link]::centerline,
-line|z13-[highway=primary]::centerline,
-line|z13-[highway=primary_link]::centerline
- {width:.3; color: #fa6478; z-index:31}
-
-
-
-/*
-
-для линий можно определять subpart'ы и рисовать одну линию несколько
-раз _даже после появления каскадинга_ (иначе сходные правила будут объединен
-в одно с затиранием некоторых свойств)
-
-::subpart_name
-
-в данном примере для одной линии (например, highway=trunk) рисуется две линии:
-широкая жёлтая с обводкой (см. выше, без subpart) и тонкая красная по центру
-(с subpart centerline), рисуемая поверх всех жёлтых, даже если на развязках они должны уходить под низ.
-
-
-
-*/
-line|z15-[highway=trunk][oneway=yes],
-line|z15-[highway=trunk_link][oneway=yes],
-line|z15-[highway=motorway][oneway=yes],
-line|z15-[highway=motorway_link][oneway=yes],
-line|z15-[highway=primary][oneway=yes],
-line|z15-[highway=primary_link][oneway=yes],
-line|z15-[highway=secondary][oneway=yes],
-line|z15-[highway=secondary_link][oneway=yes],
-line|z15-[highway=tertiary][oneway=yes],
-line|z15-[highway=tertiary_link][oneway=yes],
-line|z15-[highway=residential][oneway=yes],
-line|z15-[highway=unclassified][oneway=yes]
-{pattern-image:arrows; z-index:15; -x-mapnik-layer: top; fill:red}
-
-
-area|z16-[amenity=parking]{icon-image:"parking_osm.png"; z-index:1}
-node|z16-[amenity=parking]{icon-image:"parking_osm.png"; z-index:1}
-/*
-
-pattern-image - заливка линии картинкой.
-
-arrows - специальное значение для синих стрелочек, рисуемых в векторе
-
-*/
-
-
-
-line|z8[railway=rail][service!=siding][service!=spur][service!=yard]
-{width:1; color: #303030;z-index:15}
-line|z8[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
-{width:0.7; color: #ffffff; dashes:4,8; z-index:15}
-
-line|z9[railway=rail][service!=siding][service!=spur][service!=yard]
- {width:1.4; color: #5A516D;z-index:15}
-line|z9[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
- {width:1; color: #ffffff; dashes: 6,6;z-index:15}
-
-line|z10-13[railway=rail][service!=siding][service!=spur][service!=yard]
- {width:1.7; color: #666699;z-index:15}
-line|z10-13[railway=rail][service!=siding][service!=spur][service!=yard]::ticks
- {width:1.1; color: #ffffff; dashes: 10,8; z-index:15}
-
-line|z14-15[railway=rail][service!=siding][service!=spur][service!=yard],
-line|z15-[railway=narrow_gauge],
-line|z15-[railway=light_rail]
- {width:2.2; color: #666699;z-index:15}
-
-
-line|z12-15[railway=rail][service!=siding][service!=spur][service!=yard]::ticks,
-line|z15-[railway=narrow_gauge]::ticks,
-line|z15-[railway=light_rail]::ticks
- {width:1.3; color: #ffffff; dashes: 10,8;z-index:15}
-
-
-line|z16-[railway=rail]
- {width:3.5; color: #666699;z-index:15}
-line|z16-[railway=rail]::ticks
- {width:2.2; color: #ffffff; dashes: 12,9;z-index:15}
-
-
-/*
-железная дорога рисуется в две линии:
- - цельная широкая чёрная линия (фон)
- - белый тонкий пунктир поверх нее
-
-*/
-
-
-line|z12-[railway=subway][colour=red] {width:3; color: #DD0000;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=blue] {width:3; color: #072889;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=purple] {width:3; color: #8B509C;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=orange] {width:3; color: #FF7700;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=green] {width:3; color: #006600;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=brown] {width:3; color: #BB7700;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-line|z12-[railway=subway][colour=yellow] {width:3; color: #F7C600;z-index:15; dashes:3,3; opacity:0.3; linecap: butt; -x-mapnik-layer: top;}
-
-
-/*line|z13-15[railway=subway][!colour][tunnel!=yes] {width:1.5; color:#700E19;z-index:15;
-opacity:0.5; dashes:3,2; linecap: butt; z-index:15}*/
-
-line|z12-14[railway=subway][!colour][tunnel!=yes]
-{width:1.7; color: #9B5F63;z-index:15}
-line|z12-14[railway=subway][!colour][tunnel!=yes]::ticks
-{width:1.1; color: #ffffff; dashes: 10,8;z-index:15}
-
-
-line|z15-[railway=subway][!colour][tunnel!=yes]
-{width:2.2; color: #9B5F63;z-index:15}
-line|z15-[railway=subway][!colour][tunnel!=yes]::ticks
-{width:1.3; color: #ffffff; dashes: 10,8;z-index:15}
-
-line|z13-15[railway=subway][!colour][tunnel=yes]
-{width:2.2; color: #9B5F63; opacity:0.4; z-index:15}
-line|z13-15[railway=subway][!colour][tunnel=yes]::ticks
-{width:1.3; color: #ffffff; dashes: 10,8; opacity:0.4; z-index:15}
-
-
-
-
-line|z14[bridge=yes][highway=footway]
-{width:2.5; color:#D3DA95; z-index:20; casing-width:0.3; linecap:butt;
-casing-color:#040404}
-
-
-line|z15[bridge=yes][highway=footway]
-{width:4; color:#D3DA95; z-index:20; casing-width:0.3; linecap:butt;
-casing-color:#040404}
-
-line|z16[bridge=yes][highway=footway]
-{width:6; color:#D3DA95; z-index:20; casing-width:0.3; linecap:butt;
-casing-color:#040404}
-
-
-
-line|z14[highway=primary][bridge],
-line|z14[highway=primary_link][bridge]
- {width:7; color: #F9D84B; linecap:butt;
- z-index:30}
-
-line|z14[highway=trunk][bridge],
-line|z14[highway=trunk_link][bridge],
-line|z14[highway=motorway][bridge],
-line|z14[highway=motorway_link][bridge]
- {width:8; color: #F9D84B; linecap:butt;
- z-index:30;}
-
-line|z15[highway=primary][bridge],
-line|z15[highway=primary_link][bridge]
- {width:8; color: #F9D84B; linecap:butt;
- z-index:30}
-line|z15[highway=trunk][bridge],
-line|z15[highway=trunk_link][bridge],
-line|z15[highway=motorway][bridge],
-line|z15[highway=motorway_link][bridge]
- {width:9; color: #F9D84B; linecap:butt;
- z-index:30}
-
-line|z15[highway=primary][bridge],
-line|z15[highway=primary_link][bridge]
- {width:9; color: #F9D84B; linecap:butt;
- z-index:30}
-
-line|z16[highway=trunk][bridge],
-line|z16[highway=trunk_link][bridge],
-line|z16[highway=motorway][bridge],
-line|z16[highway=motorway_link][bridge]
- {width:10; color: #F9D84B; linecap:butt;
- z-index:30}
-
-line|z17[highway=primary][bridge],
-line|z17[highway=primary_link][bridge]
- {width:10; color: #F9D84B; linecap:butt;
- z-index:30}
-
-line|z17[highway=trunk][bridge],
-line|z17[highway=trunk_link][bridge],
-line|z17[highway=motorway][bridge],
-line|z17[highway=motorway_link][bridge]
- {width:11; color: #F9D84B; linecap:butt; z-index:30}
-
-node|z16-[highway=traffic_signals]
-{icon-image:"svetofor3.png"}
-
-line|z15-[marking=sport][!colour]
- {width:.5; color: #a0a0a0;z-index:16; -x-mapnik-layer: top;}
-line|z15-[marking=sport][colour=white],
-line|z15-[marking=sport][color=white] {width:1; color: white;z-index:16; -x-mapnik-layer: top;}
-line|z15-[marking=sport][colour=red],
-line|z15-[marking=sport][color=red] {width:1; color: #c00000;z-index:16; -x-mapnik-layer: top;}
-line|z15-[marking=sport][colour=black],
-line|z15-[marking=sport][color=black] {width:1; color: black;z-index:16; -x-mapnik-layer: top;}
-line|z15-[marking=sport][colour=blue],
-line|z15-[marking=sport][color=blue] {width:1; color: #0000c0;z-index:16; -x-mapnik-layer: top;}
-
-node|z15-[amenity=bus_station] {icon-image:"aut2_16x16_park.png"}
-node|z16-[highway=bus_stop] {icon-image:"bus_station.png"}
-node|z16-[railway=tram_stop] {icon-image:"tramway_14x13.png"}
-
-
-
-
-node|z15-[amenity=fuel] {icon-image:"fuel.png"}
-/*
-icon-image - картинка иконки
-
-*/
-
-
-node|z15-[amenity=pharmacy] {icon-image:"pharmacy.png"}
-node|z15-[amenity=cinema] {icon-image:"cinema_osm.png"}
-node|z15-[tourism=museum] {icon-image:"museum_osm.png"}
-node|z15-[tourism=zoo] {icon-image:"zoo.png"}
-
-node|z16-[tourism=zoo] {icon-image:"zoo.png";
-text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-node|z16-[amenity=courthouse] {icon-image:"sud_14x13.png"}
-
-node|z16-[amenity=toilets] {icon-image:"toilets.png"}
-
-node|z16[amenity=restaurant] {icon-image:"restaurant.png"}
-node|z16[amenity=fast_food] {icon-image:"fast_food.png";}
-node|z16[amenity=pub] {icon-image:"pub_osm.png"; text:name}
-node|z16[amenity=bar] {icon-image:"bar_osm.png"}
-node|z16[amenity=cafe] {icon-image:"cafe_osm.png"}
-node|z17-[amenity=cafe] {icon-image:"cafe_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z16[amenity=ice_cream] {icon-image:"ice_cream.png"}
-node|z16[amenity=bicycle_rental] {icon-image:"bicycle_rental.png"}
-node|z16[amenity=car_rental] {icon-image:"car_rental.png"}
-node|z16[amenity=car_wash] {icon-image:"car_wash.png"}
-node|z16[amenity=bank] {icon-image:"amerikan_bank.png"}
-node|z16[amenity=dentist] {icon-image:"dentist_osm.png"}
-node|z16[amenity=social_facility] {icon-image:"social_facility.png"}
-node|z16[amenity=veterinary] {icon-image:"veterinary.png"}
-node|z16[amenity=fountain],
-area|z16[amenity=fountain],
- {icon-image:"fountain.png"}
-node|z16[amenity=studio] {icon-image:"studio.png"}
-node|z16[amenity=courthouse] {icon-image:"courthouse.png"}
-node|z16[amenity=embassy] {icon-image:"poconzulat.png"}
-node|z16[amenity=marketplace] {icon-image:"marketplace.png"}
-node|z16[amenity=sauna] {icon-image:"sauna.png"}
-node|z16[amenity=townhall] {icon-image:"townhall.png"}
-
-
-
-node|z17-[amenity=restaurant] {icon-image:"restaurant.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z17-[amenity=fast_food] {icon-image:"fastfood_1.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=pub] {icon-image:"pub_osm.png" ; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-node|z17-[amenity=bar] {icon-image:"bar_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=ice_cream] {icon-image:"ice_cream.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=bicycle_rental] {icon-image:"bicycle_rental.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=car_rental] {icon-image:"car_rental.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=car_wash] {icon-image:"car_wash.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=bank] {icon-image:"amerikan_bank.png"; text-offset:14; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-node|z17-[amenity=dentist] {icon-image:"dentist_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=social_facility] {icon-image:"social_facility.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=veterinary] {icon-image:"veterinary.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=fountain],
-area|z17-[amenity=fountain]
-{icon-image:"fountain.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=studio] {icon-image:"studio.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=courthouse] {icon-image:"courthouse.png"; text-offset:15; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-node|z17-[amenity=embassy] {icon-image:"poconzulat.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=marketplace] {icon-image:"marketplace.png"; text-offset:14; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=sauna] {icon-image:"sauna.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[amenity=townhall] {icon-image:"townhall.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-node|z16[amenity=place_of_worship][religion=buddhist] {icon-image:"budda_hram.png"}
-node|z16[amenity=place_of_worship][religion=buddhist]
-{icon-image:"budda_hram.png"}
-node|z15-16[amenity=place_of_worship][religion=christian]{icon-image:"pravosl_hram_osm.png"}
-node|z16[amenity=place_of_worship][religion=hindu] {icon-image:"sinagoga_osm.png"}
-node|z16[amenity=place_of_worship][religion=hindu]
-{icon-image:"sinagoga_osm.png"}
-node|z16[amenity=place_of_worship][religion=muslim]{icon-image:"mechet_osm.png"}
-node|z16[amenity=place_of_worship][religion=muslim]
-{icon-image:"mechet_osm.png"}
-
-node|z17-[amenity=place_of_worship][religion=buddhist] {icon-image:"budda_hram.png"; text-offset:20;
-text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=buddhist]
-{icon-image:"budda_hram.png"; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=christian]{icon-image:"pravosl_hram_osm.png";
-text-offset:25; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=hindu] {icon-image:"sinagoga_osm.png"; text-offset:20;
-text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=hindu]
-{icon-image:"sinagoga_osm.png"; text-offset:20; text:name; font-size:8;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=muslim]{icon-image:"mechet_osm.png"; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-node|z17-[amenity=place_of_worship][religion=muslim]
-{icon-image:"mechet_osm.png"; text-offset:20; text:name; font-size:9;
-font-family:"DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-
-
-
-node|z16[tourism=camp_site] {icon-image:"camp_site.png"}
-node|z16[tourism=information] {icon-image:"information.png"}
-node|z16[historic=memorial] {icon-image:"memorial.png"}
-node|z16[historic=monument] {icon-image:"monument_osm.png"}
-node|z16[historic=wayside_cross ] {icon-image:"catolicizm_osm.png"}
-node|z16[historic=rune_stone] {icon-image:"cult_place_12x12.png"}
-node|z16[sport=9pin] {icon-image:"9pin.png"}
-node|z16[sport=10pin] {icon-image:"9pin.png"}
-node|z16[sport=equestrian] {icon-image:"equestrian.png"}
-node|z16[sport=skating] {icon-image:"skating.png"}
-node|z16[sport=table_tennis] {icon-image:"table_tennis.png"}
-node|z17-[tourism=camp_site] {icon-image:"camp_site.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[tourism=information] {icon-image:"information.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[historic=memorial] {icon-image:"memorial.png"; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-node|z17-[historic=monument] {icon-image:"monument_osm.png"; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-node|z17-[historic=wayside_cross ] {icon-image:"catolicizm_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[historic=rune_stone] {icon-image:"cult_place_12x12.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[sport=9pin] {icon-image:"9pin.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[sport=10pin] {icon-image:"9pin.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[sport=equestrian] {icon-image:"equestrian.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[sport=skating] {icon-image:"skating.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[sport=table_tennis] {icon-image:"table_tennis.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-node|z15-16[shop=art] {icon-image:"art.png"}
-node|z16[shop=car_repair] {icon-image:"car_repair.png"}
-node|z16[shop=clothes] {icon-image:"clothes.png"}
-node|z16[shop=hairdresser] {icon-image:"hairdresser.png"}
-node|z16[shop=shoes] {icon-image:"shoes.png"}
-node|z16[shop=optician] {icon-image:"optician.png"}
-node|z16[shop=supermarket] {icon-image:"supermarket.png"}
-node|z16[leisure=water_park] {icon-image:"water_park.png"}
-node|z16[leisure=swimming_pool] {icon-image:"swimming_pool.png"}
-node|z16[leisure=travel_agent] {icon-image:"turizm.png"}
-node|z16[leisure=dressmaker] {icon-image:"atelje.png"}
-
-
-node|z17-[man_made=water_well] {icon-image:"water_well.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][man_made=water_well] {icon-image:"water_well.png"; text-offset:15; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-
-
-
-
-
-
-
-
-
-
-node|z17-[shop=art] {icon-image:"art.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[shop=car_repair] {icon-image:"car_repair.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[shop=clothes] {icon-image:"clothes.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[shop=hairdresser] {icon-image:"hairdresser.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[shop=shoes] {icon-image:"shoes.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[shop=optician] {icon-image:"optician.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z17-[shop=supermarket] {icon-image:"supermarket.png"; text-offset:14; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z17-[leisure=water_park] {icon-image:"water_park.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[leisure=swimming_pool] {icon-image:"swimming_pool.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[leisure=travel_agent] {icon-image:"turizm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-node|z17-[leisure=dressmaker] {icon-image:"atelje.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-/*node|z14-[amenity=place_of_worship]
-{text: name; text-color: #623f00; font-family: "DejaVu Serif Italic"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;text-offset:3;max-width:70}
-area|z14-[amenity=place_of_worship]
-{text: name; text-color: #623f00; font-family: "DejaVu Serif Italic"; font-size:9; text-halo-radius: 1; text-halo-color: #ffffff;text-offset:3;max-width:70;z-index:16;
-width:0.1; color: #111111; text-opacity: 1; fill-color: #777777; fill-opacity: 0.5; }
-
-*/
-
-area|z16[building][amenity=pharmacy] {icon-image:"pharmacy.png"}
-area|z16[building][tourism=museum] {icon-image:"museum_osm.png"}
-area|z16[building][tourism=zoo] {icon-image:"zoo.png"}
-area|z16[building][amenity=courthouse] {icon-image:"sud_14x13.png"}
-area|z16[building][amenity=toilets] {icon-image:"toilets.png"}
-area|z16[building][amenity=restaurant] {icon-image:"restaurant.png"}
-area|z16[building][amenity=fast_food] {icon-image:"fast_food.png"}
-area|z16[building][amenity=pub] {icon-image:"pub_osm.png"}
-area|z16[building][amenity=bar] {icon-image:"bar_osm.png"}
-area|z16[building][amenity=cafe] {icon-image:"cafe_osm.png"}
-area|z16[building][amenity=ice_cream] {icon-image:"ice_cream.png"}
-area|z16[building][amenity=bicycle_rental] {icon-image:"bicycle_rental.png"}
-area|z16[building][amenity=car_rental] {icon-image:"car_rental.png"}
-area|z16[building][amenity=car_wash] {icon-image:"car_wash.png"}
-area|z16[building][amenity=bank] {icon-image:"amerikan_bank.png"}
-area|z16[building][amenity=dentist] {icon-image:"dentist_osm.png"}
-area|z16[building][amenity=social_facility] {icon-image:"social_facility.png"}
-area|z16[building][amenity=veterinary] {icon-image:"veterinary.png"}
-area|z16[building][amenity=fountain] {icon-image:"fountain.png"}
-area|z16[building][amenity=studio] {icon-image:"studio.png"}
-area|z16[building][amenity=courthouse] {icon-image:"courthouse.png"}
-area|z16[building][amenity=embassy] {icon-image:"poconzulat.png"}
-area|z16[building][amenity=marketplace] {icon-image:"marketplace.png"}
-area|z16[building][amenity=sauna] {icon-image:"sauna.png"}
-area|z16[building][amenity=townhall] {icon-image:"townhall.png"}
-area|z16[building][amenity=place_of_worship][religion=buddhist] {icon-image:"budda_hram.png"}
-area|z16[building][amenity=place_of_worship][religion=christian] {icon-image:"pravosl_hram_osm.png"}
-area|z16[building][amenity=place_of_worship][religion=hindu] {icon-image:"sinagoga_osm.png"}
-area|z16[building][amenity=place_of_worship][religion=muslim] {icon-image:"mechet_osm.png"}
-
-
-node|z16[amenity=taxi] {icon-image:"taxi_c.png"}
-area|z16[building][amenity=taxi] {icon-image:"taxi_c.png"}
-node|z17-[amenity=taxi] {icon-image:"taxi_c.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=taxi] {icon-image:"taxi_c.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-node|z16[amenity=baby_hatch] {icon-image:"baby_hatch.png"}
-area|z16[building][amenity=baby_hatch] {icon-image:"baby_hatch.png"}
-node|z17-[amenity=baby_hatch] {icon-image:"baby_hatch.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=baby_hatch] {icon-image:"baby_hatch.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-node|z16[amenity=embassy] {icon-image:"embassy.png"}
-area|z16[building][amenity=embassy] {icon-image:"embassy.png"}
-node|z17-[amenity=embassy] {icon-image:"embassy.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=embassy] {icon-image:"embassy.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[tourism=attraction] {icon-image:"attraction.png"}
-area|z16[building][tourism=attraction] {icon-image:"eattraction.png"}
-node|z17-[tourism=attraction] {icon-image:"attraction.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][tourism=attraction] {icon-image:"attraction.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[tourism=bed_and_breakfast] {icon-image:"bed_and_breakfast.png"}
-area|z16[building][tourism=bed_and_breakfast] {icon-image:"bed_and_breakfast.png"}
-node|z17-[tourism=bed_and_breakfast] {icon-image:"bed_and_breakfast.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][tourism=bed_and_breakfast] {icon-image:"bed_and_breakfast.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[historic=archaeological_site] {icon-image:"archaeological_site.png"}
-area|z16[building][historic=archaeological_site] {icon-image:"archaeological_site.png"}
-node|z17-[historic=archaeological_site] {icon-image:"archaeological_site.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][historic=archaeological_site] {icon-image:"archaeological_site.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[historic=boundary_stone] {icon-image:"boundary_stone.png"}
-area|z16[building][historic=boundary_stone] {icon-image:"boundary_stone.png"}
-node|z17-[historic=boundary_stone] {icon-image:"boundary_stone.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][historic=boundary_stone] {icon-image:"boundary_stone.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[historic=ruins] {icon-image:"ruins_osm.png"}
-area|z16[historic=ruins] {icon-image:"ruins_osm.png"}
-node|z17-[historic=ruins] {icon-image:"ruins_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[historic=ruins] {icon-image:"ruins_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[sport=tennis] {icon-image:"tennis.png"}
-area|z16[building][sport=tennis] {icon-image:"tennis.png"}
-node|z17-[sport=tennis] {icon-image:"tennis.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=tennis] {icon-image:"tennis.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-node|z16[shop=convenience] {icon-image:"convenience.png"}
-area|z16[building][shop=convenience] {icon-image:"convenience.png"}
-node|z17-[shop=convenience] {icon-image:"convenience.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=convenience] {icon-image:"convenience.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-
-
-area|z17-[building][amenity=pharmacy] {icon-image:"pharmacy.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-area|z17-[building][tourism=museum] {icon-image:"museum_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][tourism=zoo] {icon-image:"zoo.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=courthouse] {icon-image:"sud_14x13.png"; text-offset:14; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][amenity=toilets] {icon-image:"toilets.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=restaurant] {icon-image:"restaurant.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=fast_food] {icon-image:"fast_food.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=pub] {icon-image:"pub_osm.png"; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][amenity=bar] {icon-image:"bar_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=cafe] {icon-image:"cafe_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=ice_cream] {icon-image:"ice_cream.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=bicycle_rental] {icon-image:"bicycle_rental.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=car_rental] {icon-image:"car_rental.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=car_wash] {icon-image:"car_wash.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=bank] {icon-image:"amerikan_bank.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=dentist] {icon-image:"dentist_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=social_facility] {icon-image:"social_facility.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=veterinary] {icon-image:"veterinary.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=fountain] {icon-image:"fountain.png"; text-offset:15; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][amenity=studio] {icon-image:"studio.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=courthouse] {icon-image:"courthouse.png"; text-offset:15; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=embassy] {icon-image:"poconzulat.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=marketplace] {icon-image:"marketplace.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=sauna] {icon-image:"sauna.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=townhall] {icon-image:"townhall.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=place_of_worship][religion=buddhist]
-{icon-image:"budda_hram.png"; text-offset:14; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2D1A2D; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][amenity=place_of_worship][religion=christian]
-{icon-image:"pravosl_hram_osm.png"; text-offset:25; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2D1A2D; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60; z-index:15}
-area|z17-[building][amenity=place_of_worship][religion=hindu]
-{icon-image:"sinagoga_osm.png"; text-offset:14; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2D1A2D; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][amenity=place_of_worship][religion=muslim]
-{icon-image:"mechet_osm.png"; text-offset:14; text:name; font-size:9;
-font-family:"DejaVu Sans Oblique"; text-color:#2D1A2D; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-
-
-area|z17-[building][amenity=place_of_worship][religion=buddhist]
-{icon-image:"budda_hram.png"; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-area|z17-[building][amenity=place_of_worship][religion=christian]
-{icon-image:"pravosl_hram_osm.png"; text-offset:25; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-area|z17-[building][amenity=place_of_worship][religion=hindu]
-{icon-image:"sinagoga_osm.png"; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-area|z17-[building][amenity=place_of_worship][religion=muslim]
-{icon-image:"mechet_osm.png"; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#2C154C; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:60}
-
-
-
-area|z16[building][tourism=camp_site] {icon-image:"camp_site.png"}
-area|z16[building][tourism=information] {icon-image:"information.png"}
-area|z15-[building][historic=castle] {icon-image:"castle.png"; text-offset:13; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:50; z-index:15}
-
-
-
-area|z16[building][historic=memorial] {icon-image:"memorial.png"}
-area|z16[building][historic=monument] {icon-image:"monument_osm.png"}
-area|z16[building][historic=wayside_cross ] {icon-image:"catolicizm_osm.png"}
-area|z16[building][historic=rune_stone] {icon-image:"cult_place_12x12.png"}
-area|z16[building][sport=9pin] {icon-image:"9pin.png"}
-area|z16[building][sport=10pin] {icon-image:"9pin.png"}
-area|z16[building][sport=equestrian] {icon-image:"equestrian.png"}
-area|z16[building][sport=skating] {icon-image:"skating.png"}
-area|z16[building][sport=table_tennis] {icon-image:"table_tennis.png"}
-area|z16[building][shop=art] {icon-image:"art.png"}
-area|z16[building][shop=car_repair] {icon-image:"car_repair.png"}
-area|z16[building][shop=clothes] {icon-image:"clothes.png"}
-area|z16[building][shop=hairdresser] {icon-image:"hairdresser.png"}
-area|z16[building][shop=shoes] {icon-image:"shoes.png"}
-area|z16[building][shop=optician] {icon-image:"optician.png"}
-area|z16[building][shop=supermarket] {icon-image:"supermarket.png"}
-area|z16[building][leisure=water_park] {icon-image:"water_park.png"}
-area|z16[building][leisure=swimming_pool] {icon-image:"swimming_pool.png"}
-area|z16[building][leisure=travel_agent] {icon-image:"turizm.png"}
-area|z16[building][leisure=dressmaker] {icon-image:"atelje.png"}
-
-
-
-area|z17-[building][tourism=camp_site] {icon-image:"camp_site.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][tourism=information] {icon-image:"information.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][historic=memorial] {icon-image:"memorial.png"; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][historic=monument] {icon-image:"monument_osm.png"; text-offset:13; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:15}
-area|z17-[building][historic=wayside_cross] {icon-image:"catolicizm_osm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][historic=rune_stone] {icon-image:"cult_place_12x12.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=9pin] {icon-image:"9pin.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=10pin] {icon-image:"9pin.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=equestrian] {icon-image:"equestrian.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=skating] {icon-image:"skating.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][sport=table_tennis] {icon-image:"table_tennis.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=art] {icon-image:"art.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=car_repair] {icon-image:"car_repair.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=clothes] {icon-image:"clothes.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=hairdresser] {icon-image:"hairdresser.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=shoes] {icon-image:"shoes.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=optician] {icon-image:"optician.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][shop=supermarket] {icon-image:"supermarket.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][leisure=water_park] {icon-image:"water_park.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][leisure=swimming_pool] {icon-image:"swimming_pool.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][leisure=travel_agent] {icon-image:"turizm.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-area|z17-[building][leisure=dressmaker] {icon-image:"atelje.png"; text-offset:10; text:name; font-size:8;
-font-family: "DejaVu Sans Book"; text-color:#2D1A2D; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:15}
-
-
-
-node|z17-[amenity=kindergarten]{icon-image:"kindergarten.png"}
-node|z17-[amenity=library] {icon-image:"lib_13x14.png"}
-node|z16-[amenity=post_office] {icon-image:"post_office.png"}
-node|z17-[amenity=restaurant] {icon-image:"restaurant.png"}
-
-
-
-
-area|z2-3[boundary=administrative][admin_level=2]
- {width: 0.6; color:#000000; opacity:0.2; z-index:9.1}
-
-area|z4[boundary=administrative][admin_level=2]
- {width: 0.35; color: #444444; opacity:0.6; z-index:9.1}
-
-area|z5-[boundary=administrative][admin_level=2]
-
- {width: 0.5; color: #444444; opacity:0.8; z-index:9} /* dashes: 6,4; */
- /* casing-width: 4; casing-opacity: 0.5; casing-color: #d4d4d4; casing-dashes:; */
-
-area|z3[boundary=administrative][admin_level=3]
-{width: 0.4; color: #7e0156; opacity:0.3; z-index:9} /* dashes: 3,3; */
-
-area|z4-[boundary=administrative][admin_level=3]
-{width: 1.3; color: #ff99cc; opacity:0.3; z-index:9}
-
-/*
-для линии обводки отключены штриховки (casing-dashes:;), но включены для основной линии
-
-*/
-
-area|z10-[boundary=administrative][admin_level=6]
-{width: 0.4; color: #2D0768; opacity:0.6; dashes: 1,2; z-index:9} /* dashes: 1,2; */
-
-
-area|z4-5[boundary=administrative][admin_level=4]
-{width: 0.7; color: #c9bbd4; opacity:0.4; z-index:16.4}
-area|z4-5[boundary=administrative][admin_level=4]::centerline
-{width: 0.2; color: #311549; opacity:0.4; z-index:16.4}
-
-area|z7-9[boundary=administrative][admin_level=4]
-{width: 4; color: #c9bbd4; opacity:0.4; z-index:16.4}
-area|z6-9[boundary=administrative][admin_level=4]::centerline
-{width: 0.7; color: #311549; opacity:0.2; z-index:16.4}
-
-
-area|z10-[boundary=administrative][admin_level=4]
-{width: 4.5; color: #B392D3; opacity:0.4; z-index:16.4}
-area|z10-[boundary=administrative][admin_level=4]::centerline
-{width: 0.7; color: #311549; opacity:0.2; z-index:16.4}
-/*area|z10-[boundary=administrative][admin_level=4]::centerline
-{width: 1; color: #202020; dashes: 1,3; opacity:0.5; z-index:16.4}*/
-
-
-/*way[boundary=administrative][admin_level=8]
-{casing-width: 1; casing-opacity: 0.3; casing-color: #808080; casing-dashes:;
-width: 0.5; color: #808080; dashes: 2,2; opacity:0.3; z-index:16}*/
-
-line|z13-[railway=tram]{pattern-image:"rway44.png";z-index:17}
-
-
-node|z11-14[railway=station][transport!=subway][station!=subway]
-{icon-image:"rw_stat_stanzii_2_blue.png";
-text:name; text-offset:7; font-size:9;
-font-family: "DejaVu Sans Mono Book"; text-halo-radius:1;
-text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0}
-
-node|z15-[railway=station][transport!=subway][station!=subway]
-{icon-image:"rw_stat_stanzii_2_blue.png";
-text:name; text-offset:7; font-size:9; font-family: "DejaVu Sans Mono Book"; text-halo-radius:1; text-color:#000d6c;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0}
-
-/* Minsk */
-node|z12-15[railway=station][transport=subway][colour=red][operator=Минский метрополитен] {icon-image:"minsk_metro_red.png"; z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=blue][operator=Минский метрополитен]{icon-image:"minsk_metro_blue.png"; z-index:17;}
-
-
-/* Vienna */
-node|z12-15[railway=station][transport=subway][colour=red][operator=Wiener Linien]{icon-image:"vienna-ubahn-red.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=orange][operator=Wiener Linien]{icon-image:"vienna-ubahn-orange.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=purple][operator=Wiener Linien]{icon-image:"vienna-ubahn-purple.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=green][operator=Wiener Linien]{icon-image:"vienna-ubahn-green.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=brown][operator=Wiener Linien]{icon-image:"vienna-ubahn-brown.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][!colour][operator=Wiener Linien]{icon-image:"vienna-ubahn-blue.png";z-index:17;}
-
-
-/* Prague */
-node|z12-15[railway=station][transport=subway][colour=red][operator=cz:DPP]{icon-image:"praha-metro-red.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=yellow][operator=cz:DPP]{icon-image:"praha-metro-yellow.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=green][operator=cz:DPP]{icon-image:"praha-metro-green.png";z-index:17;}
-
-
-/* Ekaterinburg */
-node|z12-15[railway=station][transport=subway][colour=green][operator=ЕМУП «Екатеринбургский метрополитен»]{icon-image:"ekaterinburg-metro-green.png";z-index:17;}
-node|z12-15[railway=station][transport=subway][colour=green][operator=Екатеринбургский метрополитен]{icon-image:"ekaterinburg-metro-green.png";z-index:17;}
-
-/* Others */
-node|z12[railway=station][transport=subway][!colour] {icon-image:"metro_others6_copy.png";z-index:17;}
-node|z13[railway=station][transport=subway][!colour] {icon-image:"metro_others12_z.png";z-index:17;}
-node|z14-15[railway=station][transport=subway][!colour] {icon-image:"metro_others6.png";z-index:17;}
-node|z13-14[railway=station][transport=subway]::label
-{text:name; text-offset:13; font-size:9; font-family: "DejaVu Sans Book"; text-halo-radius:1.5;
-text-color:#BE1E2D;text-halo-color:#ffffff; text-allow-overlap: false;
--x-mapnik-min-distance:0; text-placement:any; z-index:20}
-node|z15[railway=station][transport=subway]::label {text:name; text-offset:13;
-font-size:10; font-family: "DejaVu Sans Book";
-text-halo-radius:1.5; text-color:#BE1E2D; text-halo-color:#ffffff; text-allow-overlap: false;
--x-mapnik-min-distance:0; text-placement:any; z-index:20}
-node|z16-[railway=subway_entrance] {icon-image:"metro_others6.png";z-index:17}
-node|z16-[railway=subway_entrance]::label {text:name; text-offset:13;
-font-size:10; font-family: "DejaVu Sans Book"; text-halo-radius:1.5;
-text-color:#BE1E2D;text-halo-color:#ffffff; text-allow-overlap: false;
--x-mapnik-min-distance:0; text-placement:any; z-index:20}
-
-
-area|z10[building=train_station][name=~/.*вокзал.*/] {icon-image:"station_10x14_tuman.png"; z-index:1}
-area|z11-12[building=train_station][name=~/.*вокзал.*/] {icon-image:"station_10x14_tuman.png"; z-index:1}
-area|z11-12[building=train_station][name=~/.*вокзал.*/]::lable {text:name; text-offset:11; font-size:10; font-family: "DejaVu Sans Condensed Bold"; text-halo-radius:1; text-color:#363c6b; text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:30}
-
-area|z13-[building=train_station][name=~/.*вокзал.*/] {icon-image:"station_11x14_blue.png"; z-index:1}
-area|z13-15[building=train_station][name=~/.*вокзал.*/]::lable {text:name; text-offset:11; font-size:11; font-family: "DejaVu Sans Condensed Bold"; text-halo-radius:1; text-color:#363c6b; text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:30}
-area|z15-[building=train_station][name=~/.*вокзал.*/]::lable {text:name; text-offset:11; font-size:12;
-font-family: "DejaVu Sans Condensed Bold"; text-halo-radius:1; text-color:#363c6b;
-text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:30}
-area|z14-[building=train_station][name=~/.*вокзал.*/]
-{width: .3; color: #28085B; fill-color: #B1B1C9; z-index:18}
-
-/*line|z14-15[railway][bridge][service!=siding][service!=spur][service!=yard]
-{pattern-image:"tun73.png"; pattern-rotate:0; pattern-scale:1.1; pattern-spacing: 0.7; z-index:12.1 }
-line|z14-15[railway][bridge][service!=siding][service!=spur][service!=yard]
-{width:2.2; color: #666699;z-index:12.2}*/
-
-
-/*line|z14-15[railway][railway!=subway][bridge][service!=siding][service!=spur][service!=yard]
-{pattern-image:"tun73.png"; pattern-rotate:0; pattern-scale:1.1; pattern-spacing: 0.7; z-index:12.1 }
-line|z14-15[railway][railway!=subway][bridge][service!=siding][service!=spur][service!=yard]
-{width:2.2; color: #666699;z-index:12.2}*/
-
-line|z14-[railway][railway=subway][bridge][service!=siding][service!=spur][service!=yard]
-{pattern-image:"tun74.png"; pattern-rotate:0; pattern-scale:0.7; pattern-spacing: 0.7; z-index:12.2 }
-
-line|z14-[railway][railway=subway][bridge][service!=siding][service!=spur][service!=yard]
-{text:name; font-size:11; text-position:line;
-font-family: "DejaVu Sans Condensed Book"; text-halo-radius:1; text-color:#000000;
-text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any; z-index:30}
-
-/*line|z14-[railway][railway=subway][bridge][service!=siding][service!=spur][service!=yard]
-{width:2.2; color: #ffffff;z-index:12.1}*/
-
-
-
-line|z14-15[railway=rail][bridge][service!=siding][service!=spur][service!=yard]::ticks
- {width:1; color: #ffffff; dashes: 11,9; opacity: 1; z-index:12.3}
-
-
-
-
-node|z9-[aeroway=aerodrome]
- {icon-image:"aerodrome_osm.png";
- text:name; text-offset:12; font-size:9; font-family: "DejaVu Sans Condensed Bold"; text-halo-radius:1; text-color:#1e7ca5;text-halo-color:#ffffff; text-allow-overlap: false;z-index:30}
-
-
-node|z3[place][capital][population>5000000] {
- icon-image:" adm_5.png";
- text-offset:4; text:name; font-size:8; font-family: "DejaVu Sans Bold"; text-halo-radius:1;
- text-color:#505050;text-halo-color:#ffffff; allow-overlap: true; -x-mapnik-min-distance:0;
- text-align: left; collision-sort-by:population; z-index:50}
-
-node|z4-6[place][capital][population>5000000] {icon-image:" adm_5.png";
- text-offset:6; text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:1;
- text-color:#303030;text-halo-color:#ffffff; allow-overlap: true; -x-mapnik-min-distance:0;
- text-align: left; collision-sort-by:population; z-index:50}
-
-node|z4-5[place][population<100000][capital][admin_level<5] { icon-image:"adm_4.png";
- text-offset:5; text:name; font-size: 7; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-
-node|z4-5[place][population>=100000][population<=5000000][capital][admin_level<5] {icon-image:"adm_5.png";
-text-offset:5; text:name; font-size: 8; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:1; collision-sort-by:population; z-index:50}
-
-
-
-
-
-
-node|z6-7[place=city][admin_level=2] {icon-image:"adm_6.png"; text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z6-7[place=city][admin_level=3] {icon-image:"adm1_5.png"; text-offset:8; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; collision-sort-by:population; z-index:50}
-node|z6-7[place=city][admin_level=4] {icon-image:"adm1_5.png"; text-offset:8; text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; collision-sort-by:population; z-index:50}
-node|z6-7[place=city][admin_level=6] {icon-image:"adm1_5.png"; text-offset:8; text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; collision-sort-by:population; z-index:50}
-
-node|z7[place=city][capital!=yes] {icon-image:"adm1_4_4.png"; text-offset:6; text:name; font-size:9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-
-node|z7[place=town] [population>=50000]
-{icon-image:"town_4.png"; text-offset:7; text:name; font-size:8; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-halo-color:#ffffff;text-color:#202020; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-
-
-node|z8[place=city][population>=100000][population<=1000000],
-node|z7-8[place=city][population>1000000][population<5000000]
-{icon-image:"adm_5.png"; text-offset:7; text:name; font-size: 11; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-halo-color:#ffffff;text-color:#202020; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z7-8[place=city][population>=5000000]
-{icon-image:"adm_5.png"; text-offset:8; text:name; font-size: 12; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-halo-color:#ffffff;text-color:#202020; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-
-node|z8[place=town]
-{icon-image:"town_4.png"; text-offset:7; text:name; font-size:9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-halo-color:#ffffff;text-color:#202020; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-
-node|z8[place=city][admin_level=2] {icon-image:"adm_6.png"; text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z8[place=city][admin_level=4],
-node|z8[place=city][admin_level=3]
-{icon-image:"adm1_5.png"; text-offset:8; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-node|z8[place=city][capital!=yes] {icon-image:"town_4.png"; text-offset:6; text:name; font-size:9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z8[place=city][admin_level=6] {icon-image:"adm1_5.png"; text-offset:8; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-
-
-node|z9[place=city][admin_level=2] {text-offset:8; text:name; font-size:13; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z9[place=city][capital!=yes] {icon-image:"adm2_5.png"; text-offset:6; text:name; font-size:10; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; collision-sort-by:population; z-index:50}
-node|z9[place=city][admin_level=6] {icon-image:"adm_6.png"; text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-node|z9[place=city][admin_level=4] {icon-image:"adm_6.png"; text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-
-node|z10[place=city][capital!=yes] {text-offset:6; text:name; font-size:10; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:6}
-node|z10[place=city][admin_level=6] {text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-node|z10[place=city][admin_level=4] {text-offset:8; text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-
-node|z10-[place=city][admin_level=2] {text:name; font-size:13; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#505050;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:7}
-node|z11-[place=city][capital!=yes] {text:name; font-size:10; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;z-index:6}
-node|z11-[place=city][admin_level=6] {text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#505050;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-node|z11-[place=city][admin_level=4] {text:name; font-size:12; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#505050;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; z-index:50}
-
-
-node|z8[place=city][admin_level!=2] {icon-image:"city_center17_2.png"; text-offset:8; text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#606060;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; }
-
-node|z9[place=city][admin_level!=2] {icon-image:"adm1_5.png"; text-offset:7; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; }
-
-node|z10[place=city][admin_level!=2] {text-offset:7; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; }
-
-node|z10-[place=city][admin_level!=2] {text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:20; z-index:20;collision-sort-by:population; }
-
-
-node|z10-12[place=town]
-{text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:2; text-color:#404040;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:3}
-
-node|z9[place=town] {icon-image:"town_4.png"; text-offset:7; text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-node|z10[place=town] {text:name; font-size:10;
-font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-node|z11[place=town] {text:name; font-size:10;
-font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-node|z12-[place=town] { text-offset:7; text:name; font-size:11; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-node|z12-[place=city] { text:name; font-size:10; font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;collision-sort-by:population;z-index: 5;}
-
-node|z10-[place=village]{text:name; font-size:10; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#606060;text-halo-color:#ffffff; text-allow-overlap: false;collision-sort-by:population;z-index: 5;}
-
-node|z10-[place=hamlet]{text:name; font-size:9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#505050;text-halo-color:#ffffff; text-allow-overlap: false;collision-sort-by:population;z-index: 5;}
-
-/*area|z9-[landuse=nature_reserve],
-area|z11-[leisure=park]
-{text:name; font-size:10;font-family: "DejaVu Serif Italic"; text-halo-radius:0; text-color:#3c8000;text-halo-color:#ffffff; text-allow-overlap: false}
-*/
-/*area|z11-[landuse=nature_reserve],
-area|z12-[leisure=park]
-{text:name;text-offset:0; font-size:10;font-family: "DejaVu Serif Italic"; text-halo-radius:0.5; text-color:#fffccc;text-halo-color:#285500; text-allow-overlap: false}
-*/
-
-
-area|z8-[natural=wood],
-area|z8-[landuse=forest]
- {fill-position:background; fill-color: #d6f4c6; z-index:5; fill-opacity:0.7}
-
-area|z10-13[landuse=garages] {width: .1; color: #3F3E3E; fill-color: #E0E0E0; z-index:3;}
-area|z14-[landuse=garages] {width: .2; color: #3F3E3E; fill-color: #CCCACB; z-index:3;}
-
-area|z13-[natural=beach]{fill-position:background; fill-color: #FFF9AE; z-index:4}
-area|z14-[natural=beach]
-{icon-image:"bench_osm.png"; text:name; text-offset:15;
-font-size:9; font-family: "DejaVu Serif Italic"; text-color:#A89B00;
-text-allow-overlap: false;-x-mapnik-min-distance: 0;
-max-width: 30; text-halo-radius:1; text-halo-color:#ffffff; z-index:11}
-
-
-
-area|z10-[leisure=nature_reserve],
-area|z10-[boundary=protected_area]
-{color: #C0DDA2; width: 2; dashes: 5,5; z-index:4}
-
-area|z10-12[landuse=nature_reserve],
-area|z10-12[boundary=national_park],
-area|z10-12[boundary=protected_area],
-area|z12[leisure=park],
-area|z12[natural=wood],
-area|z12[landuse=forest]
-{text:name; text-offset:13;
-font-size:9; font-family: "DejaVu Serif Italic"; text-color:green;
-text-allow-overlap: false;-x-mapnik-min-distance: 0;
-max-width: 40; text-halo-radius:1; text-halo-color:#ffffff; z-index:11}
-
-
-area|z13[landuse=nature_reserve],
-area|z13[boundary=national_park],
-area|z13[boundary=protected_area],
-area|z13[natural=wood],
-area|z13[landuse=forest],
-area|z13[leisure=park]
-{text:name; text-offset:0; font-size:9; font-family: "DejaVu Serif Italic";
-text-color:green; text-halo-radius:1; max-width: 40; text-halo-color:#ffffff; text-allow-overlap: false;-x-mapnik-min-distance: 0;
-z-index:11}
-
-area|z14[landuse=nature_reserve],
-area|z14[boundary=national_park],
-area|z14[boundary=protected_area],
-area|z14[natural=wood],
-area|z14[landuse=forest],
-area|z14[leisure=park]
-{text:name; text-offset:0; font-size:10; font-family: "DejaVu Serif Italic";
-text-color:green; text-halo-radius:1;max-width: 40; text-halo-color:#ffffff; text-allow-overlap: false;-x-mapnik-min-distance: 0;
-z-index:11}
-
-
-area|z15-[landuse=nature_reserve],
-area|z15-[boundary=national_park],
-area|z15-[natural=wood],
-area|z15-[landuse=forest],
-area|z15-[leisure=park],
-area|z15-[boundary=protected_area]
-{text:name;text-offset:0; font-size:10;font-family: "DejaVu Serif Italic";
-text-halo-radius:0; text-color:#419c2e;text-halo-color:#092316; text-halo-radius:1; text-halo-color:#ffffff;
-text-allow-overlap: false; max-width:40; text-offset:15;z-index:11;
- z-index:11}
-
-
-/*
-TODO: shields!!!!
-
-*/
-
-
-
-node|z1[place=continent]
-{text:name; text-offset:-10; font-size:11; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:1; text-color:#303030;text-halo-color:#ffffff; z-index:-1;-x-mapnik-min-distance:0}
-/*node|z2-3[place=continent]
-{text:name; text-offset:-10; font-size:8; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff;z-index:-1;-x-mapnik-min-distance:0}
-*/
-node|z1[place=ocean]
-{text:name; font-size:8; font-family: "DejaVu Sans Oblique"; text-halo-radius:0; text-color:#4976d1;text-halo-color:#ffffff;z-index:-1; max-width:50; text-transform: uppercase; -x-mapnik-min-distance:0}
-
-node|z2-[place=ocean]
-{text:name; font-size:9; font-family: "DejaVu Sans Oblique"; text-halo-radius:0; text-color:#4976d1;text-halo-color:#ffffff;z-index:-1; max-width:50; text-transform: uppercase; -x-mapnik-min-distance:0}
-
-
-node|z7-[place=ocean]
-{text:name; text-offset:0; font-size:11; font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#202020;text-halo-color:#ffffff; text-transform: uppercase; z-index:-1;-x-mapnik-min-distance:0}
-
-node|z3-6[place=sea]
-{text:name; text-offset:0; font-size:8; font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-node|z7-9[place=sea]
-{text:name; text-offset:0; font-size:10; font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#4976d1;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-
-node|z7-12[natural=peak][ele>2500]
-{icon-image:"mountain_peak6.png";
-text:ele; text-offset:3; font-size:8; font-family: "DejaVu Sans Mono Book"; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-collision-sort-by:ele
-}
-
-node|z13-[natural=peak]
-{icon-image:"mountain_peak6.png"; text-offset:10;
-text:name; text-offset:3; font-size:10; font-family: "DejaVu Sans Mono Book"; text-halo-radius:0; text-color:#664229;text-halo-color:#ffffff;-x-mapnik-min-distance:0;
-collision-sort-by:ele}
-
-
-node|z2-3[place=country][population>2000000]
-{text:name; font-size:10,9,8,7,6; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:#dd5875;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0;text-placement:any;collision-sort-by:population}
-
-node|z4[place=country]
-{text:name; font-size:12,11,10,9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0;text-placement:any;collision-sort-by:population}
-
-node|z5-8[place=country]
-{text:name; font-size:13,12,11,10,9; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0;text-placement:any;collision-sort-by:population}
-
-node|z8-10[place=country]
-{text:name; font-size:16,15,14,13,12,11; font-family: "DejaVu Sans Book"; text-halo-radius:1; text-color:red;text-halo-color:#ffffff;z-index:1;-x-mapnik-min-distance:0;text-placement:any;collision-sort-by:population}
-
-area|z3-5[boundary=administrative][admin_level=3]
-{text:name; text-offset:-5; font-size:8; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:0; text-color:#101010;text-halo-color:#ffffff;-x-mapnik-min-distance:0;max-width:50}
-
-
-area|z6[boundary=administrative][admin_level=4][name!=Москва]
-{text:name; text-offset:15; font-size:12; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:1; text-color:#381E51;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-area|z7-10[boundary=administrative][admin_level=4][name!=Москва]
-{text:name; text-offset:17; font-size:14; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:1; text-color:#381E51;text-halo-color:#ffffff;-x-mapnik-min-distance:0}
-
-
-area|z10-[boundary=administrative][admin_level=6]
-{text:name; text-offset:-10; font-size:12; font-family: "DejaVu Sans ExtraLight"; text-halo-radius:1; text-color:#7848a0;text-halo-color:#ffffff}
-
-/*area|z13-14[admin_level=8]{color: #7848a0; width: 3; z-index:30; opacity:0.5}*/
-
-node|z12-14[place=suburb]
-{text:name; font-size:12; font-family: "DejaVu Sans Book"; text-color:#7848a0; z-index:20}
-area|z12-14[place=suburb]
-{text:name; font-size:12; font-family: "DejaVu Sans Book"; text-color:#7848a0; z-index:20}
-
-area|z10[admin_level=5] {text:name; text-offset:0; font-size:10;
-font-family: "DejaVu Sans Bold"; text-halo-radius:1; text-color:#662D91; text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0; text-position: center; max-width: 20; opacity:0.5; z-index:30}
-
-node|z11-13[admin_level=8]
-{text:name; font-size:11; font-family: "DejaVu Sans Book"; text-color:#7848a0;z-index:20; opacity:0.7; max-width: 25}
-area|z11-13[admin_level=8]
-{text:name; font-size:11; font-family: "DejaVu Sans Book"; text-color:#7848a0;z-index:20; opacity:0.7; max-width: 25}
-
-node|z14[admin_level=8]
-{text:name; font-size:12; font-family: "DejaVu Sans Book"; text-color:#7848a0;z-index:20; opacity:0.7; max-width: 30 }
-area|z14[admin_level=8]
-{text:name; font-size:12; font-family: "DejaVu Sans Book"; text-color:#7848a0;z-index:20; opacity:0.7; max-width: 30}
-
-
-
-
-
-/*way[highway]
- {width: eval( any( metric(tag("width")), metric ( num(tag("lanes")) * 4), metric("7m")));
- color:#ffffff;
- text: name; text-position: line; text-spacing: 512; text-color:#000000;text-halo-radius:2;text-halo-color:#ffffff;
- casing-color: #D29D39;}*/
-
-/*way[highway=primary], way[highway=primary_link]
- {z-index:9; width:5; color: #FCE57D; casing-width:1; casing-color: #CBB48B; text: name; text-position: line; text-spacing: 512;}*/
-
-
-
-
-/*area[highway]{fill-color: #ffffff;width:0}*/
-
-/* With this eval, if bridge is applied to invisible line, no bridge renders */
-/*way[bridge=yes] {casing-width:eval(min(3, num(prop("width"))/2 ));}*/
-
-
-
-/*way[railway=tram]{width: eval( any( metric(tag("width")), metric("1.52m")));color: #ffffff; casing-color: #000000}
- {width: eval( metric("2.7m")); color: #000000; dashes: 1,10; z-index:1; object-id: "shpala"}*/
-
-/*way[landuse=industrial] {fill-color: #855}*/
-
-
-area|z13[building][building!=no][building!=construction][building!=planned] {width: .3; color: #cca352; opacity:0.5; z-index:17;}
-area|z14[building][building!=no][building!=construction][building!=planned] {width: .4; color: #cca352; z-index:17;}
-area|z15-[building][building!=no][building!=construction][building!=planned] { width: .5; color: #D49D3C; z-index:17;}
-
-area|z15-[building][building!=no][building!=construction][building!=planned][building!=public] {fill-color: #E7CCB4; z-index:17;}
-area|z15-[building=public] { fill-color: #edc2ba; z-index:17;}
-
-area|z13[building=construction],
-area|z13[building=planned]
- {width: .3; color: #cca352; opacity:0.5; z-index:17; dashes: 2,2}
-area|z14[building=construction],
-area|z14[building=planned]
- {width: .4; color: #cca352; z-index:17; dashes: 3,3}
-area|z15-[building=construction],
-area|z15-[building=planned]
- {width: .5; color: #D49D3C; fill-image:"buildings-hatch.png"; z-index:17; dashes: 3,3}
-
-
-area|z15-[building=kindergarten] { width: .5; color: #D49D3C; fill-color: #E7CCB4; z-index:17;}
-
-
-
-
-
-
-
-
-area|z15-[building=school],
-area|z15-[building=kindergarten],
-area|z15-[building][amenity=kindergarten],
-area|z15-[building][amenity=school],
-area|z15-[building][amenity=college],
-area|z15-[building][amenity=library],
-area|z15-[building][amenity=university]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17; text:name; text-offset:0; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#843542; text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0; text-position: center; max-width: 20 }
-
-node|z15-[amenity=kindergarten],
-node|z15-[amenity=school],
-node|z15-[amenity=college],
-node|z15-[amenity=library],
-node|z15-[amenity=university]
-{text:name; text-offset:0; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#843542; text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0; text-position: center; max-width: 20 }
-
-area|z15-[building=school],
-area|z15-[building=kindergarten],
-area|z15-[building][amenity=kindergarten],
-area|z15-[building][amenity=school],
-area|z15-[building][amenity=college],
-area|z15-[building][amenity=library],
-area|z15-[building][amenity=university]
-{text:name; text-offset:0; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-halo-radius:1; text-color:#843542; text-halo-color:#ffffff;
-text-allow-overlap: false; -x-mapnik-min-distance:0; text-position: center; max-width: 20 }
-
-/*area|z14[building][amenity=hospital],
-area|z14[building][amenity=doctors],
-area|z14[building][emergency=ambulance_station]
-{width: .5; color: #D49D3C; z-index:17}*/
-
-
-area|z15-[building=hospital],
-area|z15-[building][amenity=hospital],
-area|z15-[building][amenity=doctors],
-area|z15-[building][emergency=ambulance_station]
-{icon-image:"doctors.png"; width: .5; color: #D49D3C; fill-color: #EDC2BA;z-index:17}
-
-area|z15-[building][amenity=fire_station],
-area|z15-[building][amenity=police]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; text:name; text-offset:0; font-size:11;
-font-family: "DejaVu Sans Condensed Book"; text-halo-radius:1;
-text-color:#010101; text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;
-text-position: center; max-width: 20 }
-
-node|z15-16[amenity=hospital],
-node|z15-16[amenity=doctors],
-node|z15-16[emergency=ambulance_station]
-{icon-image:"doctors.png"}
-
-node|z17-[amenity=hospital],
-node|z17-[amenity=doctors],
-node|z17-[emergency=ambulance_station]
-{icon-image:"doctors.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family:"DejaVu Sans Oblique"; text-color:#7F0D18; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-
-area|z17-[building=hospital],
-area|z17-[building][amenity=hospital],
-area|z17-[building][amenity=doctors],
-area|z17-[building][emergency=ambulance_station]
-{icon-image:"doctors.png"; width: .3; color: #BC0017; fill-color: #E59AA4;z-index:17;
-text:name; font-size:9; text-offset:15;
-font-family: "DejaVu Sans Oblique"; text-color:#7F0D18; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-
-
-
-node|z15-[amenity=fire_station],
-node|z15-[amenity=police]
-{text:name; text-offset:0; font-size:11; font-family: "DejaVu Sans Condensed Book"; text-halo-radius:1;
-text-color:#010101; text-halo-color:#ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0;
-text-position: center; max-width: 20 }
-
-
-area|z15-[building][leisure=sports_centre]
-{width: .5; color: #3A8089; fill-color: #AAB9BA; z-index:17; text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#1C4434; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30 }
-
-area|z15-[building][amenity=place_of_worship]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17}
-
-area|z15-[building][office]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17}
-
-node|z15[amenity=cinema]
-{icon-image:"cinema_osm.png"}
-node|z16-[amenity=cinema]
-{icon-image:"cinema_osm.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-
-area|z15[building][amenity=cinema]
-{icon-image:"cinema_osm.png"}
-area|z16-[building][amenity=cinema]
-{icon-image:"cinema_osm.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-
-area|z15-[building][amenity=theatre]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17}
-
-node|z15[amenity=theatre]
-{icon-image:"theatre.png"}
-node|z16-[amenity=theatre]
-{icon-image:"theatre.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-area|z15[building][amenity=theatre]
-{icon-image:"theatre.png"}
-area|z16-[building][amenity=theatre]
-{icon-image:"theatre.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-area|z15-[building][amenity=arts_centre],
-area|z15-[building][tourism=attraction],
-area|z15-[building][tourism=artwork],
-area|z15-[building][tourism=museum]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17}
-
-
-
-area|z15-[building][amenity=arts_centre],
-area|z15-[building][tourism=attraction],
-area|z15-[building][tourism=artwork]
-{ext:name; text-offset:0; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40}
-area|z16-[building][tourism=museum]
-{icon-image:"museum.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:20}
-
-node|z15[tourism=museum]
-{icon-image:"museum.png"}
-
-node|z16-[amenity=arts_centre],
-node|z16-[tourism=attraction],
-node|z16-[tourism=artwork]
-{ext:name; text-offset:0; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:20}
-
-node|z16-[tourism=museum]
-{icon-image:"museum.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:40; z-index:20}
-
-area|z15-[building][tourism=alpine_hut],
-area|z15-[building][tourism=bed_and_breakfast],
-area|z15-[building][tourism=chalet],
-area|z15-[building][tourism=guest_house],
-area|z15-[building][tourism=hostel],
-area|z15-[building][tourism=hotel],
-area|z15-[building][tourism=motel]
-{width: .5; color: #D49D3C; fill-color: #EDC2BA; z-index:17}
-
-area|z15-[building][tourism=alpine_hut],
-area|z15-[building][tourism=bed_and_breakfast],
-area|z15-[building][tourism=chalet],
-area|z15-[building][tourism=guest_house],
-area|z15-[building][tourism=hostel],
-area|z15-[building][tourism=hotel],
-area|z15-[building][tourism=motel]
-{icon-image:"hotell_14x14.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family: "DejaVu Sans Oblique"; text-color:#632834; text-halo-radius: 0;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-node|z15[office=government]
-{icon-image:"government_osm.png"}
-node|z16-[office=government]
-{icon-image:"government_osm.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-area|z15[building][office=government]
-{icon-image:"government_osm.png"}
-area|z16-[building][office=government]
-{icon-image:"government_osm.png"; ext:name; text-offset:20; text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-node|z15[aeroway=helipad]
-{icon-image:"helipad.png"}
-node|z16-[aeroway=helipad]
-{icon-image:"helipad.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-area|z15[building][aeroway=helipad]
-{icon-image:"helipad.png"}
-area|z16-[building][aeroway=helipad]
-{icon-image:"helipad.png"; ext:name; text-offset:15; text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:20}
-
-
-
-
-
-
-
-
-area|z16-[building]
-{text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:14}
-
-area|z16-[building=retail]
-{text:name; font-size:9;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30; z-index:14}
-
-area|z15-[leisure=pitch]
-{text:name; font-size:10;
-font-family: "DejaVu Sans Book"; text-color:#101010; text-halo-radius: 1;
-text-halo-color: #ffffff; text-allow-overlap: false; -x-mapnik-min-distance:0; text-placement:any;
-max-width:30}
-
-/*area|z15[building] {text: addr:housenumber; text-halo-radius:1; text-position: center; font-size:8;
--x-mapnik-min-distance:10; opacity:0.8}*/
-
-/*area|z15[building] {text: addr:housenumber; text-halo-radius:1; text-position: center; font-size:8;
--x-mapnik-min-distance:10; opacity:0.8}*/
-
-area|z15-16[building] {text: addr:housenumber; text-halo-radius:1; text-position: line; font-size:7; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-node|z15-16[addr:housenumber][addr:street][!amenity][!shop] {text: addr:housenumber; text-halo-radius:1; text-position: line; font-size:7; -x-mapnik-min-distance:10; opacity:0.8; -x-mapnik-snap-to-street: true} /* used in cities like Vienna */
-
-area|z17-[building] {text: addr:housenumber; text-halo-radius:1; text-position: line; font-size:8; -x-mapnik-min-distance:5; opacity:0.8; -x-mapnik-snap-to-street: true}
-
-node|z17-[addr:housenumber][!amenity][!shop] {text: addr:housenumber; text-halo-radius:1; text-position: line; font-size:8; -x-mapnik-min-distance:5; opacity:0.8; -x-mapnik-snap-to-street: true} /* used in cities like Vienna */
-
-node|z13-[highway=milestone][pk]{text:pk; font-size:7; text-halo-radius:5;-x-mapnik-min-distance:0}
-
-
-node|z17-[entrance]
- {icon-image:"entrance.png"; -x-mapnik-min-distance:0}
-node|z17-[entrance][ref]
- {text:ref; text-offset:7; font-size:7; text-align:left;
- -x-mapnik-min-distance:0;font-family: "DejaVu Sans Bold";
- text-halo-radius:1}
-node|z18-[entrance]
- {text: addr:flats; text-offset:8; font-size:7; -x-mapnik-min-distance:0;
- text-halo-radius:1}
-
-/*заборы и лестницы */
-
-way|z16-[barrier=fence],
-way|z16-[barrier=retaining_wall],
-way|z16-[barrier=wall][layer!=-1][layer!=-2][layer!=-3][layer!=-4][layer!=-5]
-{color:#595b68; width:0.5}
-
-/*way|z16-[barrier=fence],
-way[barrier=wall][layer!=-1][layer!=-2][layer!=-3][layer!=-4][layer!=-5]
-{color:#595b68; width:0.5;pattern-image:"zabor1.png"; pattern-rotate:90;
-pattern-scale:1; pattern-spacing: 5}
-
-way|z16-[barrier=wall][layer!=-1][layer!=-2][layer!=-3][layer!=-4][layer!=-5]
-{width:3; color:#84858a; z-index:50; -x-mapnik-layer: top;}*/
-
-way|z16-[highway=steps] [layer!=-2][layer!=-3][layer!=-4][layer!=-5]
-{width:4; color: #D8B495; z-index:50; dashes:2,1; linecap:butt;}
-
-/*ЛЭП*/
-line|z14-[power=line]
-{color:#595b68; width:0.5;pattern-image:"lep2.png"; pattern-rotate:90;
-pattern-scale:1; pattern-spacing: 40; z-index: 20; -x-mapnik-layer: top;}
-
-
-
-/* горные лыжи*/
-line|z16-[aerialway]
-{color: black; width:0.1; -x-mapnik-layer: top;}
-
-line|z16-[aerialway]::ticks
-{color: black; width:4; dashes: 1,40; linecap:butt; -x-mapnik-layer: top;}
-
-line|z16-[piste:type=downhill][piste:difficulty=novice]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: green }
-
-line|z16-[piste:type=downhill][piste:difficulty=easy]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: blue }
-
-line|z16-[piste:type=downhill][piste:difficulty=intermediate]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: red }
-
-line|z16-[piste:type=downhill][piste:difficulty=advanced]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: black }
-
-line|z16-[piste:type=downhill][piste:difficulty=expert]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: orange }
-
-line|z16-[piste:type=downhill][piste:difficulty=freeride]
-{opacity: 0.3; width:4; -x-mapnik-layer: top; color: yellow }
diff --git a/src/test_stylesheet.py b/src/test_stylesheet.py
deleted file mode 100644
index f9bcb29..0000000
--- a/src/test_stylesheet.py
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from mapcss import MapCSS
-import mapcss.webcolors
-whatever_to_hex = mapcss.webcolors.webcolors.whatever_to_hex
-import sys
-
-reload(sys)
-sys.setdefaultencoding("utf-8")
-
-minzoom = 0
-maxzoom = 19
-
-style = MapCSS(minzoom, maxzoom)
-style.parse(filename=sys.argv[1], clamp=False)
-TOTAL_TESTS = 0
-FAILED_TESTS = 0
-
-
-def get_color_lightness(c):
- if c == 0:
- return 0
- return int((30. * c[0] + 15. * c[2] + 45. * c[1]) / 6.)
-
-
-def renderable(a):
- return any([any([y in ["width", "fill-color", "fill-image", "icon-image", "text", "extrude", "background-color", "pattern-image", "shield-text"] for y in x if x[y]]) for x in a])
-
-
-def is_default(x):
- return x.get('object-id') == '::default'
-
-
-def compare_order(a, function, b):
- "a is over b on all zooms"
- global TOTAL_TESTS, FAILED_TESTS
- z_offset = {"top": 10000, "bottom": -10000}
- for zoom in range(minzoom, maxzoom + 1):
- for typ1 in ['line', 'node', 'area']:
- for typ2 in ['line', 'node', 'area']:
- sa = [x.get('z-index', 0.) + z_offset.get(x.get('-x-kot-layer'), 0) for x in style.get_style(typ1, a, zoom) if renderable([x]) and is_default(x)]
- sb = [x.get('z-index', 0.) + z_offset.get(x.get('-x-kot-layer'), 0) for x in style.get_style(typ2, b, zoom) if renderable([x]) and is_default(x)]
- if sa and sb:
- mia = min(sa)
- mab = max(sb)
- TOTAL_TESTS += 1
- if (function == "over") and (mia <= mab):
- print "ORDER: z%s\t[%s %s %s %s %s]\t[%s, %s], " % (zoom, typ1, mia, function, typ2, mab, repr(a), repr(b))
- print style.get_style(typ1, a, zoom)
- print style.get_style(typ2, b, zoom)
- FAILED_TESTS += 1
-
-
-def compare_line_lightness(a, function, b):
- "a darker than b on all zooms"
- global TOTAL_TESTS, FAILED_TESTS
- for zoom in range(minzoom, maxzoom + 1):
- for typ1 in ['line', 'node', 'area']:
- for typ2 in ['line', 'node', 'area']:
- sa = [get_color_lightness(x.get('color', 0.)) for x in style.get_style(typ1, a, zoom) if x.get("width", 0) > 0]
- sb = [get_color_lightness(x.get('color', 0.)) for x in style.get_style(typ2, b, zoom) if x.get("width", 0) > 0]
- if sa and sb:
- mia = min(sa)
- mab = max(sb)
- TOTAL_TESTS += 1
- if (function == "darker") and (mia >= mab):
- print "LIGHT: z%s\t[%s %s %s %s %s]\t[%s, %s], " % (zoom, typ1, mia, function, typ2, mab, repr(a), repr(b))
- FAILED_TESTS += 1
-
-
-def compare_visibility(a, function, b):
- "a is visible with b on all zooms"
- global TOTAL_TESTS, FAILED_TESTS
- for zoom in range(minzoom, maxzoom + 1):
- for typ in ['line', 'node', 'area']:
- sa = [x.get('z-index', 0.) for x in style.get_style(typ, a, zoom) if x]
- sb = [x.get('z-index', 0.) for x in style.get_style(typ, b, zoom) if x]
- if sa or sb:
- TOTAL_TESTS += 1
- if (function == "both") and not ((sa) and (sb)):
- print "VISIBILITY: z%s\t[%s %s %s %s %s]\t[%s, %s], " % (zoom, typ, bool(sa), function, typ, bool(sb), repr(a), repr(b))
- FAILED_TESTS += 1
-
-
-def has_stable_labels(a):
- "a has labels that don't appear-diasppear-appear on zoom-in"
- global TOTAL_TESTS, FAILED_TESTS
- prev = {"line": False, "node": False, "area": False}
- for zoom in range(minzoom, maxzoom + 1):
- for typ in ['line', 'node', 'area']:
- sa = any(["text" in x for x in style.get_style(typ, a, zoom)])
- sb = prev[typ]
- if sa or sb:
- TOTAL_TESTS += 1
- if sb and not sa:
- print "LABELS: %s|z%s\t[%s]" % (typ, zoom, repr(a))
- FAILED_TESTS += 1
- else:
- prev[typ] = sa
-
-
-def has_darker_casings(a):
- "a has casings that are darker than the line itself"
- global TOTAL_TESTS, FAILED_TESTS
- for zoom in range(minzoom, maxzoom + 1):
- for typ in ['line', 'node', 'area']:
- sa = [x for x in style.get_style(typ, a, zoom) if ("width" in x and "casing-width" in x)]
-
- if sa:
- TOTAL_TESTS += 1
- for x in sa:
- light_color = get_color_lightness(x.get('color', 0.))
- light_casing = get_color_lightness(x.get('casing-color', 0.))
- if light_color != (light_casing + 2):
- print "CASINGS: %s|z%s\t[%s], base: %x (%s) casing: %x (%s)" % (typ, zoom, repr(a), light_color, x.get('width'), light_casing, x.get('casing-width'))
- FAILED_TESTS += 1
-
-compare_order({'area:highway': 'primary'}, "over", {'highway': 'primary'})
-
-compare_order({'highway': 'primary'}, "over", {'waterway': 'river'})
-compare_order({'highway': 'primary'}, "over", {'waterway': 'canal'})
-compare_order({'highway': 'path'}, "over", {'waterway': 'river'})
-compare_order({"highway": "motorway"}, "over", {'highway': 'primary'})
-compare_line_lightness({"highway": "motorway"}, "darker", {'highway': 'primary'})
-
-compare_order({"highway": "motorway_link"}, "over", {'highway': 'primary_link'})
-compare_line_lightness({"highway": "motorway_link"}, "darker", {'highway': 'primary_link'})
-compare_order({"highway": "trunk"}, "over", {'highway': 'primary'})
-compare_line_lightness({"highway": "trunk"}, "darker", {'highway': 'primary'})
-compare_order({"highway": "trunk_link"}, "over", {'highway': 'primary_link'})
-compare_order({'highway': 'primary'}, "over", {'highway': 'residential'})
-compare_order({'highway': 'primary'}, "over", {'highway': 'secondary'})
-compare_order({'highway': 'primary_link'}, "over", {'highway': 'secondary_link'})
-compare_order({'highway': 'secondary'}, "over", {'highway': 'tertiary'})
-compare_order({'highway': 'secondary_link'}, "over", {'highway': 'tertiary_link'})
-compare_order({'highway': 'tertiary'}, "over", {'highway': 'residential'})
-compare_order({'highway': 'tertiary'}, "over", {'highway': 'service'})
-compare_order({'highway': 'tertiary'}, "over", {'highway': 'unclassified'})
-
-compare_order({'highway': 'tertiary'}, "over", {"highway": "road"})
-compare_order({'highway': 'residential'}, "over", {'highway': "track"})
-compare_order({'highway': 'residential'}, "over", {'highway': "service"})
-compare_order({'highway': 'residential'}, "over", {"highway": "living_street"})
-compare_order({'highway': 'unclassified'}, "over", {'highway': "track"})
-compare_order({'highway': 'unclassified'}, "over", {'highway': "construction"})
-compare_order({'highway': 'residential'}, "over", {'highway': "path", "bicycle": "yes"})
-compare_order({'highway': 'track'}, "over", {'highway': "path"})
-compare_order({"highway": "steps"}, "over", {'highway': "pedestrian"})
-compare_order({"highway": "steps"}, "over", {'highway': "cycleway"})
-compare_order({"highway": "service"}, "over", {'highway': "footway"})
-compare_order({"highway": "service"}, "over", {'highway': "path"})
-
-
-compare_order({"highway": "service"}, "over", {'building': "yes"})
-
-compare_order({"railway": "rail"}, "over", {"waterway": "riverbank"})
-
-compare_order({"amenity": "cafe"}, "over", {'amenity': "parking"})
-compare_order({"amenity": "bank"}, "over", {'amenity': "atm"})
-compare_order({"amenity": "bank"}, "over", {'amenity': "atm"})
-compare_order({"railway": "station"}, "over", {'leisure': "park"})
-compare_order({"railway": "station"}, "over", {"highway": "bus_stop"})
-compare_order({"highway": "tertiary"}, "over", {"highway": "bus_stop"})
-compare_order({"highway": "secondary"}, "over", {"highway": "bus_stop"})
-compare_order({"highway": "bus_stop"}, "over", {"amenity": "police"})
-compare_order({"place": "suburb"}, "over", {'leisure': "park"})
-
-compare_order({"highway": "path"}, "over", {'man_made': "cut_line"})
-compare_order({"highway": "footway"}, "over", {'man_made': "cut_line"})
-compare_order({"highway": "motorway"}, "over", {'man_made': "cut_line"})
-
-
-compare_visibility({"highway": "primary"}, "both", {'highway': 'primary_link'})
-compare_visibility({"highway": "primary"}, "both", {'highway': 'trunk_link'})
-compare_visibility({"highway": "secondary"}, "both", {'highway': 'secondary_link'})
-compare_visibility({"highway": "secondary"}, "both", {'highway': 'primary_link'})
-compare_visibility({"highway": "tertiary"}, "both", {'highway': 'tertiary_link'})
-
-has_stable_labels({"highway": "trunk", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "motorway", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "primary", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "secondary", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "tertiary", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "residential", "name": "name", "int_name": "int_name"})
-has_stable_labels({"highway": "unclassified", "name": "name", "int_name": "int_name"})
-
-has_darker_casings({'highway': 'motorway'})
-has_darker_casings({'highway': 'motorway_link'})
-has_darker_casings({'highway': 'trunk'})
-has_darker_casings({'highway': 'trunk_link'})
-has_darker_casings({'highway': 'primary'})
-has_darker_casings({'highway': 'primary_link'})
-has_darker_casings({'highway': 'secondary'})
-has_darker_casings({'highway': 'secondary_link'})
-has_darker_casings({'highway': 'tertiary'})
-has_darker_casings({'highway': 'tertiary_link'})
-has_darker_casings({'highway': 'residential'})
-has_darker_casings({'highway': 'unclassified'})
-
-
-if TOTAL_TESTS > 0:
- print "Failed tests: %s (%s%%)" % (FAILED_TESTS, 100 * FAILED_TESTS / TOTAL_TESTS)
-print "Passed tests:", TOTAL_TESTS - FAILED_TESTS
-print "Total tests:", TOTAL_TESTS
diff --git a/src/texture_packer.py b/src/texture_packer.py
deleted file mode 100644
index 68415c9..0000000
--- a/src/texture_packer.py
+++ /dev/null
@@ -1,148 +0,0 @@
-import os
-import math
-import pprint
-
-import Image
-import cairo
-import StringIO
-import rsvg
-
-from xml.dom import minidom
-
-def open_icon_as_image(icon, multiplier = 1.0, max_height = None):
- fn = icon["file"]
- original_multiplier = multiplier
- max_height = max_height * multiplier
- maki_resize = [
- (18, 0.75, 12, 1),
- (18, 1.5, 24, 1),
- (18, 2, 24, 1.5),
- (18, 3, 24, 2),
- (12, 1.5, 18, 1),
- (12, 2, 24, 1),
- (12, 3, 24, 1.5),
- (24, 0.75, 18, 1)
- ]
-
- if "maki" in fn:
- for (srcsize, srcmul, dstsize, dstmul) in maki_resize:
- if str(srcsize) in fn and multiplier == srcmul:
- fn = fn.replace(str(srcsize), str(dstsize))
- multiplier = dstmul
- break
-
- try:
- im = Image.open(fn)
- im = im.resize((int(math.ceil(im.size[0] * multiplier)), int(math.ceil(im.size[1] * multiplier))), Image.NEAREST)
-
- except IOError:
- icon_dom = minidom.parse(fn)
-
- if icon.get("fill-color"):
- [a.setAttribute("fill", icon["fill-color"]) for a in icon_dom.getElementsByTagName("path") if a.getAttribute("fill")]
- [a.setAttribute("fill", icon["fill-color"]) for a in icon_dom.getElementsByTagName("g") if a.getAttribute("fill")]
- [a.setAttribute("fill", icon["fill-color"]) for a in icon_dom.getElementsByTagName("rect") if a.getAttribute("fill") not in ("none", "")]
- if icon.get("color"):
- [a.setAttribute("stroke", icon["color"]) for a in icon_dom.getElementsByTagName("path") if a.getAttribute("stroke")]
- [a.setAttribute("stroke", icon["color"]) for a in icon_dom.getElementsByTagName("g") if a.getAttribute("stroke")]
- [a.setAttribute("stroke", icon["color"]) for a in icon_dom.getElementsByTagName("rect") if a.getAttribute("stroke") not in ("none", "")]
-
- tmpfile = StringIO.StringIO()
- outfile = StringIO.StringIO()
- svg = rsvg.Handle(data=icon_dom.toxml())
- svgwidth = float(svg.get_property('width'))
- svgheight = float(svg.get_property('height'))
- iconheight = svgheight * multiplier
- if max_height:
- iconheight = min(iconheight, max_height)
- iconwidth = svgwidth * iconheight / svgheight
-
- reswidth, resheight = iconwidth, iconheight
-
- if icon.get("symbol-file"):
- bg_dom = minidom.parse(icon["symbol-file"])
- if icon.get("symbol-fill-color"):
- [a.setAttribute("fill", icon["symbol-fill-color"]) for a in bg_dom.getElementsByTagName("path") if a.getAttribute("fill")]
- [a.setAttribute("fill", icon["symbol-fill-color"]) for a in bg_dom.getElementsByTagName("g") if a.getAttribute("fill")]
- [a.setAttribute("fill", icon["symbol-fill-color"]) for a in bg_dom.getElementsByTagName("rect") if a.getAttribute("fill") not in ("none", "")]
- if icon.get("symbol-color"):
- [a.setAttribute("stroke", icon["symbol-color"]) for a in bg_dom.getElementsByTagName("path") if a.getAttribute("stroke")]
- [a.setAttribute("stroke", icon["symbol-color"]) for a in bg_dom.getElementsByTagName("g") if a.getAttribute("stroke")]
- [a.setAttribute("stroke", icon["symbol-color"]) for a in bg_dom.getElementsByTagName("rect") if a.getAttribute("stroke") not in ("none", "")]
- bg_svg = rsvg.Handle(data=bg_dom.toxml())
- bg_width = float(bg_svg.get_property('width'))
- bg_height = float(bg_svg.get_property('height'))
- reswidth = max(bg_width * original_multiplier, reswidth)
- resheight = max(bg_height * original_multiplier, resheight)
-
- svgsurface = cairo.SVGSurface(outfile, reswidth, resheight)
- svgctx = cairo.Context(svgsurface)
-
- if icon.get("symbol-file"):
- svgctx.save()
- svgctx.scale(original_multiplier, original_multiplier)
- bg_svg.render_cairo(svgctx)
- svgctx.restore()
- svgctx.translate((reswidth - iconwidth) / 2., (resheight - iconheight) / 2.)
-
- svgctx.scale(iconwidth / svgwidth, iconheight / svgheight)
- svg.render_cairo(svgctx)
-
- svgsurface.write_to_png(tmpfile)
- svgsurface.finish()
- tmpfile.seek(0)
- im = Image.open(tmpfile)
- bbox = im.getbbox()
- if bbox:
- dx, dy = min(bbox[0], im.size[0]-bbox[2]), min(bbox[1], im.size[1]-bbox[3])
- bbox = (dx, dy, im.size[0] - dx, im.size[1] - dy)
- im = im.crop(bbox)
- return im
-
-def pack_texture(icons=[], multiplier = 1.0, path = "", rasfilter = []):
- images = {}
- strips = []
- area = 0
- for (svg, icon, max_height) in icons:
- if os.path.exists(icon["file"]):
- images[svg] = open_icon_as_image(icon, multiplier, max_height)
- area += images[svg].size[0] * images[svg].size[1]
- else:
- print "bad icon!", icon
- width = 2 ** math.ceil(math.log(area ** 0.5, 2))
-
- queue = images.keys()
- queue.sort(key = lambda x: -images[x].size[1] * 10000 - images[x].size[0])
-
- for img in queue:
- for strip in strips:
- if strip["len"] + images[img].size[0] <= width:
- strip["len"] += images[img].size[0]
- strip["height"] = max(images[img].size[1], strip["height"])
- strip["list"].append(img)
- break
- else:
- strips.append({"len": images[img].size[0], "height": images[img].size[1], "list": [img]})
- height = 2 ** math.ceil(math.log(sum([i["height"] for i in strips]), 2))
- page = Image.new("RGBA", (int(width), int(height)))
- dx, dy = 0, 0
- icon_id = 0
- skin = open(os.path.join(path, 'basic.skn'), "w")
- print >> skin, """
-
- """%(int(width), int(height))
- for strip in strips:
- for img in strip["list"]:
- page.paste(images[img], (dx, dy))
- icon_id += 1
- print >> skin,"""
-
- """ % (icon_id, img, dx, dy, images[img].size[0], images[img].size[1])
- dx += images[img].size[0]
- dy += strip["height"]
- dx = 0
- #pprint.pprint(strips)
-
- print >>skin, """
- """
- page.save(os.path.join(path,"symbols.png"))
\ No newline at end of file
diff --git a/src/twms_fetcher.py b/src/twms_fetcher.py
deleted file mode 100644
index ce8315f..0000000
--- a/src/twms_fetcher.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: utf-8 -*-
-# This file is part of tWMS.
-
-# tWMS is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# tWMS is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with tWMS. If not, see .
-
-import StringIO
-import Image
-import os
-import threading
-import thread
-
-from twms import projections
-import config
-
-# from vtiles_backend import QuadTileBackend as DataBackend
-from backend.postgis import PostGisBackend as DataBackend
-from mapcss import MapCSS
-from render import RasterTile
-from tempfile import NamedTemporaryFile
-
-style = MapCSS(1, 19)
-style.parse(open("/home/kom/osm/kothic/src/styles/default.mapcss", "r").read())
-os.chdir("/home/kom/osm/kothic/src/")
-
-metatiles_in_progress = {}
-
-renderlock = threading.Lock()
-
-
-def kothic_fetcher(z, x, y, this_layer):
- if "max_zoom" in this_layer:
- if z >= this_layer["max_zoom"]:
- return None
- bbox = projections.bbox_by_tile(z, x, y, "EPSG:3857")
- db = DataBackend(path="/home/kom/osm/kothic/src/tiles")
- res = RasterTile(256, 256, 1, db, "EPSG:3857")
- res.update_surface(bbox, z, style)
- f = NamedTemporaryFile()
- f.close()
- res.surface.write_to_png(f.name)
- del res
- del db
- im = Image.open(f.name)
- os.unlink(f.name)
- im = im.convert("RGBA")
-
- return im
-
-
-def kothic_metatile(z, x, y, this_layer):
-
- print z, x, y
- global metatiles_in_progress
- if "max_zoom" in this_layer:
- if z >= this_layer["max_zoom"]:
- return None
- if z < 5:
- return None
-
- metatile_id = (z, int(x / 8), int(y / 8))
-
- try:
- metatiles_in_progress[metatile_id].join()
- except KeyError:
- metatiles_in_progress[metatile_id] = threading.Thread(None, gen_metatile, None, (metatile_id, this_layer))
- metatiles_in_progress[metatile_id].start()
- metatiles_in_progress[metatile_id].join()
- except RuntimeError:
- pass
-
- local = config.tiles_cache + this_layer["prefix"] + "/z%s/%s/x%s/%s/y%s." % (z, x / 1024, x, y / 1024, y)
- ext = this_layer["ext"]
- if os.path.exists(local + ext): # First, look for tile in cache
- try:
- im1 = Image.open(local + ext)
- del metatiles_in_progress[metatile_id]
- return im1
- except IOError:
- os.remove(local + ext)
-
-
-def gen_metatile(metatile_id, this_layer):
- # renderlock.acquire()
- z, x, y = metatile_id
- z -= 3
- wh = 2560
- bb1 = projections.coords_by_tile(z, x - 0.125, y - 0.125, "EPSG:3857")
- bb2 = projections.coords_by_tile(z, x + 1.125, y + 1.125, "EPSG:3857")
- bbox = (bb1[0], bb2[1], bb2[0], bb1[1])
- db = DataBackend()
- res = RasterTile(wh, wh, 1, db, "EPSG:3857")
- res.update_surface(bbox, z + 3, style)
- f = NamedTemporaryFile()
- f.close()
- res.surface.write_to_png(f.name)
- del res
- del db
- im = Image.open(f.name)
- os.unlink(f.name)
- im = im.convert("RGBA")
- x *= 8
- y *= 8
- z += 3
- ext = this_layer["ext"]
- for i in range(x, x + 9):
- for j in range(y, y + 9):
- local = config.tiles_cache + this_layer["prefix"] + "/z%s/%s/x%s/%s/y%s." % (z, i / 1024, i, j / 1024, j)
- box = (256 * (i - x + 1), 256 * (j - y + 1), 256 * (i - x + 2), 256 * (j - y + 2))
- im1 = im.crop(box)
- if not os.path.exists("/".join(local.split("/")[:-1])):
- os.makedirs("/".join(local.split("/")[:-1]))
- im1.save(local + ext)
- del im1
- # renderlock.release()