From abd549bf91cca812f8e2a257a2941361209fc0f2 Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Mon, 21 Sep 2015 20:04:37 +0300 Subject: [PATCH] Delete unneeded files --- src/__init__.py | 1 - src/backend/__init__.py | 1 - src/backend/postgis/__init__.py | 150 - src/backend/vtile/__init__.py | 148 - src/debug.py | 40 - src/generate_image.py | 55 - src/generate_map_key.py | 105 - src/gtk-app.py | 117 - src/gtk_widget.py | 291 -- src/javascript/canvas.js | 26 - src/javascript/excanvas.js | 35 - src/javascript/geomops.js | 104 - src/javascript/imagesq.js | 1 - src/javascript/jsondraw.js | 157 - src/javascript/osmosnimki.js | 1 - src/javascript/render.html | 21 - src/javascript/render.js | 272 -- src/javascript/rgbcolor.js | 295 -- src/json_getter.py | 243 - src/komap.conf | 16 - src/komap.py | 895 ---- src/libkojs.py | 57 - src/libkomapnik.py | 415 -- src/make_postgis_style.py | 65 - src/osm2tiles.py | 226 - src/production.py | 31 - src/render.py | 544 --- src/simple_wms.py | 106 - src/style.py | 157 - src/styles/default.mapcss | 260 -- src/styles/default/asphalt.png | Bin 12968 -> 0 bytes src/styles/default/dirt.png | Bin 13226 -> 0 bytes src/styles/default/field.png | Bin 11720 -> 0 bytes src/styles/default/grass.png | Bin 11535 -> 0 bytes src/styles/default/grass2.png | Bin 11821 -> 0 bytes src/styles/default/parking.png | Bin 409 -> 0 bytes src/styles/default/paving_stones6s.png | Bin 10213 -> 0 bytes src/styles/default/sand.png | Bin 14131 -> 0 bytes src/styles/gisrussa.mapcss | 246 - src/styles/icons/PD/buildings-hatch.png | Bin 183 -> 0 bytes src/styles/icons/PD/construction-hatch.png | Bin 153 -> 0 bytes .../icons/PD/ekaterinburg-metro-green.png | Bin 444 -> 0 bytes src/styles/icons/PD/minsk_metro_blue.png | Bin 260 -> 0 bytes src/styles/icons/PD/minsk_metro_red.png | Bin 267 -> 0 bytes src/styles/icons/PD/praha-metro-green.png | Bin 165 -> 0 bytes src/styles/icons/PD/praha-metro-red.png | Bin 155 -> 0 bytes src/styles/icons/PD/praha-metro-yellow.png | Bin 167 -> 0 bytes src/styles/icons/PD/vienna-ubahn-blue.png | Bin 690 -> 0 bytes src/styles/icons/PD/vienna-ubahn-brown.png | Bin 643 -> 0 bytes src/styles/icons/PD/vienna-ubahn-green.png | Bin 650 -> 0 bytes src/styles/icons/PD/vienna-ubahn-orange.png | Bin 607 -> 0 bytes src/styles/icons/PD/vienna-ubahn-purple.png | Bin 658 -> 0 bytes src/styles/icons/PD/vienna-ubahn-red.png | Bin 666 -> 0 bytes src/styles/landuses.mapcss | 37 - src/styles/linky.mapcss | 4109 ----------------- src/styles/mapink.mapcss | 210 - src/styles/openstreetinfo.mapcss | 66 - src/styles/osmosnimki-hybrid.mapcss | 1148 ----- src/styles/osmosnimki-maps.mapcss | 2887 ------------ src/test_stylesheet.py | 204 - src/texture_packer.py | 148 - src/twms_fetcher.py | 125 - 62 files changed, 14015 deletions(-) delete mode 100644 src/__init__.py delete mode 100644 src/backend/__init__.py delete mode 100644 src/backend/postgis/__init__.py delete mode 100644 src/backend/vtile/__init__.py delete mode 100644 src/debug.py delete mode 100644 src/generate_image.py delete mode 100644 src/generate_map_key.py delete mode 100644 src/gtk-app.py delete mode 100644 src/gtk_widget.py delete mode 100755 src/javascript/canvas.js delete mode 100755 src/javascript/excanvas.js delete mode 100644 src/javascript/geomops.js delete mode 100755 src/javascript/imagesq.js delete mode 100755 src/javascript/jsondraw.js delete mode 100755 src/javascript/osmosnimki.js delete mode 100755 src/javascript/render.html delete mode 100755 src/javascript/render.js delete mode 100644 src/javascript/rgbcolor.js delete mode 100644 src/json_getter.py delete mode 100644 src/komap.conf delete mode 100755 src/komap.py delete mode 100644 src/libkojs.py delete mode 100644 src/libkomapnik.py delete mode 100644 src/make_postgis_style.py delete mode 100644 src/osm2tiles.py delete mode 100644 src/production.py delete mode 100644 src/render.py delete mode 100644 src/simple_wms.py delete mode 100644 src/style.py delete mode 100644 src/styles/default.mapcss delete mode 100644 src/styles/default/asphalt.png delete mode 100644 src/styles/default/dirt.png delete mode 100644 src/styles/default/field.png delete mode 100644 src/styles/default/grass.png delete mode 100644 src/styles/default/grass2.png delete mode 100644 src/styles/default/parking.png delete mode 100644 src/styles/default/paving_stones6s.png delete mode 100644 src/styles/default/sand.png delete mode 100644 src/styles/gisrussa.mapcss delete mode 100644 src/styles/icons/PD/buildings-hatch.png delete mode 100644 src/styles/icons/PD/construction-hatch.png delete mode 100644 src/styles/icons/PD/ekaterinburg-metro-green.png delete mode 100644 src/styles/icons/PD/minsk_metro_blue.png delete mode 100644 src/styles/icons/PD/minsk_metro_red.png delete mode 100644 src/styles/icons/PD/praha-metro-green.png delete mode 100644 src/styles/icons/PD/praha-metro-red.png delete mode 100644 src/styles/icons/PD/praha-metro-yellow.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-blue.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-brown.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-green.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-orange.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-purple.png delete mode 100644 src/styles/icons/PD/vienna-ubahn-red.png delete mode 100644 src/styles/landuses.mapcss delete mode 100755 src/styles/linky.mapcss delete mode 100644 src/styles/mapink.mapcss delete mode 100644 src/styles/openstreetinfo.mapcss delete mode 100644 src/styles/osmosnimki-hybrid.mapcss delete mode 100644 src/styles/osmosnimki-maps.mapcss delete mode 100644 src/test_stylesheet.py delete mode 100644 src/texture_packer.py delete mode 100644 src/twms_fetcher.py 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, "\n" % (k.lower(), k.lower(), "
".join(list(v))) -print >> ss, "
%s%s
" -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 """ - - - """ % (bgcolor, map_proj) - - -def xml_end(): - 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 9b42fe357db05d4d64e195b79ac02f5c0c500d2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12968 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 u00009a7bBm000XU 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
SDKk{}e2wAUC-V;2;Rxc;xjUoS!=(#d`hzyf%|- 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 b?CAdwWE8F`(sQOd00000NkvXXu0mjfgzx{` diff --git a/src/styles/default/parking.png b/src/styles/default/parking.png deleted file mode 100644 index 9e3ad06041a7054f9b45e509d9c52de0a0b9b56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 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 SV_XTegu&C*&t;ucLK6Tz6g2Dr diff --git a/src/styles/icons/PD/construction-hatch.png b/src/styles/icons/PD/construction-hatch.png deleted file mode 100644 index 2bce75954536b15f1e1ca377b7d19d7ea5d41217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+9LPZ!4!i{9iPbt#YkzjrtLm)^h>^fM*X>6x(-w~>K?LBXvb#*+@E tFF5k^et*s%|B0X74=0%Lv;|5qFnGLdeX#oQsZ^jb44$rjF6*2UngEVJFlhh) 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 89fd9c60031d1880fde586c62315b6bd62b78d69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmV;t0Ymw$W!4g-DR%GV+QrVf%_s(h@96#a@Bjb4|BQc1*LYO?$E7)Jdruo9 zBV)x%k76bi1N=9&{R8p;|NlSj-@kvkTLNqUA!}5*evnb?*3mvjMuq|)_y0z}DpUj9 z*VO-m@qvcS0~(UHC%ok^i0`tpl8K3#V=5!VzYM7I|2sn(Q4MfdTJaB=|DWOi(!c-y zB>+YKGcz*HVPs%TKyuLk1JNC*23RgAuKNG~Un{b+fdR1=Nc{#Xia-f@M#jeD34IMH z2I$U7&0}U_WM=ry(u*g0{{uBw{$~35{YuK5Nhk(rOium>^gPJ3pZ@*-Hw7rfgsGXS z@c+NR96%?u-^iVd>IH?~7+5ScGBYth1R63M$Y+L1|6^og%=-8DpCr%)^&rC@6fZ$F zK(aj)ITkvBF1Z8@lZ9Y0*8j=>e=%qRHJ8I&^Sp93ssVzHet*&Y9s+bSNPrdSn%@kN m0EK(!ef=g>1IPsfZvX(3Fq;uNLb3b+0000QL70(Y)*K0-AbW|YuPgg)4kj*bz0TAPWk8`8PZ!4!jq}MV z2bf%3xBYP!ul{?iT`;ysaQ3qB^?MC@M1=2lT^3*qoT&T1lTl)wQke2CMjxIj3_-cB z+vc*`IwUYyUMM*Eu*A%Vd6!#C!}aq&Odeh7kvo6m(cFXu4~5ecfZ*4sH=O!<&L3}i xWO6Om$la`QL70(Y)*K0-AbW|YuPgg)4kj)&^N0m$zkx#Co-U3d8t0Q! z4lr%===|d@{<-p7n_z5@;B2+`%hwz7+|knQx-8J98>IBVlQDXU%f87=1@AJbv3W79 z+@^Hs(;mQL49+VYlWB!-m6dcl;d88g!N?6*CGkFdTWKYQti@;yKVN N22WQ%mvv4FO#rNtIu8H< 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 b178fe2b44707ef0f8e7bc6e8298fb96543ce28b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngf!3HGX_LqeNDaPU;cPEB*=VV?2Iia2|jv*T7 zllQDt`#hhKbH)9tLlwck&-VXXtKMT^C?OxKE4)c5g(0|O9pgi%x3xv zq`TI%buKXODAilZke?v9NpQLF1YU*HD|a|avN2@rH(54eqWBG<1q`09elF{r5}E*D CkTDzp 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 bf33f34580af64f6d3ec9be32e4408e3217e3b5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngf!3HGX_LqeNDaPU;cPEB*=VV?2IfcKt@CnM<3vX89Y9g}nQrVmz9eQGNo5f3 z`S@4jaD7R-qP6U7DYd3^3fFcnVOq0nfwlbfUW>U6ISi40N1rjJFfcs1toMq0@vcaq OWelFKelF{r5}E+9|2*md 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 196ce6c465f5aa5b5102b3621ee58ff25cb35733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)Px%Y)M2xR5;6>lS@d{Q5431=l&lvK6@vb_C|u95+OAS7F1M34+2Dhhf@fke_GTqQzO3u#eEw6N%DS(;fo$8Mc{ z-9K_fRim0s0E>2!iWiO!nDYg-i&F0um|o z&Zn-%59S+GG`3zGOr-YRKDq{DgwQIDS03^5({PsA)MA?JSKt`IT4j4v2jdGP7vDGU z-0xN#Zk_dEFcB{;@O0gxasjZaltlf!w34XL+J)0FIo-Zv^yAk=edXcSGsYF-R@DO} z6IuX5t3S!lt|FU*T#Z;&&oRW!z({%v{}}_r=`BWt>fgrwZKw#Vb}pba$7@)>xEz4Z)s@-*CBpUlJrIN{zRQ%-NQ(eO>#udEf^Y$# z0~dD7grZ1(+L%v7gu#&%6B}--fJA+#J9&BUA_K6eW>(BG@(hsLQ|Px%JxN4CR5;6>Q%y)zVH7?0``+l&h9aG8=8+~dqVyvr*dK#dvoUjW41#t^5m_#R zmXa8R5$&SD1fif+EkY`U7Df?7f^Mc{7BXT*jA%IY^U`tNd*5x*{HZOpQ1ty$irn3PP81Zgn315u{5wCmiNs05B~(*OA3K zTKrxpW+-N~_`Q(Ddj9r2cUU(1Hh=q>w$CbN?57`8aWDh`*nO%KhrMoegqqRRcPA%~ z-Mxm9iT6xI@RSx^p-c)VZN<9)@W`8YR8ryl>&{E_vuJBRluhI0%bEFl0RZ6|BPfYt z0H~`i#0$}}HR6Tn7`oa*41gq2?0CQzT=5sW8v|wWq&dE1JATECeMTA1oHzymc=-GU z#uG^hB4~o*J3Jc?3`|TX*G!pyG$=djjBsnfJK9v`ae|fQ9IPzorYeu!8t{&G)EVKK dCl6$y<~PR{*m>Px%L`g(JR5;6>lTApJVHAa*`+nc2Gmc=Ci8@g-Mj;aFBCOQ1M5qwVRw022(a$Cd zB6KrhC7HBv5mZRD376TbAP^)X7YarA1EE7irb1Rzj^p_Kye(!NOk0#^^TIvnUe0?t zS42?`pf#Xza*6}n1Ka$yR+ic1+1^e7WvNMf(dmzUjt@qsVxJI95dcU%NtB)s-C3Mn zx}>%CrAnGrIuTjQ%J=n*J&d%&ngO8`h44A3j%0MwP)q}{hFBj7T zN?MD0?FHxT^{z067`WP{tGkQXOdNnffuFW(ZE3Ef?FLr1**o$0<2fm5Eh>u7Cq7sK z(;Ry;B>;}L*?+a1Xk-C^oKQAHci&-(mHg`IVr|D9$G_FLOQEC%umD;1mXeOO%UZ0| zQW^m)5n7b}({5ygSdQ9_3aD7M?f-!WDwJn?8#RDudnm(i%&pDCKSB(@F{iYn`vL5j zlV&oMk6>*c+SO=R6Rgc6L;2GDDs8_}P?P(^UT|8qtx1$cr8@5j0H=1JVN<1_Lq}`4 zz3*PSxqCFs+n4XP7=k}H^NOTWIO=)26wt5w-blVb_*c)f@o5e=AJBj(Q;kNRPVZ3w zp{8J!h>Qc$&|a@c=7-ibkIWCz&|aU6xyX2^v9RioTi6>e+5COt*RYdtL)z99ROeE6 zybgeY=L5{V{)$+FQZl)vY*XcM$N0B(*Vq?%WZdk$b06h^To*>&FQHA27kTdNu%&I^Z)<=07*qoM6N<$g8U9OLjV8( 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 ad785d0ef85bfcf78f1ddde5020fead7d820d180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)Px%8A(JzR5;6>lTS!gaS+Ep^Ly{LPc5{6pd}Sz2BxW}4jwWPp*pBgCj&2$Mi3!I zRN%odkU;DZ243ydVUs8!qUqlh$gJN$LpKWPwmLBx z%PkqH>wk5(pux<&mQfA;-Ut#Av$Z#>A-SBfpEf+4x|VA&+ut^(fp_I_=WRp;Rb}z@ z6N2;_09Mf+D$ZZeA9!h*4*-Px%Oi4sRR5;6>lTApJQ51%sd%tgfoUx=_*c7DLkJ%(BL4&!lpd^!!Hi1Qrfmm%q zvvaKwy6H?AC0Hn|sb9}j7PsVSyu#y0%%sc;J$x2*wL_!l9sV)kIrL0sz;n6Z4 z4op41lrB(H(A*O@qIGSZtq3VlwxYA8n@D^TfPg=r#@qF2uC=iZzbmWf`KP<}dQCxd z-dtiP?003Uy~hFqz_t|LR$uyQUfsu@qg#;LvLmfYS96J(+S3KsZb^X%11>;VNqgC{ zrC5zr%*hdeO9&a3G2>@7>%>BGzFGn$D}MWbpnwu-*va)8z_61@ujZRwJrDl~;njSz z(o$wWK-`F?8O<#T1??!E!XWO!F&p`}IwpoW6)TdBIdB!%wHg!Mc0^&h{Rl z_*FXqMJKkU#qWBjFqNrvp|jDQ-6xzW9JOpC2&flB-NK*k`K#yn+!Cis>lGk$%`^Ju z>!TtGP_?_ZObTrb5KR>wD)KS9MjZJVrKzGr0YVCG?D(#8Wq<6#mHpkDKmQnczi7tu zO=VIVsN%?(5CCtV4KoyZjV^RF>6+M=T^71GQa8V58$Z1KuHCtMzcOLQ8sbLuu&pfV sY@y|MWesNNnO)br8U})u0V}2X4bb=CDtzn-*Z=?k07*qoM6N<$g3RhMPx%R7pfZR5;6>lTS!gQ5431=gxai(GgL^iYzRwSq!5YL4hs|+=zy0tJ=89{y`Ch zMS?97iW0#^RG^>>ky_*gA#DX+2tlF@q9qt1fn+0tqv)GA_qLd)S+=mg#l45~@B8lM z9LZAZ1b{Y%lri3!!otI4!C+0EZ8xR0E&~WCHNTolMdy>r(TRBct1V(F5dbo$k7t#Y zPZrkJZfRq(eV6fX0Z<|vrMbC1Hzz0Wvoip2Hxzo2^t@|;5fEFc?VtftT4OS%1TE|3 z)493p+YP!aDtcF3_wtRdE)W4@c-zsz=VTIqW5FQjJ3F^y&)eE4aGc&dQ&U%@yP~3W zaee($zT;RArl$qKq|*#lSMzaY1%Q(U1zZ{*M*;x=9+sDzgzI{Ta&nF<1ucLLh)Ja~ znzd#Ze4n2qfE^HNQ9oR_k^jW^&CN!opmN7={|k(QO11GfxqHNh)~GzoTKaPy_6W(d ztRa*856aNv$F?RlgX>D)_fTlkRz?F z0G#UU<3KbDz`>>_pHo=q@5j~JI7+cED{D{y?u9}zSL-lf9*vJnR#8!g&7b!zdvkf2 z_UdW_NOm9)dptWEQ2>pRNR<+q0pwLfgGt0T1n}k`hXqn*mrH9_G#BB92lxO3l|47oV;h8;kGS#&07df!FQrbqUYA zop9Z=o-qo*5=rMf&S<`6^<3=ke!suAHoaBz6CvC1mCeZBX#fBK07*qoM6N<$g7<_j A-T(jq 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()