[openstreetmap-carto] 01/04: Imported Upstream version 2.40.0
Bas Couwenberg
sebastic at debian.org
Wed Jun 22 05:09:03 UTC 2016
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch master
in repository openstreetmap-carto.
commit a88c47f18cd9995fd96c74c1cb40d81513583542
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Wed Jun 22 06:59:09 2016 +0200
Imported Upstream version 2.40.0
---
CONTRIBUTING.md | 34 ++++++
INSTALL.md | 8 ++
amenity-points.mss | 108 ++++++++++---------
indexes.sql | 37 +++++++
indexes.yml | 34 ++++++
openstreetmap-carto.style | 11 +-
placenames.mss | 18 +++-
power.mss | 19 +++-
project.mml | 40 +++----
project.yaml | 163 +++++++++++++++-------------
roads.mss | 263 +++++++++++++++++++++++++---------------------
scripts/README.md | 3 +
scripts/indexes.py | 72 +++++++++++++
scripts/shop_values.rb | 6 ++
symbols/library.14.svg | 38 +++++++
symbols/library.p.20.png | Bin 715 -> 0 bytes
symbols/shop_books.16.svg | 12 ---
17 files changed, 573 insertions(+), 293 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 83d4efc..4ccccd6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -17,6 +17,11 @@ contain a cropped screenshot of the problem, and a link to the area. Don't assum
that we will see exactly what you see. If a particular OSM object is an issue,
the issue should contain the tagging of the object.
+## Easy pickings
+
+Some [easy issues](https://github.com/gravitystorm/openstreetmap-carto/issues?q=is%3Aopen+is%3Aissue+label%3Aeasy) have been selected
+that are particularly suitable for new contributors to get familiar with the project's code base and the contribution process.
+
## Editing Layers
OpenStreetMap Carto uses a YAML file for defining layers. Some of the rationale
@@ -89,6 +94,35 @@ instead of
* Order the selectors in a style-sheet in rough order of importance (i.e.,
`highway=primary`, then `highway=secondary`) and beyond that, add layers that
are rendered later (i.e., higher) lower in the file.
+* For features where the symbolizer attributes change on different zoom levels,
+ the main definition should be for the lowest zoom level. Also, avoid nesting
+ zoom-based overrides. For example:
+
+```
+#layer[feature = 'foo'][zoom >= 13] {
+ line-width: 6;
+ line-color: black;
+ [zoom >= 15] {
+ line-width: 7;
+ }
+ [zoom >= 17] {
+ line-width: 10;
+ }
+}
+```
+instead of
+```
+#layer[feature = 'foo'][zoom >= 13] {
+ line-width: 10;
+ line-color: black;
+ [zoom < 18] {
+ line-width: 7;
+ [zoom < 16] {
+ line-width: 6;
+ }
+ }
+}
+```
## SQL Style Guidelines
Because SQL within JSON or YAML will not generally be syntax highlighted, indentation and caps are particularly important.
diff --git a/INSTALL.md b/INSTALL.md
index 2930a54..51da6bf 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,5 +1,6 @@
# Installation
+## OpenStreetMap data
You need OpenStreetMap data loaded into a PostGIS database (see below for [dependencies](#dependencies)). These stylesheets currently work only with the osm2pgsql defaults (i.e. database name is `gis`, table names are `planet_osm_point`, etc).
It's probably easiest to grab an PBF of OSM data from [Mapzen](https://mapzen.com/metro-extracts/) or [geofabrik](http://download.geofabrik.de/). Once you've set up your PostGIS database, import with osm2pgsql:
@@ -10,6 +11,13 @@ osm2pgsql -d gis ~/path/to/data.osm.pbf --style openstreetmap-carto.style
You can find a more detailed guide to setting up a database and loading data with osm2pgsql at [switch2osm.org](http://switch2osm.org/loading-osm-data/).
+### Custom indexes
+Custom indexes are not required, but will speed up rendering, particularly for full planet databases, heavy load, or other production environments. They will not be as helpful with development using small extracts.
+
+```
+psql -d gis -f indexes.sql
+```
+
Additionally you need some shapefiles.
## Scripted download
diff --git a/amenity-points.mss b/amenity-points.mss
index 765d836..a25aa1a 100644
--- a/amenity-points.mss
+++ b/amenity-points.mss
@@ -19,6 +19,7 @@
@landcover-face-name: @oblique-fonts;
@standard-wrap-width: 30;
+ at standard-text-size: 10;
/* Note that .points is also used in water-features.mss */
.points {
@@ -261,8 +262,10 @@
}
[feature = 'amenity_library'][zoom >= 16] {
- point-file: url('symbols/library.p.20.png');
- point-placement: interior;
+ marker-file: url('symbols/library.14.svg');
+ marker-fill: @amenity-brown;
+ marker-placement: interior;
+ marker-clip: false;
}
[feature = 'amenity_courthouse'][zoom >= 16] {
@@ -579,7 +582,7 @@
}
[feature = 'shop_books'][zoom >= 17] {
- marker-file: url('symbols/shop_books.16.svg');
+ marker-file: url('symbols/library.14.svg');
marker-fill: @shop-icon;
marker-placement: interior;
marker-clip: false;
@@ -1028,24 +1031,24 @@
}
.amenity-low-priority {
- [man_made = 'cross'][zoom >= 16],
- [historic = 'wayside_cross'][zoom >= 16] {
+ [feature = 'man_made_cross'][zoom >= 16],
+ [feature = 'historic_wayside_cross'][zoom >= 16] {
marker-file: url('symbols/christian.9.svg');
marker-fill: #000000;
marker-placement: interior;
marker-clip: false;
}
- [amenity = 'parking'][zoom >= 17],
- [amenity = 'bicycle_parking'][zoom >= 17],
- [amenity = 'motorcycle_parking'][zoom >= 17] {
- [amenity = 'parking'] {
+ [feature = 'amenity_parking'][zoom >= 17],
+ [feature = 'amenity_bicycle_parking'][zoom >= 17],
+ [feature = 'amenity_motorcycle_parking'][zoom >= 17] {
+ [feature = 'amenity_parking'] {
marker-file: url('symbols/parking.svg');
}
- [amenity = 'bicycle_parking'] {
+ [feature = 'amenity_bicycle_parking'] {
marker-file: url('symbols/bicycle_parking.16.svg');
}
- [amenity = 'motorcycle_parking'] {
+ [feature = 'amenity_motorcycle_parking'] {
marker-file: url('symbols/motorcycle_parking.16.svg');
}
marker-placement: interior;
@@ -1056,7 +1059,7 @@
}
}
- [railway = 'level_crossing'][zoom >= 14]::railway {
+ [feature = 'railway_level_crossing'][zoom >= 14]::railway {
point-file: url('symbols/level_crossing.svg');
point-placement: interior;
[zoom >= 16] {
@@ -1064,13 +1067,13 @@
}
}
- [highway = 'mini_roundabout'][zoom >= 16]::highway {
+ [feature = 'highway_mini_roundabout'][zoom >= 16]::highway {
marker-file: url('symbols/mini_roundabout.svg');
marker-placement: interior;
marker-clip: false;
}
- [barrier = 'gate']::barrier {
+ [feature = 'barrier_gate']::barrier {
[zoom >= 16] {
marker-file: url('symbols/gate.svg');
marker-placement: interior;
@@ -1078,16 +1081,16 @@
}
}
- [barrier = 'lift_gate'][zoom >= 16]::barrier,
- [barrier = 'swing_gate'][zoom >= 16]::barrier {
+ [feature = 'barrier_lift_gate'][zoom >= 16]::barrier,
+ [feature = 'barrier_swing_gate'][zoom >= 16]::barrier {
marker-file: url('symbols/liftgate.svg');
marker-fill: #3f3f3f;
marker-placement: interior;
marker-clip: false;
}
- [barrier = 'bollard'],
- [barrier = 'block'] {
+ [feature = 'barrier_bollard'],
+ [feature = 'barrier_block'] {
[zoom >= 16] {
marker-width: 3;
marker-line-width: 0;
@@ -1100,13 +1103,13 @@
}
}
- [amenity = 'bench'][zoom >= 19]::amenity {
+ [feature = 'amenity_bench'][zoom >= 19]::amenity {
marker-file: url('symbols/bench.16.svg');
marker-fill: @amenity-brown;
marker-placement: interior;
}
- [amenity = 'waste_basket'][zoom >= 19]::amenity {
+ [feature = 'amenity_waste_basket'][zoom >= 19]::amenity {
marker-file: url('symbols/waste_basket.10.svg');
marker-fill: @amenity-brown;
marker-placement: interior;
@@ -1122,7 +1125,7 @@
[feature = 'place_islet'][zoom >= 17][way_pixels < 800000] {
text-name: "[name]";
text-fill: #000;
- text-size: 10;
+ text-size: @standard-text-size;
[way_pixels > 12000] { text-size: 12; }
[way_pixels > 48000] { text-size: 15; }
text-face-name: @oblique-fonts;
@@ -1144,7 +1147,7 @@
[zoom >= 17] {
text-name: "[name]";
text-fill: @amenity-brown;
- text-size: 10;
+ text-size: @standard-text-size;
text-dy: 11;
text-face-name: @bold-fonts;
text-halo-radius: 1;
@@ -1168,7 +1171,7 @@
[feature = 'amenity_cinema'] {
[zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: @amenity-brown;
text-dy: 13;
text-face-name: @bold-fonts;
@@ -1177,6 +1180,7 @@
text-halo-fill: rgba(255,255,255,0.6);
text-wrap-width: @standard-wrap-width;
text-placement: interior;
+ [feature = 'amenity_library'],
[feature = 'tourism_museum'],
[feature = 'amenity_theatre'],
[feature = 'amenity_cinema'] {
@@ -1189,7 +1193,7 @@
[feature = 'amenity_bicycle_rental'][zoom >= 17],
[feature = 'leisure_slipway'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @transportation-text;
[feature = 'amenity_car_rental'] { text-dy: 10; }
[feature = 'amenity_bicycle_rental'] { text-dy: 10; }
@@ -1205,7 +1209,7 @@
[feature = 'amenity_bicycle_parking'][zoom >= 10][way_pixels > 900],
[feature = 'amenity_motorcycle_parking'][zoom >= 10][way_pixels > 900] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @transportation-text;
text-dy: 9;
text-face-name: @book-fonts;
@@ -1233,7 +1237,7 @@
[feature = 'leisure_picnic_table'][zoom >= 17],
[feature = 'amenity_post_office'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: @amenity-brown;
text-dy: 10;
[feature = 'amenity_police'] { text-dy: 11; }
@@ -1248,7 +1252,7 @@
[feature = 'amenity_place_of_worship'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: #000033;
text-dy: 12;
text-face-name: @book-fonts;
@@ -1263,7 +1267,7 @@
[feature = 'natural_saddle'][zoom >= 15],
[feature = 'tourism_viewpoint'][zoom >= 16] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: darken(@landform-color, 30%);
[feature = 'natural_volcano'] { text-fill: #d40000; }
text-dy: 7;
@@ -1281,7 +1285,7 @@
[feature = 'man_made_mast'][zoom >= 17],
[feature = 'man_made_water_tower'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: black;
[feature = 'natural_cave_entrance'],
[feature = 'man_made_water_tower'] {
@@ -1291,7 +1295,7 @@
[feature = 'historic_wayside_cross'] {
text-dy: 6;
}
- [feature = 'man_made_mast'] { text-dy: 10; }
+ [feature = 'man_made_mast'] { text-dy: 10; }
text-face-name: @book-fonts;
text-halo-radius: 1;
text-halo-fill: rgba(255,255,255,0.6);
@@ -1303,7 +1307,7 @@
[feature = 'historic_monument'][zoom >= 16],
[feature = 'historic_archaeological_site'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @amenity-brown;
text-dy: 11;
text-face-name: @book-fonts;
@@ -1316,7 +1320,7 @@
[feature = 'leisure_miniature_golf'][zoom >= 17],
[feature = 'leisure_golf_course'][zoom >= 15] {
text-name: "[name]";
- text-size: 11;
+ text-size: @standard-text-size;
text-fill: darken(@park, 60%);
text-face-name: @book-fonts;
text-halo-radius: 1;
@@ -1332,7 +1336,7 @@
[way_area >= 20000][zoom >= 16],
[zoom >= 17] {
text-name: "[name]";
- text-size: 11;
+ text-size: @standard-text-size;
text-fill: darken(@park, 60%);
text-dy: 11;
text-face-name: @book-fonts;
@@ -1371,7 +1375,7 @@
[way_area >= 20000][zoom >= 16],
[zoom >= 17] {
text-name: "[name]";
- text-size: 11;
+ text-size: @standard-text-size;
text-dy: 13;
text-fill: darken(@park, 60%);
text-face-name: @book-fonts;
@@ -1656,7 +1660,7 @@
[feature = 'amenity_atm'] {
text-name: "[operator]";
}
- text-size: 10;
+ text-size: @standard-text-size;
[feature = 'amenity_bank'] { text-dy: 9; }
[feature = 'amenity_atm'] { text-dy: 10; }
text-fill: @amenity-brown;
@@ -1676,7 +1680,7 @@
[feature = 'tourism_guest_house'][zoom >= 17],
[feature = 'tourism_camp_site'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: #0066ff;
text-dy: 11;
text-face-name: @book-fonts;
@@ -1694,7 +1698,7 @@
[feature = 'amenity_embassy'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: #0066ff;
text-dy: 10;
text-face-name: @book-fonts;
@@ -1706,7 +1710,7 @@
[feature = 'amenity_taxi'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: #0066ff;
text-dy: 11;
text-face-name: @book-fonts;
@@ -1721,7 +1725,7 @@
[feature = 'amenity_bus_station'] {
[zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @transportation-text;
text-dy: 11;
text-face-name: @book-fonts;
@@ -1759,7 +1763,7 @@
[feature = 'amenity_fountain'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @marina-text;
text-dy: 4;
text-face-name: @book-fonts;
@@ -1775,7 +1779,7 @@
[feature = 'amenity_prison'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: @amenity-brown;
text-dy: 12;
text-face-name: @book-fonts;
@@ -1788,7 +1792,7 @@
[feature = 'man_made_lighthouse'][zoom >= 15] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @transportation-text;
text-dy: 16;
text-face-name: @book-fonts;
@@ -1801,7 +1805,7 @@
[feature = 'man_made_windmill'][zoom >= 17],
[feature = 'amenity_recycling'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: @amenity-brown;
text-dy: 12;
[feature = 'amenity_recycling'] { text-dy: 10; }
@@ -1815,7 +1819,7 @@
[feature = 'amenity_hospital'][zoom >= 16] {
text-name: "[name]";
text-fill: @health-color;
- text-size: 8;
+ text-size: @standard-text-size;
text-dy: 10;
text-face-name: @book-fonts;
text-halo-radius: 1;
@@ -1832,7 +1836,7 @@
[feature = 'amenity_veterinary'] {
[zoom >= 17] {
text-name: "[name]";
- text-size: 8;
+ text-size: @standard-text-size;
text-dy: 12;
text-fill: @health-color;
text-face-name: @book-fonts;
@@ -1902,7 +1906,7 @@
[feature = 'shop_other']{
[zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-dy: 12;
text-fill: @shop-text;
text-face-name: @book-fonts;
@@ -1920,7 +1924,7 @@
[feature = 'shop_department_store'] {
[zoom >= 16] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-dy: 12;
text-fill: @shop-text;
text-face-name: @book-fonts;
@@ -1933,7 +1937,7 @@
[feature = 'aeroway_gate'][zoom >= 17] {
text-name: "[ref]";
- text-size: 10;
+ text-size: @standard-text-size;
text-fill: #aa66cc;
text-face-name: @book-fonts;
text-halo-radius: 1;
@@ -2070,7 +2074,7 @@
[feature = 'aeroway_helipad'][zoom >= 16] {
text-name: "[name]";
- text-size: 8;
+ text-size: @standard-text-size;
text-fill: @airtransport;
text-dy: -10;
text-face-name: @bold-fonts;
@@ -2082,7 +2086,7 @@
[feature = 'aeroway_aerodrome'][zoom >= 10][zoom < 14] {
text-name: "[name]";
- text-size: 8;
+ text-size: @standard-text-size;
text-fill: darken(@airtransport, 15%);
text-dy: -10;
text-face-name: @oblique-fonts;
@@ -2094,7 +2098,7 @@
[feature = 'amenity_hunting_stand'][zoom >= 17] {
text-name: "[name]";
- text-size: 10;
+ text-size: @standard-text-size;
text-dy: 11;
text-fill: @man-made-icon;
text-face-name: @book-fonts;
@@ -2106,7 +2110,7 @@
[feature = 'natural_tree'][zoom >= 17] {
text-name: "[name]";
- text-size: 9;
+ text-size: @standard-text-size;
text-fill: green;
text-dy: 7;
[zoom >= 18] { text-dy: 8; }
diff --git a/indexes.sql b/indexes.sql
new file mode 100644
index 0000000..e392840
--- /dev/null
+++ b/indexes.sql
@@ -0,0 +1,37 @@
+-- These are optional but suggested indexes for rendering OpenStreetMap Carto
+-- with a full planet database.
+-- This file is generated with scripts/indexes.py
+
+CREATE INDEX planet_osm_roads_admin
+ ON planet_osm_roads USING GIST (way)
+ WHERE boundary = 'administrative';
+CREATE INDEX planet_osm_roads_roads_ref
+ ON planet_osm_roads USING GIST (way)
+ WHERE highway IS NOT NULL AND ref IS NOT NULL;
+CREATE INDEX planet_osm_roads_admin_low
+ ON planet_osm_roads USING GIST (way)
+ WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4');
+CREATE INDEX planet_osm_line_ferry
+ ON planet_osm_line USING GIST (way)
+ WHERE route = 'ferry';
+CREATE INDEX planet_osm_line_river
+ ON planet_osm_line USING GIST (way)
+ WHERE waterway = 'river';
+CREATE INDEX planet_osm_line_name
+ ON planet_osm_line USING GIST (way)
+ WHERE name IS NOT NULL;
+CREATE INDEX planet_osm_polygon_military
+ ON planet_osm_polygon USING GIST (way)
+ WHERE landuse = 'military';
+CREATE INDEX planet_osm_polygon_nobuilding
+ ON planet_osm_polygon USING GIST (way)
+ WHERE building IS NULL;
+CREATE INDEX planet_osm_polygon_name
+ ON planet_osm_polygon USING GIST (way)
+ WHERE name IS NOT NULL;
+CREATE INDEX planet_osm_polygon_way_area_z6
+ ON planet_osm_polygon USING GIST (way)
+ WHERE way_area > 59750;
+CREATE INDEX planet_osm_point_place
+ ON planet_osm_point USING GIST (way)
+ WHERE place IS NOT NULL AND name IS NOT NULL;
diff --git a/indexes.yml b/indexes.yml
new file mode 100644
index 0000000..fe48822
--- /dev/null
+++ b/indexes.yml
@@ -0,0 +1,34 @@
+# A goal with the indexes is to have them general-purpose enough to not need
+# frequent changing with stylesheet changes, but to be usable with many
+# versions, and potentially other styles.
+
+point:
+ # The point table is small, but so are the partial indexes
+ place:
+ where: place IS NOT NULL AND name IS NOT NULL
+line:
+ name:
+ where: name IS NOT NULL
+ ferry:
+ where: route = 'ferry'
+ river:
+ where: waterway = 'river'
+polygon:
+ # The polygon table is by far the largest, and generally the slowest
+ name:
+ where: name IS NOT NULL
+ nobuilding:
+ where: building IS NULL
+ military:
+ where: landuse = 'military'
+ way_area_z6:
+ where: way_area > 59750
+roads:
+ # The roads table only has a subset of data, so it's just got some low-zoom
+ # indexes and some fairly selective ones for high zoom
+ admin_low:
+ where: boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4')
+ admin:
+ where: boundary = 'administrative'
+ roads_ref:
+ where: highway IS NOT NULL AND ref IS NOT NULL
diff --git a/openstreetmap-carto.style b/openstreetmap-carto.style
index f2322cf..d3a005c 100644
--- a/openstreetmap-carto.style
+++ b/openstreetmap-carto.style
@@ -1,5 +1,7 @@
# This is the .style file for OpenStreetMap Carto, which is currently
# the same as the upstream osm2pgsql style
+# phstore is used instead of polygon,nocolumn to preserve compatibility
+# with older osm2pgsql versions
# OsmType Tag DataType Flags
node,way access text linear
@@ -10,9 +12,9 @@ node,way admin_level text linear
node,way aerialway text linear
node,way aeroway text polygon
node,way amenity text polygon
-node,way area text # hard coded support for area=1/yes => polygon is in osm2pgsql
+node,way area text polygon # hard coded support for area=1/yes => polygon is in osm2pgsql
node,way barrier text linear
-node,way bicycle text
+node,way bicycle text linear
node,way brand text linear
node,way bridge text linear
node,way boundary text linear
@@ -47,14 +49,13 @@ node,way office text polygon
node,way oneway text linear
node,way operator text linear
node,way place text polygon
-node poi text
node,way population text linear
node,way power text polygon
node,way power_source text linear
node,way public_transport text polygon
node,way railway text linear
node,way ref text linear
-node,way religion text nocache
+node,way religion text linear
node,way route text linear
node,way service text linear
node,way shop text polygon
@@ -71,7 +72,7 @@ node,way wetland text polygon
node,way width text linear
node,way wood text linear
node,way z_order int4 linear # This is calculated during import
-way way_area real # This is calculated during import
+way way_area real linear # This is calculated during import
# Area tags
# We don't make columns for these tags, but objects with them are areas.
diff --git a/placenames.mss b/placenames.mss
index ec05e60..7c89860 100644
--- a/placenames.mss
+++ b/placenames.mss
@@ -66,7 +66,7 @@
[zoom >= 4][score >= 3000000],
[zoom >= 5][score >= 400000] {
text-name: "[name]";
- text-size: 8;
+ text-size: 11;
text-fill: @placenames;
text-face-name: @book-fonts;
text-halo-radius: 1.5;
@@ -74,13 +74,21 @@
text-wrap-width: 30;
text-min-distance: 10;
[zoom >= 5] {
- text-size: 10;
+ text-size: 11;
text-wrap-width: 45;
}
[zoom >= 6] {
text-size: 12;
text-wrap-width: 60;
}
+ [zoom >= 8] {
+ text-size: 13;
+ text-wrap-width: 60;
+ }
+ [zoom >= 9] {
+ text-size: 14;
+ text-wrap-width: 65;
+ }
[zoom >= 11] {
text-size: 15;
text-wrap-width: 75;
@@ -94,7 +102,7 @@
[zoom >= 6][score >= 70000],
[zoom >= 7] {
text-name: "[name]";
- text-size: 9;
+ text-size: 10;
text-fill: @placenames;
text-face-name: @book-fonts;
text-halo-radius: 1.5;
@@ -102,7 +110,7 @@
text-wrap-width: 30;
text-min-distance: 10;
[zoom >= 9] {
- text-size: 11;
+ text-size: 12;
text-wrap-width: 60;
}
[zoom >= 11] {
@@ -121,7 +129,7 @@
[category = 2] {
[zoom >= 9][zoom < 16] {
text-name: "[name]";
- text-size: 9;
+ text-size: 10;
text-fill: @placenames;
text-face-name: @book-fonts;
text-halo-radius: 1.5;
diff --git a/power.mss b/power.mss
index 249a0f0..065f6d7 100644
--- a/power.mss
+++ b/power.mss
@@ -2,24 +2,33 @@
#power-line {
[zoom >= 14] {
- line-width: 0.8;
+ line-width: 0.5;
line-color: @power-line-color;
[zoom >= 15] {
- line-width: 0.9;
+ line-width: 0.6;
}
[zoom >= 16] {
- line-width: 1.3;
+ line-width: 0.7;
}
[zoom >= 18] {
- line-width: 1.5;
+ line-width: 1;
+ }
+ [zoom >= 19] {
+ line-width: 1.2;
}
}
}
#power-minorline {
[zoom >= 16] {
- line-width: 0.5;
+ line-width: 0.3;
line-color: @power-line-color;
+ [zoom >= 17] {
+ line-width: 0.4;
+ }
+ [zoom >= 18] {
+ line-width: 0.5;
+ }
}
}
diff --git a/project.mml b/project.mml
index aac77f8..8c182dc 100644
--- a/project.mml
+++ b/project.mml
@@ -279,7 +279,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way, surface, \n COALESCE(\"natural\", CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END) AS \"natural\",\n CASE WHEN \"natural\" IN ('marsh', 'mud') \n THEN \"natural\" \n ELSE CASE WHEN (\"natural\" = 'wetland' AND wetland IS NULL) \n THEN 'wetland' \n ELSE CASE WHEN (\"natural\" = 'wetland')\n THEN wetland\n ELSE NULL\n END \n END\n END AS int_wetland\n FROM planet_o [...]
+ "table": "(SELECT\n way, surface, \n COALESCE(CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END, \"natural\") AS \"natural\",\n CASE WHEN \"natural\" IN ('marsh', 'mud') \n THEN \"natural\" \n ELSE CASE WHEN (\"natural\" = 'wetland' AND wetland IS NULL) \n THEN 'wetland' \n ELSE CASE WHEN (\"natural\" = 'wetland')\n THEN wetland\n ELSE NULL\n END \n END\n END AS int_wetland\n FROM planet_o [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -548,7 +548,7 @@
85.05112877980659
],
"properties": {
- "minzoom": 12
+ "minzoom": 13
},
"advanced": {}
},
@@ -574,7 +574,7 @@
85.05112877980659
],
"properties": {
- "minzoom": 12
+ "minzoom": 13
},
"advanced": {}
},
@@ -587,7 +587,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
+ "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -821,7 +821,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
+ "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -873,7 +873,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
+ "table": "(SELECT\n way,\n (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse,\n foot,\n bicycle,\n tracktype,\n int_surface,\n access,\n construction,\n service,\n oneway,\n link,\n layernotnull\n FROM ( -- begin \"features\" subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, -- only m [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -951,7 +951,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n COALESCE(\n ('highway_' || (CASE WHEN substr(highway, length(highway)-3, 4) = 'link' THEN substr(highway, 0, length(highway)-4) ELSE highway end)),\n ('railway_' || (CASE WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' \n WHEN railway IN ('rail', 'tram', 'light_rail', 'funicular', 'narrow_gauge') THEN railway ELSE NULL END))\n ) AS feature,\n CASE WHEN tunnel = [...]
+ "table": "(SELECT\n way,\n COALESCE(\n ('highway_' || (CASE WHEN substr(highway, length(highway)-3, 4) = 'link' THEN substr(highway, 0, length(highway)-4) ELSE highway end)),\n ('railway_' || (CASE WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' \n WHEN railway IN ('rail', 'tram', 'light_rail', 'funicular', 'narrow_gauge') THEN railway ELSE NULL END))\n ) AS feature,\n CASE WHEN tunnel = [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1004,7 +1004,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
+ "table": "(SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,\n horse, foot, bicycle, tracktype, int_surface, access, construction,\n service, oneway, link, layernotnull\n FROM ( -- subselect that contains both roads and rail/aero\n SELECT\n way,\n ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on\n horse,\n [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1031,7 +1031,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way\n FROM planet_osm_line\n WHERE highway = 'bus_guideway' AND (tunnel IS NULL OR tunnel != 'yes')\n) AS guideways",
+ "table": "(SELECT\n way\n FROM planet_osm_line\n WHERE highway = 'bus_guideway'\n) AS guideways",
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1266,7 +1266,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels,\n name,\n ref,\n admin_level\n FROM planet_osm_polygon\n WHERE boundary = 'administrative'\n AND admin_level IN ('2', '4')\n AND name IS NOT NULL\n ORDER BY admin_level ASC, way_area DESC\n) AS placenames_large",
+ "table": "(SELECT\n way,\n way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels,\n name,\n ref,\n admin_level\n FROM planet_osm_polygon\n WHERE boundary = 'administrative'\n AND admin_level IN ('2', '4')\n AND name IS NOT NULL\n AND way_area > 750*!pixel_width!::real*!pixel_height!::real -- only labels for larger areas are displayed\n ORDER BY admin_level ASC, way_area DESC\n) AS placenames_large",
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1292,7 +1292,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n name,\n score,\n CASE\n WHEN (place = 'city' OR (capital = 'yes' AND score >= 100000)) THEN 1\n ELSE 2\n END as category\n FROM \n (SELECT\n way,\n place,\n name,\n capital,\n (\n (CASE\n WHEN (population ~ '^[0-9]{1,8}$') THEN population::INTEGER\n WHEN (place = 'city') THEN 100000\n WHEN (place = 'town') THEN 1000\n ELSE 1\n EN [...]
+ "table": "(SELECT\n way,\n name,\n score,\n CASE\n WHEN (place = 'city' OR (capital = 'yes' AND score >= 100000)) THEN 1\n ELSE 2\n END as category\n FROM \n (SELECT\n way,\n place,\n name,\n capital,\n (\n (CASE\n WHEN (population ~ '^[0-9]{1,8}$') THEN population::INTEGER\n WHEN (place = 'city') THEN 100000\n WHEN (place = 'town') THEN 1000\n ELSE 1\n EN [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1306,7 +1306,7 @@
],
"properties": {
"maxzoom": 15,
- "minzoom": 3
+ "minzoom": 4
},
"advanced": {}
},
@@ -1319,7 +1319,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n place,\n name\n FROM planet_osm_point\n WHERE place IN ('suburb', 'village', 'hamlet', 'neighbourhood', 'locality', 'isolated_dwelling', 'farm')\n AND name IS NOT NULL\n ORDER BY CASE\n WHEN place = 'suburb' THEN 3\n WHEN place = 'village' THEN 4\n WHEN place = 'hamlet' THEN 5\n WHEN place = 'neighbourhood' THEN 6\n WHEN place = 'locality' THEN 7\n WHEN place = 'isolated_dwelling' THEN 8\n WHEN place = ' [...]
+ "table": "(SELECT\n way,\n place,\n name\n FROM planet_osm_point\n WHERE place IN ('suburb', 'village', 'hamlet', 'neighbourhood', 'locality', 'isolated_dwelling', 'farm')\n AND name IS NOT NULL\n ORDER BY CASE\n WHEN place = 'suburb' THEN 3\n WHEN place = 'village' THEN 4\n WHEN place = 'hamlet' THEN 5\n WHEN place = 'neighbourhood' THEN 6\n WHEN place = 'locality' THEN 7\n WHEN place = 'isolated_dwelling' THEN 8\n WHEN place = ' [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1397,7 +1397,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'camp_site', 'caravan_site', 'chalet', 'guest_house', \n 'hostel', 'hotel', 'motel', 'information', 'museum', 'picnic_site') THEN tourism ELSE NULL END,\n 'amenity_' || CASE WHEN amenity IN ('shelter', 'atm', 'bank', 'bar', 'bicycle_rental', ' [...]
+ "table": "(SELECT\n way,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'camp_site', 'caravan_site', 'chalet', 'guest_house', \n 'hostel', 'hotel', 'motel', 'information', 'museum', 'picnic_site') THEN tourism ELSE NULL END,\n 'amenity_' || CASE WHEN amenity IN ('shelter', 'atm', 'bank', 'bar', 'bicycle_rental', ' [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1423,7 +1423,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'camp_site', 'caravan_site', 'chalet', 'guest_house', 'hostel', \n 'hotel', 'motel', 'information', 'museum', 'picnic_site') THEN tourism ELSE NULL END,\n 'amenity_' || CASE WHEN amenity IN ('shelter', 'atm', 'bank', 'bar', 'bicycle_rental', ' [...]
+ "table": "(SELECT\n way,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'camp_site', 'caravan_site', 'chalet', 'guest_house', 'hostel', \n 'hotel', 'motel', 'information', 'museum', 'picnic_site') THEN tourism ELSE NULL END,\n 'amenity_' || CASE WHEN amenity IN ('shelter', 'atm', 'bank', 'bar', 'bicycle_rental', ' [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1711,7 +1711,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('gate', 'apron', 'helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'hotel', 'motel', 'hostel', 'chalet', 'guest_house', 'camp_site', 'caravan_site', \n 'theme_park', 'museum', 'zoo', 'information', 'picnic_site') THEN [...]
+ "table": "(SELECT\n way,\n way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels,\n COALESCE(\n 'aeroway_' || CASE WHEN aeroway IN ('gate', 'apron', 'helipad', 'aerodrome') THEN aeroway ELSE NULL END,\n 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'hotel', 'motel', 'hostel', 'chalet', 'guest_house', 'camp_site', 'caravan_site', \n 'theme_park', 'museum', 'zoo', 'information', 'picnic_site') THEN [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1763,7 +1763,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n way_pixels,\n feature,\n access,\n CONCAT(\n name,\n CASE WHEN name IS NOT NULL AND elevation IS NOT NULL THEN E'\\n' ELSE NULL END,\n CASE WHEN elevation IS NOT NULL THEN CONCAT(REPLACE(ROUND(elevation)::TEXT, '-', U&'\\2212'), U&'\\00A0', 'm') ELSE NULL END\n ) AS name,\n CASE\n WHEN \"natural\" IN ('peak', 'volcano', 'saddle') THEN elevation\n ELSE NULL\n END AS score,\n operator,\n ref,\n [...]
+ "table": "(SELECT\n way,\n way_pixels,\n feature,\n access,\n CONCAT(\n name,\n CASE WHEN name IS NOT NULL AND elevation IS NOT NULL THEN E'\\n' ELSE NULL END,\n CASE WHEN elevation IS NOT NULL THEN CONCAT(REPLACE(ROUND(elevation)::TEXT, '-', U&'\\2212'), U&'\\00A0', 'm') ELSE NULL END\n ) AS name,\n CASE\n WHEN \"natural\" IN ('peak', 'volcano', 'saddle') THEN elevation\n ELSE NULL\n END AS score,\n operator,\n ref,\n [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -1997,7 +1997,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n amenity,\n railway,\n highway,\n barrier,\n man_made,\n historic,\n access,\n name,\n CASE WHEN amenity='waste_basket' THEN 2 ELSE 1 END AS prio\n FROM planet_osm_point p\n WHERE barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')\n OR highway IN ('mini_roundabout')\n OR railway = 'level_crossing'\n OR amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking', 'bench', 'waste_basket')\n [...]
+ "table": "(SELECT\n way,\n COALESCE(\n 'highway_' || CASE WHEN highway IN ('mini_roundabout') THEN highway ELSE NULL END,\n 'railway_' || CASE WHEN railway IN ('level_crossing') THEN railway ELSE NULL END,\n 'amenity_' || CASE WHEN amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking', 'bench', 'waste_basket') THEN amenity ELSE NULL END,\n 'historic_' || CASE WHEN historic IN ('wayside_cross') THEN historic ELSE NULL END,\n 'man_made_' || C [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -2023,7 +2023,7 @@
"srs": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over",
"Datasource": {
"extent": "-20037508,-20037508,20037508,20037508",
- "table": "(SELECT\n way,\n amenity,\n railway,\n highway,\n barrier,\n man_made,\n historic,\n access,\n name\n FROM planet_osm_polygon\n WHERE barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')\n OR highway IN ('mini_roundabout')\n OR railway = 'level_crossing'\n OR amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking')\n ) AS amenity_low_priority_poly",
+ "table": "(SELECT\n way,\n COALESCE(\n 'amenity_' || CASE WHEN amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking') THEN amenity ELSE NULL END,\n 'barrier_' || CASE WHEN barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block') THEN barrier ELSE NULL END\n ) AS feature,\n access\n FROM planet_osm_polygon p\n WHERE amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking')\n OR barrier IN ('bollard', 'gate', 'lift_gate', 'swing [...]
"geometry_field": "way",
"type": "postgis",
"key_field": "",
@@ -2106,5 +2106,5 @@
],
"minzoom": 0,
"maxzoom": 22,
- "description": "A faithful reimplementation of the standard OpenStreetMap style"
+ "description": "A general-purpose OpenStreetMap mapnik style, in CartoCSS"
}
\ No newline at end of file
diff --git a/project.yaml b/project.yaml
index d4f8984..efbcaea 100644
--- a/project.yaml
+++ b/project.yaml
@@ -1,7 +1,7 @@
scale: 1
metatile: 2
name: "OpenStreetMap Carto"
-description: "A faithful reimplementation of the standard OpenStreetMap style"
+description: "A general-purpose OpenStreetMap mapnik style, in CartoCSS"
bounds: &world
- -180
- -85.05112877980659
@@ -278,7 +278,7 @@ Layer:
table: |-
(SELECT
way, surface,
- COALESCE("natural", CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END) AS "natural",
+ COALESCE(CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END, "natural") AS "natural",
CASE WHEN "natural" IN ('marsh', 'mud')
THEN "natural"
ELSE CASE WHEN ("natural" = 'wetland' AND wetland IS NULL)
@@ -460,7 +460,7 @@ Layer:
ORDER BY z_order, way_area DESC
) AS buildings
properties:
- minzoom: 12
+ minzoom: 13
advanced: {}
- id: "buildings-major"
name: "buildings-major"
@@ -483,7 +483,7 @@ Layer:
ORDER BY z_order, way_area DESC)
AS buildings_major
properties:
- minzoom: 12
+ minzoom: 13
advanced: {}
- id: "tunnels"
name: "tunnels"
@@ -508,11 +508,12 @@ Layer:
foot,
bicycle,
tracktype,
- CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass',
- 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved' ELSE
- CASE WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
- 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
- ELSE null END END AS int_surface,
+ CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
+ 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved'
+ WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
+ 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
+ ELSE NULL
+ END AS int_surface,
CASE WHEN access IN ('destination') THEN 'destination'::text
WHEN access IN ('no', 'private') THEN 'no'::text
ELSE NULL
@@ -792,11 +793,12 @@ Layer:
foot,
bicycle,
tracktype,
- CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass',
- 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved' ELSE
- CASE WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
- 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
- ELSE null END END AS int_surface,
+ CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
+ 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved'
+ WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
+ 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
+ ELSE NULL
+ END AS int_surface,
CASE WHEN access IN ('destination') THEN 'destination'::text
WHEN access IN ('no', 'private') THEN 'no'::text
ELSE NULL
@@ -938,23 +940,40 @@ Layer:
<<: *extents
Datasource:
<<: *osm2pgsql
+ # This is one of the most complex layers, so it bears explaining in some detail
+ # It is necessary to
+ # - Have roads and railways in the same layer to get ordering right
+ # - Return two linestrings for ways which are both a road and railway
+ # - Compute z_order here, rather than rely on osm2pgsql z_order
table: |-
- (SELECT way, (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
- horse, foot, bicycle, tracktype, int_surface, access, construction,
- service, oneway, link, layernotnull
- FROM ( -- subselect that contains both roads and rail/aero
+ (SELECT
+ way,
+ (CASE WHEN substr(feature, length(feature)-3, 4) = 'link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
+ horse,
+ foot,
+ bicycle,
+ tracktype,
+ int_surface,
+ access,
+ construction,
+ service,
+ oneway,
+ link,
+ layernotnull
+ FROM ( -- begin "features" subselect that contains both roads and rail/aero
SELECT
way,
- ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on
+ ('highway_' || highway) AS feature, -- only motorway to tertiary links are accepted later on
horse,
foot,
bicycle,
tracktype,
- CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
- 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved' ELSE
- CASE WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
- 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
- ELSE null END END AS int_surface,
+ CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
+ 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved'
+ WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
+ 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
+ ELSE NULL
+ END AS int_surface,
CASE WHEN access IN ('destination') THEN 'destination'::text
WHEN access IN ('no', 'private') THEN 'no'::text
ELSE NULL
@@ -992,7 +1011,7 @@ Layer:
foot,
bicycle,
tracktype,
- 'null',
+ 'null' AS surface, -- Should be a SQL NULL?
CASE
WHEN access IN ('destination') THEN 'destination'::text
WHEN access IN ('no', 'private') THEN 'no'::text
@@ -1129,11 +1148,12 @@ Layer:
) AS feature,
CASE WHEN tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes' THEN 'yes' ELSE 'no' END AS int_tunnel,
CASE WHEN substr(highway, length(highway)-3, 4) = 'link' THEN 'yes' ELSE 'no' END AS link,
- CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
- 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved' ELSE
- CASE WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
- 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
- ELSE null END END AS int_surface
+ CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
+ 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved'
+ WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
+ 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
+ ELSE NULL
+ END AS int_surface
FROM planet_osm_roads
WHERE highway IS NOT NULL
OR (railway IS NOT NULL AND railway != 'preserved'
@@ -1186,11 +1206,12 @@ Layer:
foot,
bicycle,
tracktype,
- CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel',
- 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved' ELSE
- CASE WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete',
- 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
- ELSE null END END AS int_surface,
+ CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground',
+ 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay') THEN 'unpaved'
+ WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
+ 'concrete:plates', 'paving_stones', 'metal', 'wood') THEN 'paved'
+ ELSE NULL
+ END AS int_surface,
CASE WHEN access IN ('destination') THEN 'destination'::text
WHEN access IN ('no', 'private') THEN 'no'::text
ELSE NULL
@@ -1308,7 +1329,7 @@ Layer:
(SELECT
way
FROM planet_osm_line
- WHERE highway = 'bus_guideway' AND (tunnel IS NULL OR tunnel != 'yes')
+ WHERE highway = 'bus_guideway'
) AS guideways
properties:
minzoom: 13
@@ -1486,6 +1507,7 @@ Layer:
WHERE boundary = 'administrative'
AND admin_level IN ('2', '4')
AND name IS NOT NULL
+ AND way_area > 750*!pixel_width!::real*!pixel_height!::real -- only labels for larger areas are displayed
ORDER BY admin_level ASC, way_area DESC
) AS placenames_large
properties:
@@ -1529,11 +1551,12 @@ Layer:
) AS score
FROM planet_osm_point
WHERE place IN ('city', 'town')
+ AND name IS NOT NULL
) as p
- ORDER BY score DESC
+ ORDER BY score DESC, length(name) DESC, name
) AS placenames_medium
properties:
- minzoom: 3
+ minzoom: 4
maxzoom: 15
advanced: {}
- id: "placenames-small"
@@ -1559,7 +1582,7 @@ Layer:
WHEN place = 'locality' THEN 7
WHEN place = 'isolated_dwelling' THEN 8
WHEN place = 'farm' THEN 9
- END ASC
+ END ASC, length(name) DESC, name
) AS placenames_small
properties:
minzoom: 12
@@ -1633,7 +1656,7 @@ Layer:
'fast_food', 'telephone', 'emergency_phone', 'taxi', 'theatre', 'toilets', 'drinking_water',
'prison', 'hunting_stand', 'nightclub', 'veterinary', 'social_facility') THEN amenity ELSE NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag', 'bakery', 'beauty', 'books', 'butcher', 'clothes', 'computer',
- 'confectionery', 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'florist',
+ 'confectionery', 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'fishmonger', 'florist',
'garden_centre', 'hairdresser', 'hifi', 'ice_cream', 'car', 'car_repair', 'bicycle', 'mall', 'pet',
'photo', 'photo_studio', 'photography', 'seafood', 'shoes', 'alcohol', 'gift', 'furniture', 'kiosk',
'mobile_phone', 'motorcycle', 'musical_instrument', 'newsagent', 'optician', 'jewelry', 'jewellery',
@@ -1714,7 +1737,7 @@ Layer:
'fast_food', 'telephone', 'emergency_phone', 'taxi', 'theatre', 'toilets', 'drinking_water',
'prison', 'hunting_stand', 'nightclub', 'veterinary', 'social_facility') THEN amenity ELSE NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag', 'bakery', 'beauty', 'books', 'butcher', 'clothes', 'computer', 'confectionery',
- 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'florist', 'garden_centre',
+ 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'fishmonger', 'florist', 'garden_centre',
'hairdresser', 'hifi', 'ice_cream', 'car', 'car_repair', 'bicycle', 'mall', 'pet', 'photo', 'photo_studio',
'photography', 'seafood', 'shoes', 'alcohol', 'gift', 'furniture', 'kiosk', 'mobile_phone', 'motorcycle',
'musical_instrument', 'newsagent', 'optician', 'jewelry', 'jewellery', 'electronics', 'chemist', 'toys',
@@ -2031,7 +2054,7 @@ Layer:
'recycling', 'telephone', 'emergency_phone', 'toilets', 'taxi', 'drinking_water', 'hunting_stand',
'nightclub', 'veterinary', 'social_facility') THEN amenity ELSE NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag', 'bakery', 'beauty', 'books', 'butcher', 'clothes', 'computer', 'confectionery',
- 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'florist', 'garden_centre',
+ 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'fishmonger', 'florist', 'garden_centre',
'hairdresser', 'hifi', 'ice_cream', 'car', 'car_repair', 'bicycle', 'mall', 'pet', 'photo', 'photo_studio',
'photography', 'seafood', 'shoes', 'alcohol', 'gift', 'furniture', 'kiosk', 'mobile_phone', 'motorcycle',
'musical_instrument', 'newsagent', 'optician', 'jewelry', 'jewellery', 'electronics', 'chemist', 'toys',
@@ -2067,7 +2090,7 @@ Layer:
'highway_' || CASE WHEN highway IN ('services', 'rest_area', 'bus_stop', 'elevator', 'ford') THEN highway ELSE NULL END,
'boundary_' || CASE WHEN boundary IN ('national_park') THEN boundary ELSE NULL END,
'waterway_' || CASE WHEN waterway IN ('dam') THEN waterway ELSE NULL END,
- 'tourism_' || CASE WHEN tourism IN ('attraction') THEN tourism ELSE NULL END
+ 'tourism_' || CASE WHEN tourism IN ('viewpoint', 'attraction') THEN tourism ELSE NULL END
) AS feature,
access,
name,
@@ -2079,7 +2102,7 @@ Layer:
-- The upcoming where clause is needed for performance only, as the CASE statements would end up doing the equivalent filtering
WHERE (aeroway IN ('gate', 'apron', 'helipad', 'aerodrome')
OR tourism IN ('alpine_hut', 'hotel', 'motel', 'hostel', 'chalet', 'guest_house', 'camp_site', 'caravan_site', 'theme_park',
- 'museum', 'attraction', 'zoo', 'information', 'picnic_site')
+ 'museum', 'viewpoint', 'attraction', 'zoo', 'information', 'picnic_site')
OR amenity IS NOT NULL -- skip checking a huge list and use a null check
OR shop IS NOT NULL
OR leisure IS NOT NULL
@@ -2170,7 +2193,7 @@ Layer:
'car_wash', 'post_box', 'post_office', 'recycling', 'telephone', 'emergency_phone', 'toilets', 'taxi',
'drinking_water', 'hunting_stand', 'nightclub', 'veterinary', 'social_facility') THEN amenity ELSE NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag','bakery', 'beauty', 'books', 'butcher', 'clothes', 'computer', 'confectionery', 'fashion',
- 'convenience', 'department_store', 'doityourself', 'hardware', 'florist', 'garden_centre', 'hairdresser',
+ 'convenience', 'department_store', 'doityourself', 'hardware', 'fishmonger', 'florist', 'garden_centre', 'hairdresser',
'hifi', 'ice_cream', 'car', 'car_repair', 'bicycle', 'mall', 'pet', 'photo', 'photo_studio', 'photography',
'seafood', 'shoes', 'alcohol', 'gift', 'furniture', 'kiosk', 'mobile_phone', 'motorcycle', 'musical_instrument',
'newsagent', 'optician', 'jewelry', 'jewellery', 'electronics', 'chemist', 'toys', 'travel_agency', 'car_parts',
@@ -2208,7 +2231,7 @@ Layer:
'highway_' || CASE WHEN highway IN ('services', 'rest_area', 'bus_stop', 'elevator', 'ford') THEN highway ELSE NULL END,
'boundary_' || CASE WHEN boundary IN ('national_park') THEN boundary ELSE NULL END,
'waterway_' || CASE WHEN waterway IN ('dam', 'weir') THEN waterway ELSE NULL END,
- 'tourism_' || CASE WHEN tourism IN ('attraction', 'viewpoint') THEN tourism ELSE NULL END,
+ 'tourism_' || CASE WHEN tourism IN ('viewpoint', 'attraction') THEN tourism ELSE NULL END,
'man_made_' || CASE WHEN man_made IN ('cross') THEN man_made ELSE NULL END,
'historic_' || CASE WHEN historic IN ('wayside_cross') THEN historic ELSE NULL END
) AS feature,
@@ -2231,7 +2254,7 @@ Layer:
-- The upcoming where clause is needed for performance only, as the CASE statements would end up doing the equivalent filtering
WHERE (aeroway IN ('gate', 'apron', 'helipad', 'aerodrome')
OR tourism IN ('alpine_hut', 'hotel', 'motel', 'hostel', 'chalet', 'guest_house', 'camp_site', 'caravan_site', 'theme_park',
- 'museum', 'attraction', 'zoo', 'information', 'viewpoint', 'picnic_site')
+ 'museum', 'viewpoint', 'attraction', 'zoo', 'information', 'picnic_site')
OR amenity IS NOT NULL -- skip checking a huge list and use a null check
OR shop IS NOT NULL
OR leisure IS NOT NULL
@@ -2436,22 +2459,23 @@ Layer:
table: |-
(SELECT
way,
- amenity,
- railway,
- highway,
- barrier,
- man_made,
- historic,
+ COALESCE(
+ 'highway_' || CASE WHEN highway IN ('mini_roundabout') THEN highway ELSE NULL END,
+ 'railway_' || CASE WHEN railway IN ('level_crossing') THEN railway ELSE NULL END,
+ 'amenity_' || CASE WHEN amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking', 'bench', 'waste_basket') THEN amenity ELSE NULL END,
+ 'historic_' || CASE WHEN historic IN ('wayside_cross') THEN historic ELSE NULL END,
+ 'man_made_' || CASE WHEN man_made IN ('cross') THEN man_made ELSE NULL END,
+ 'barrier_' || CASE WHEN barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block') THEN barrier ELSE NULL END
+ ) AS feature,
access,
- name,
CASE WHEN amenity='waste_basket' THEN 2 ELSE 1 END AS prio
FROM planet_osm_point p
- WHERE barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')
- OR highway IN ('mini_roundabout')
- OR railway = 'level_crossing'
+ WHERE highway IN ('mini_roundabout')
+ OR railway IN ('level_crossing')
OR amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking', 'bench', 'waste_basket')
- OR historic = 'wayside_cross'
- OR man_made = 'cross'
+ OR historic IN ('wayside_cross')
+ OR man_made IN ('cross')
+ OR barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')
ORDER BY prio
) AS amenity_low_priority
properties:
@@ -2467,19 +2491,14 @@ Layer:
table: |-
(SELECT
way,
- amenity,
- railway,
- highway,
- barrier,
- man_made,
- historic,
- access,
- name
- FROM planet_osm_polygon
- WHERE barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')
- OR highway IN ('mini_roundabout')
- OR railway = 'level_crossing'
- OR amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking')
+ COALESCE(
+ 'amenity_' || CASE WHEN amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking') THEN amenity ELSE NULL END,
+ 'barrier_' || CASE WHEN barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block') THEN barrier ELSE NULL END
+ ) AS feature,
+ access
+ FROM planet_osm_polygon p
+ WHERE amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking')
+ OR barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block')
) AS amenity_low_priority_poly
properties:
minzoom: 14
diff --git a/roads.mss b/roads.mss
index 87a40f1..96af10e 100644
--- a/roads.mss
+++ b/roads.mss
@@ -709,6 +709,8 @@
}
}
[zoom >= 15] {
+ line-color: @bridge-casing;
+ line-join: round;
line-width: @track-width-z15 + 2 * (@paths-background-width + @paths-bridge-casing-width);
[tracktype = 'grade1'] {
line-width: @track-grade1-width-z15 + 2 * (@paths-background-width + @paths-bridge-casing-width);
@@ -958,6 +960,8 @@
}
}
[zoom >= 15] {
+ line-color: @track-casing;
+ line-join: round;
line-width: @track-width-z15 + 2 * @paths-background-width;
[tracktype = 'grade1'] {
line-width: @track-grade1-width-z15 + 2 * @paths-background-width;
@@ -1823,14 +1827,14 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
light/line-color: white;
light/line-join: round;
[feature = 'railway_rail'] {
- dark/line-color: #787878;
+ dark/line-color: #707070;
dark/line-width: 3;
light/line-width: 1;
light/line-dasharray: 8,8;
[zoom >= 15] {
light/line-dasharray: 0,8,8,1;
}
- [zoom >= 19] {
+ [zoom >= 18] {
dark/line-width: 4;
light/line-width: 2;
}
@@ -1840,6 +1844,10 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
dark/line-color: #aaa;
light/line-width: 0.8;
light/line-dasharray: 0,8,8,1;
+ [zoom >= 18] {
+ dark/line-width: 3;
+ light/line-width: 1;
+ }
}
}
.tunnels-fill {
@@ -1851,8 +1859,11 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
line-color: #aaa;
line-width: 1.9;
line-dasharray: 3,3;
+ [zoom >= 18] {
+ line-width: 2.7;
+ }
}
- [feature = 'railway_rail'][zoom >= 19] {
+ [feature = 'railway_rail'][zoom >= 18] {
line-dasharray: 8,6;
line-width: 3.8;
}
@@ -2060,107 +2071,108 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
#turning-circle-casing {
[int_tc_type = 'tertiary'][zoom >= 15] {
marker-fill: @tertiary-casing;
- marker-width: (@tertiary-width-z15 - 2 * @casing-width-z15) * 1.8 + 2 * @casing-width-z15;
- marker-height: (@tertiary-width-z15 - 2 * @casing-width-z15) * 1.8 + 2 * @casing-width-z15;
+ marker-width: @tertiary-width-z15 * 1.6 + 2 * @casing-width-z15;
+ marker-height: @tertiary-width-z15 * 1.6 + 2 * @casing-width-z15;
[zoom >= 16] {
- marker-width: (@tertiary-width-z16 - 2 * @casing-width-z16) * 1.8 + 2 * @casing-width-z16;
- marker-height: (@tertiary-width-z16 - 2 * @casing-width-z16) * 1.8 + 2 * @casing-width-z16;
+ marker-width: @tertiary-width-z16 * 1.6 + 2 * @casing-width-z16;
+ marker-height: @tertiary-width-z16 * 1.6 + 2 * @casing-width-z16;
}
[zoom >= 17] {
- marker-width: (@tertiary-width-z17 - 2 * @casing-width-z17) * 1.8 + 2 * @casing-width-z17;
- marker-height: (@tertiary-width-z17 - 2 * @casing-width-z17) * 1.8 + 2 * @casing-width-z17;
+ marker-width: @tertiary-width-z17 * 1.6 + 2 * @casing-width-z17;
+ marker-height: @tertiary-width-z17 * 1.6 + 2 * @casing-width-z17;
}
[zoom >= 18] {
- marker-width: (@tertiary-width-z18 - 2 * @casing-width-z18) * 1.8 + 2 * @casing-width-z18;
- marker-height: (@tertiary-width-z18 - 2 * @casing-width-z18) * 1.8 + 2 * @casing-width-z18;
+ marker-width: @tertiary-width-z18 * 1.6 + 2 * @casing-width-z18;
+ marker-height: @tertiary-width-z18 * 1.6 + 2 * @casing-width-z18;
}
[zoom >= 19] {
- marker-width: (@tertiary-width-z19 - 2 * @casing-width-z19) * 1.8 + 2 * @casing-width-z19;
- marker-height: (@tertiary-width-z19 - 2 * @casing-width-z19) * 1.8 + 2 * @casing-width-z19;
+ marker-width: @tertiary-width-z19 * 1.6 + 2 * @casing-width-z19;
+ marker-height: @tertiary-width-z19 * 1.6 + 2 * @casing-width-z19;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
marker-line-width: 0;
}
- [int_tc_type = 'residential'],
- [int_tc_type = 'unclassified'] {
- [zoom >= 15] {
- marker-fill: @residential-casing;
- marker-width: (@residential-width-z15 - 2 * @casing-width-z15) * 1.8 + 2 * @casing-width-z15;
- marker-height: (@residential-width-z15 - 2 * @casing-width-z15) * 1.8 + 2 * @casing-width-z15;
- [zoom >= 16] {
- marker-width: (@residential-width-z16 - 2 * @casing-width-z16) * 1.8 + 2 * @casing-width-z16;
- marker-height: (@residential-width-z16 - 2 * @casing-width-z16) * 1.8 + 2 * @casing-width-z16;
- }
- [zoom >= 17] {
- marker-width: (@residential-width-z17 - 2 * @casing-width-z17) * 1.8 + 2 * @casing-width-z17;
- marker-height: (@residential-width-z17 - 2 * @casing-width-z17) * 1.8 + 2 * @casing-width-z17;
- }
- [zoom >= 18] {
- marker-width: (@residential-width-z18 - 2 * @casing-width-z18) * 1.8 + 2 * @casing-width-z18;
- marker-height: (@residential-width-z18 - 2 * @casing-width-z18) * 1.8 + 2 * @casing-width-z18;
- }
- [zoom >= 19] {
- marker-width: (@residential-width-z19 - 2 * @casing-width-z19) * 1.8 + 2 * @casing-width-z19;
- marker-height: (@residential-width-z19 - 2 * @casing-width-z19) * 1.8 + 2 * @casing-width-z19;
- }
- marker-allow-overlap: true;
- marker-ignore-placement: true;
- marker-line-width: 0;
+ [int_tc_type = 'residential'][zoom >= 15],
+ [int_tc_type = 'unclassified'][zoom >= 15] {
+ marker-fill: @residential-casing;
+ marker-width: @residential-width-z15 * 1.6 + 2 * @casing-width-z15;
+ marker-height: @residential-width-z15 * 1.6 + 2 * @casing-width-z15;
+ [zoom >= 16] {
+ marker-width: @residential-width-z16 * 1.6 + 2 * @casing-width-z16;
+ marker-height: @residential-width-z16 * 1.6 + 2 * @casing-width-z16;
}
+ [zoom >= 17] {
+ marker-width: @residential-width-z17 * 1.6 + 2 * @casing-width-z17;
+ marker-height: @residential-width-z17 * 1.6 + 2 * @casing-width-z17;
+ }
+ [zoom >= 18] {
+ marker-width: @residential-width-z18 * 1.6 + 2 * @casing-width-z18;
+ marker-height: @residential-width-z18 * 1.6 + 2 * @casing-width-z18;
+ }
+ [zoom >= 19] {
+ marker-width: @residential-width-z19 * 1.6 + 2 * @casing-width-z19;
+ marker-height: @residential-width-z19 * 1.6 + 2 * @casing-width-z19;
+ }
+ marker-allow-overlap: true;
+ marker-ignore-placement: true;
+ marker-line-width: 0;
}
[int_tc_type = 'living_street'][zoom >= 15] {
marker-fill: @living-street-casing;
- marker-width: 14;
- marker-height: 14;
+ marker-width: @living-street-width-z15 * 1.6 + 2 * @casing-width-z15;
+ marker-height: @living-street-width-z15 * 1.6 + 2 * @casing-width-z15;
[zoom >= 16] {
- marker-width: 18;
- marker-height: 18;
+ marker-width: @living-street-width-z16 * 1.6 + 2 * @casing-width-z16;
+ marker-height: @living-street-width-z16 * 1.6 + 2 * @casing-width-z16;
}
[zoom >= 17] {
- marker-width: 24;
- marker-height: 24;
+ marker-width: @living-street-width-z17 * 1.6 + 2 * @casing-width-z17;
+ marker-height: @living-street-width-z17 * 1.6 + 2 * @casing-width-z17;
}
[zoom >= 18] {
- marker-width: 27;
- marker-height: 27;
+ marker-width: @living-street-width-z18 * 1.6 + 2 * @casing-width-z18;
+ marker-height: @living-street-width-z18 * 1.6 + 2 * @casing-width-z18;
}
[zoom >= 19] {
- marker-width: 38;
- marker-height: 38;
+ marker-width: @living-street-width-z19 * 1.6 + 2 * @casing-width-z19;
+ marker-height: @living-street-width-z19 * 1.6 + 2 * @casing-width-z19;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
marker-line-width: 0;
}
- [int_tc_type = 'service'][zoom >= 16] {
+ [int_tc_type = 'service'][int_tc_service = 'INT-normal'][zoom >= 16] {
marker-fill: @service-casing;
- [int_tc_service = 'INT-normal'] {
- marker-width: 14;
- marker-height: 14;
- [zoom >= 17] {
- marker-width: 16;
- marker-height: 16;
- }
- [zoom >= 18] {
- marker-width: 20;
- marker-height: 20;
- }
- [zoom >= 19] {
- marker-width: 30;
- marker-height: 30;
- }
+ marker-width: @service-width-z16 * 1.6 + 2 * @casing-width-z16;
+ marker-height: @service-width-z16 * 1.6 + 2 * @casing-width-z16;
+ [zoom >= 17] {
+ marker-width: @service-width-z17 * 1.6 + 2 * @casing-width-z17;
+ marker-height: @service-width-z17 * 1.6 + 2 * @casing-width-z17;
}
- [int_tc_service = 'INT-minor'] {
- marker-width: 12;
- marker-height: 12;
- [zoom >= 19] {
- marker-width: 16;
- marker-height: 16;
- }
+ [zoom >= 18] {
+ marker-width: @service-width-z18 * 1.6 + 2 * @casing-width-z18;
+ marker-height: @service-width-z18 * 1.6 + 2 * @casing-width-z18;
+ }
+ [zoom >= 19] {
+ marker-width: @service-width-z19 * 1.6 + 2 * @casing-width-z19;
+ marker-height: @service-width-z19 * 1.6 + 2 * @casing-width-z19;
+ }
+ marker-allow-overlap: true;
+ marker-ignore-placement: true;
+ marker-line-width: 0;
+ }
+
+ [int_tc_type = 'service'][int_tc_service = 'INT-minor'][zoom >= 18] {
+ marker-fill: @service-casing;
+ marker-width: @minor-service-width-z18 * 1.6 + 2 * @casing-width-z18;
+ marker-height: @minor-service-width-z18 * 1.6 + 2 * @casing-width-z18;
+ [zoom >= 19] {
+ marker-width: @minor-service-width-z19 * 1.6 + 2 * @casing-width-z19;
+ marker-height: @minor-service-width-z19 * 1.6 + 2 * @casing-width-z19;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
@@ -2171,19 +2183,23 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
#turning-circle-fill {
[int_tc_type = 'tertiary'][zoom >= 15] {
marker-fill: @tertiary-fill;
- marker-width: (@tertiary-width-z15 - 2 * @casing-width-z15) * 1.8;
- marker-height: (@tertiary-width-z15 - 2 * @casing-width-z15) * 1.8;
+ marker-width: @tertiary-width-z15 * 1.6;
+ marker-height: @tertiary-width-z15 * 1.6;
+ [zoom >= 16] {
+ marker-width: @tertiary-width-z16 * 1.6;
+ marker-height: @tertiary-width-z16 * 1.6;
+ }
[zoom >= 17] {
- marker-width: (@tertiary-width-z17 - 2 * @casing-width-z17) * 1.8;
- marker-height: (@tertiary-width-z17 - 2 * @casing-width-z17) * 1.8;
+ marker-width: @tertiary-width-z17 * 1.6;
+ marker-height: @tertiary-width-z17 * 1.6;
}
[zoom >= 18] {
- marker-width: (@tertiary-width-z18 - 2 * @casing-width-z18) * 1.8;
- marker-height: (@tertiary-width-z18 - 2 * @casing-width-z18) * 1.8;
+ marker-width: @tertiary-width-z18 * 1.6;
+ marker-height: @tertiary-width-z18 * 1.6;
}
[zoom >= 19] {
- marker-width: (@tertiary-width-z19 - 2 * @casing-width-z19) * 1.8;
- marker-height: (@tertiary-width-z19 - 2 * @casing-width-z19) * 1.8;
+ marker-width: @tertiary-width-z19 * 1.6;
+ marker-height: @tertiary-width-z19 * 1.6;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
@@ -2194,23 +2210,23 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
[int_tc_type = 'unclassified'] {
[zoom >= 15] {
marker-fill: @residential-fill;
- marker-width: (@residential-width-z15 - 2 * @casing-width-z15) * 1.8;
- marker-height: (@residential-width-z15 - 2 * @casing-width-z15) * 1.8;
+ marker-width: @residential-width-z15 * 1.6;
+ marker-height: @residential-width-z15 * 1.6;
[zoom >= 16] {
- marker-width: (@residential-width-z16 - 2 * @casing-width-z16) * 1.8;
- marker-height: (@residential-width-z16 - 2 * @casing-width-z16) * 1.8;
+ marker-width: @residential-width-z16 * 1.6;
+ marker-height: @residential-width-z16 * 1.6;
}
[zoom >= 17] {
- marker-width: (@residential-width-z17 - 2 * @casing-width-z17) * 1.8;
- marker-height: (@residential-width-z17 - 2 * @casing-width-z17) * 1.8;
+ marker-width: @residential-width-z17 * 1.6;
+ marker-height: @residential-width-z17 * 1.6;
}
[zoom >= 18] {
- marker-width: (@residential-width-z18 - 2 * @casing-width-z18) * 1.8;
- marker-height: (@residential-width-z18 - 2 * @casing-width-z18) * 1.8;
+ marker-width: @residential-width-z18 * 1.6;
+ marker-height: @residential-width-z18 * 1.6;
}
[zoom >= 19] {
- marker-width: (@residential-width-z19 - 2 * @casing-width-z19) * 1.8;
- marker-height: (@residential-width-z19 - 2 * @casing-width-z19) * 1.8;
+ marker-width: @residential-width-z19 * 1.6;
+ marker-height: @residential-width-z19 * 1.6;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
@@ -2220,54 +2236,57 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
[int_tc_type = 'living_street'][zoom >= 15] {
marker-fill: @living-street-fill;
- marker-width: 12;
- marker-height: 12;
+ marker-width: @living-street-width-z15 * 1.6;
+ marker-height: @living-street-width-z15 * 1.6;
[zoom >= 16] {
- marker-width: 16;
- marker-height: 16;
+ marker-width: @living-street-width-z16 * 1.6;
+ marker-height: @living-street-width-z16 * 1.6;
}
[zoom >= 17] {
- marker-width: 22;
- marker-height: 22;
+ marker-width: @living-street-width-z17 * 1.6;
+ marker-height: @living-street-width-z17 * 1.6;
}
[zoom >= 18] {
- marker-width: 25;
- marker-height: 25;
+ marker-width: @living-street-width-z18 * 1.6;
+ marker-height: @living-street-width-z18 * 1.6;
}
[zoom >= 19] {
- marker-width: 36;
- marker-height: 36;
+ marker-width: @living-street-width-z19 * 1.6;
+ marker-height: @living-street-width-z19 * 1.6;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
marker-line-width: 0;
}
- [int_tc_type = 'service'][zoom >= 16] {
+ [int_tc_type = 'service'][int_tc_service = 'INT-normal'][zoom >= 16] {
marker-fill: @service-fill;
- [int_tc_service = 'INT-normal'] {
- marker-width: 12;
- marker-height: 12;
- [zoom >= 17] {
- marker-width: 14;
- marker-height: 14;
- }
- [zoom >= 18] {
- marker-width: 18;
- marker-height: 18;
- }
- [zoom >= 19] {
- marker-width: 28;
- marker-height: 28;
- }
+ marker-width: @service-width-z16 * 1.6;
+ marker-height: @service-width-z16 * 1.6;
+ [zoom >= 17] {
+ marker-width: @service-width-z17 * 1.6;
+ marker-height: @service-width-z17 * 1.6;
}
- [int_tc_service = 'INT-minor'] {
- marker-width: 10;
- marker-height: 10;
- [zoom >= 19] {
- marker-width: 14;
- marker-height: 14;
- }
+ [zoom >= 18] {
+ marker-width: @service-width-z18 * 1.6;
+ marker-height: @service-width-z18 * 1.6;
+ }
+ [zoom >= 19] {
+ marker-width: @service-width-z19 * 1.6;
+ marker-height: @service-width-z19 * 1.6;
+ }
+ marker-allow-overlap: true;
+ marker-ignore-placement: true;
+ marker-line-width: 0;
+ }
+
+ [int_tc_type = 'service'][int_tc_service = 'INT-minor'][zoom >= 18] {
+ marker-fill: @service-fill;
+ marker-width: @minor-service-width-z18 * 1.6;
+ marker-height: @minor-service-width-z18 * 1.6;
+ [zoom >= 19] {
+ marker-width: @minor-service-width-z19 * 1.6;
+ marker-height: @minor-service-width-z19 * 1.6;
}
marker-allow-overlap: true;
marker-ignore-placement: true;
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000..c2f6463
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,3 @@
+These scripts are necessary and useful solely during making changes to the map style.
+
+There are unnecessary for map rendering.
\ No newline at end of file
diff --git a/scripts/indexes.py b/scripts/indexes.py
new file mode 100755
index 0000000..a004313
--- /dev/null
+++ b/scripts/indexes.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+# This script takes a YAML file defining indexes and creates SQL statements
+# There are a number of options for concurrent index creation, recreating the
+# osm2pgsql-built indexes, fillfactors, and other settings to give full control
+# of the resulting statements
+# indexes.sql is created by this script, with the default options
+
+from __future__ import print_function
+import argparse, sys, os, yaml
+
+def index_statement(table, name, conditions=None, concurrent=False,notexist=False, fillfactor=None):
+ options = ' CONCURRENTLY' if concurrent else ''
+ options += ' IF NOT EXISTS' if notexist else ''
+ storage = '' if fillfactor is None else '\n WITH (fillfactor={})'.format(fillfactor)
+ where = '' if conditions is None else '\n WHERE {}'.format(conditions)
+ return ('CREATE INDEX{options} {table}_{name}\n' +
+ ' ON {table} USING GIST (way)' +
+ '{storage}' +
+ '{where};\n').format(table="planet_osm_"+table, name=name,
+ storage=storage, options=options, where=where)
+
+def parse(cb):
+ with open(os.path.join(os.path.dirname(__file__), '../indexes.yml')) as yaml_file:
+ indexes = yaml.safe_load(yaml_file)
+
+ for table, data in indexes.iteritems():
+ for name, definition in data.iteritems():
+ cb(table, name, definition["where"])
+
+# The same as parse, but for osm2pgsql-built indexes
+def osm2pgsql_parse(cb):
+ cb('point', 'index', None)
+ cb('line', 'index', None)
+ cb('polygon', 'index', None)
+ cb('roads', 'index', None)
+
+parser = argparse.ArgumentParser(description='Generates custom index statements')
+parser.add_argument('--concurrent', dest='concurrent', help='Generate indexes CONCURRENTLY', action='store_true', default=False)
+parser.add_argument('--fillfactor', help='Custom fillfactor to use')
+parser.add_argument('--notexist', help='Use IF NOT EXISTS (requires 9.5)', action='store_true', default=False)
+parser.add_argument('--osm2pgsql', help='Include indexes normally built by osm2pgsql', action='store_true', default=False)
+parser.add_argument('--reindex', help='Rebuild existing indexes', action='store_true', default=False)
+args = parser.parse_args()
+
+def cb (table, name, where):
+ print(index_statement(table, name, where, args.concurrent, args.notexist, args.fillfactor), end='')
+
+def reindex_cb(table, name, where):
+ if not args.concurrent:
+ print('REINDEX planet_osm_{table}_{name};'.format(table=table, name=name))
+ else:
+ # Rebuilding indexes concurently requires making a new index, dropping the old one, and renaming.
+ print('ALTER INDEX planet_osm_{table}_{name} RENAME TO planet_osm_{table}_{name}_old;'.format(table=table, name=name))
+ cb(table, name, where)
+ print('DROP INDEX planet_osm_{table}_{name}_old;\n'.format(table=table, name=name))
+
+print(('-- These are optional but suggested indexes for rendering OpenStreetMap Carto\n'+
+ '-- with a full planet database.\n'
+ '-- This file is generated with {}\n').format(' '.join(sys.argv)))
+
+if not args.reindex:
+ parse(cb)
+else:
+ parse(reindex_cb)
+
+if args.osm2pgsql:
+ print('\n-- These indexes are normally built by osm2pgsql')
+ if not args.reindex:
+ osm2pgsql_parse(cb)
+ else:
+ osm2pgsql_parse(reindex_cb)
diff --git a/scripts/shop_values.rb b/scripts/shop_values.rb
index 46f6c54..5dec9a8 100755
--- a/scripts/shop_values.rb
+++ b/scripts/shop_values.rb
@@ -1,4 +1,8 @@
#!/usr/bin/ruby
+
+#this script generates list of popular shop values - more than MIN_COUNT occurences in OpenStreetMap database according to taginfo
+#it is useful during creating/updating list of shops displayed with generic dot icon
+
require 'net/http'
require 'json'
require 'pp'
@@ -25,6 +29,8 @@ EXCEPTIONS = [
"gambling", #see https://github.com/gravitystorm/openstreetmap-carto/pull/1900
"insurance", #see https://github.com/gravitystorm/openstreetmap-carto/pull/1900
"pharmacy", #see https://github.com/gravitystorm/openstreetmap-carto/pull/1900
+ "street_vendor", #see https://github.com/gravitystorm/openstreetmap-carto/issues/2090
+ "storage_rental", #see https://github.com/gravitystorm/openstreetmap-carto/issues/2090
]
diff --git a/symbols/library.14.svg b/symbols/library.14.svg
new file mode 100644
index 0000000..dba9828
--- /dev/null
+++ b/symbols/library.14.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg2"
+ viewBox="0 0 16 16"
+ height="100%"
+ width="100%"
+ version="1.1">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <rect
+ width="16"
+ height="16"
+ x="0"
+ y="0"
+ id="rect4174"
+ style="visibility:hidden;fill:none;stroke:none" />
+ <path
+ id="path4176"
+ d="M 3.5917969,2.8769531 C 3.39328,2.8849528 3.1958998,2.9246486 3,3 l 0,8 c 0,0 3.1875,-0.125 4,3 L 7,5.5996094 C 6.38001,4.2940108 4.9814151,2.8209552 3.5917969,2.8769531 Z M 7,14 C 4.9375,12.40625 2,12 2,12 L 2,4.4003906 1,4 l 0,9 6,2 2,0 6,-2 0,-9 -1,0.4003906 0,8.0000004 L 9,14 C 8.333333,13.74532 7.556181,13.790637 7,14 Z M 13,3 C 11.00748,2.8934496 8.7073046,4.0896818 7.5,5.1191406 l 0,8.4648434 c 1.1147712,-0.924639 3.113583,-2.141273 5.5,-2.384765 z"
+ style="fill:#734a08;fill-opacity:1;stroke:none" />
+</svg>
diff --git a/symbols/library.p.20.png b/symbols/library.p.20.png
deleted file mode 100644
index b38c4d1..0000000
Binary files a/symbols/library.p.20.png and /dev/null differ
diff --git a/symbols/shop_books.16.svg b/symbols/shop_books.16.svg
deleted file mode 100644
index 3128c51..0000000
--- a/symbols/shop_books.16.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns="http://www.w3.org/2000/svg"
- version="1.1"
- width="100%"
- height="100%"
- viewBox="0 0 16 16">
- <path
- d="M 3,1 C 1.4915254,1 1,2 1,3 1.02381,4 1.5423729,5 3,5 L 13,5 12,4 3,4 C 2,4 2,3 2,3 2,3 2,2 3,2 L 12,2 13,1 3,1 z m 0,1.75 0,0.5 9,0 0,-0.5 -9,0 z M 5,6 C 3.4915254,6 3,7 3,8 3.02381,9 3.5423729,10 5,10 L 15,10 14,9 5,9 C 4,9 4,8 4,8 4,8 4,7 5,7 L 14,7 15,6 5,6 z m 0,1.75 0,0.5 9,0 0,-0.5 -9,0 z M 3,11 c -1.5084746,0 -2,1 -2,2 0.02381,1 0.5423729,2 2,2 l 10,0 -1,-1 -9,0 C 2,14 2,13 2,13 2,13 2,12 3,12 l 9,0 1,-1 -10,0 z m 0,1.75 0,0.5 9,0 0,-0.5 -9,0 z" />
-</svg>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/openstreetmap-carto.git
More information about the Pkg-grass-devel
mailing list