diff --git a/CARTOGRAPHY.md b/CARTOGRAPHY.md
index 68543ed2f2..98dccc444e 100644
--- a/CARTOGRAPHY.md
+++ b/CARTOGRAPHY.md
@@ -1,14 +1,14 @@
# Design goals and guidelines for this style
-This is an attempt to outline the goals of this style and the principles under
-which the maintainers make decisions. These rules are not set in stone, they
-can change and they may not be followed in all cases but contributors should
+This is an attempt to outline the goals of this style and the principles under
+which the maintainers make decisions. These rules are not set in stone, they
+can change and they may not be followed in all cases but contributors should
be able to expect that they are generally the guiding principles design wise.
-It does not make much sense to try following these principles blindly as a
-contributor without understanding them, they are meant to guide you to develop
-an intuition and understanding how to make design decisions to fit into the
+It does not make much sense to try following these principles blindly as a
+contributor without understanding them, they are meant to guide you to develop
+an intuition and understanding how to make design decisions to fit into the
overall concept of this style.
## General purpose
@@ -20,15 +20,15 @@ This style has multiple purposes:
* It's used in many map applications as a general purpose map.
* It's an exemplar stylesheet for rendering OSM data.
-There is no ranking of these purposes. To allow serving all of them and to
-avoid satisfying only some at the cost of the others the following main goals
+There is no ranking of these purposes. To allow serving all of them and to
+avoid satisfying only some at the cost of the others the following main goals
have been identified.
## Main goals
-The following goals need to be balanced against each other to serve the purposes
-above. There is no fixed order of priorities. Apart from these goals there are
-of course also technical constraints and requirements that need to be taken into
+The following goals need to be balanced against each other to serve the purposes
+above. There is no fixed order of priorities. Apart from these goals there are
+of course also technical constraints and requirements that need to be taken into
account.
* **Legibility and clarity** - The map should be intuitively readable by users with some general experience using maps without a map key, preferrably with relatively little effort. A map key or more extensive experience using this map style can be required for clearly identifying minor differences or the exact meaning of certain features but in broad strokes orientation and identification of map elements should be possible on an intuitive level. We also aim for the map appearance to be esthetically pleasing.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c7f7be705f..0ab73483dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,33 @@
-## [Unreleased](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.18.0...master)
+## [Unreleased](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.19.0...master)
+
+## [v4.19.0](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.18.0...v4.19.0) - 2019-01-18
+## Changes
+- Adding rendering for boundary=protected_area (#3509)
+- Nature reserve boundaries revision (#3574)
+- Adding support of amenity=vending_machine (#3601)
+- Adding more barrier icons (#3602)
+- Changing allotments color and adding outline (#3625)
+- Reducing priority of tourism=attraction and rendering from z17 (#3603)
+- Changing tourism outline color (#3582)
+- Making country borders thicker at z8 and z9 (#3563)
+- Rendering parking from z14 (#3612)
+- Starting to render most patterns at z13 instead of z14 (#3610)
+- Changing zoom level and text size for place=hamlet (#3626)
+- Rendering airport gate refs black instead of purple (#3620)
+- Updating zoom levels by height for masts, towers and telescopes (#3536)
+- Hiding underground parking (#3600)
+- Rendering ref of minor roads more than once (#3627)
+- Adjusting width of highway=construction (#3580)
+- Selecting only motorway_link to tertiary_link as link (#3567)
+- Reducing tertiary-link width (#3570)
+- Changing certain amenity icons to grey (#3586)
+- Converting springs to use ST_PointOnSurface and reformatting SQL (#3233)
+- Adding "religious-icon" as color variable for #000000 (#3642)
+- Adding "barrier-icon" color variable in #3f3f3f for barriers (#3643)
+- Fixing inconsistency of leisure=ice_rink (#3598)
+- Fixing label opacity for tourism features (#3616)
+- Reverting lowzoom nobuilding test change (#3622)
+- Removing trailing whitespace (#3637)
## [v4.18.0](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.17.0...v4.18.0) - 2018-12-21
## Changes
@@ -9,7 +38,7 @@
- Changing landuse=allotments color and pattern
- Adding rendering for natural=cape
- Rendering leisure=ice_rink
-- Adding rendering for man_made=crane
+- Adding rendering for man_made=crane
- Adding icons for shop=fabric and shop=carpet
- Updating icons for amenity=arts_centre, leisure=slipway, amenity=restaurant/amenity=food_court and man_made=storage_tank/man_made=silo
- Using dedicated icon for artwork_type=bust
@@ -100,13 +129,13 @@
- Increased shield distances on roads
- Added icon for shop=ticket
- Added icon for shop=houseware
-- Added icon for shop=charity
+- Added icon for shop=charity
- Added icon for shop=second_hand
- Added icon for shop=interior_decoration
- Added icon for amenity=bureau_de_change
- Added icon for amenity=casino
- Added icon for amenity=boat_rental
-- Updated shop=department_store icon
+- Updated shop=department_store icon
- Small documentation and code fixes
## [v4.12.1](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.12.0...v4.12.1) - 2018-06-29
@@ -119,7 +148,7 @@
### Changes
- Added rendering “surface” tag on roads with a pattern
-- More vertical objects rendering and tuning (man_made=tower types, man_made=chimney, man_made=communications_tower)
+- More vertical objects rendering and tuning (man_made=tower types, man_made=chimney, man_made=communications_tower)
- tourism=information types rendering and tuning (information=audioguide, board, guidepost, map, office, tactile_map, tactile_model and terminal)
- Added rendering for place=quarter
- Added rendering of historic=city_gate
@@ -225,7 +254,7 @@
### Changes
- Change sports_centre and stadium color to light green
- Change shades of green for landuse/leisure=recreation_ground and garden
-- Do not render glaciers and icesheets on z6 and z7
+- Do not render glaciers and icesheets on z6 and z7
- Do not render very small water areas on low zoom
- Do not render small national parks and nature reserves
- Do not render ferries on z7
@@ -243,9 +272,9 @@
- Changing parking color from yellow to gray
### Changes
-- Unified rendering of leisure=fitness_station and leisure=fitness_centre
+- Unified rendering of leisure=fitness_station and leisure=fitness_centre
- Rendering of military=bunker
-- Rendering all station buildings as major buildings
+- Rendering all station buildings as major buildings
- Text wrapping for station labels
- Changing windmill color from amenity brown to man_made gray
- Some other documentation and code changes
@@ -257,12 +286,12 @@
### Changes
- Rendering of amenity=marketplace
-- Rendering of landuse=religious
+- Rendering of landuse=religious
- Rendering shop=pastry like shop=confectionery
- Rendering of addr:unit
- Rendering natural=bare_rock earlier
- Rendering elevation also on polygon alpine_hut and shelter
-- Introducing Noto Sans Arabic
+- Introducing Noto Sans Arabic
- Rendering icon for slipway ways
- Better minimal distance between housenumbers
- Moving aeroways to their own layer
@@ -298,7 +327,7 @@
- Plaque rendering is now different and moved to z19
- Rendering railway labels
- Smaller line spaces in labels
-- Junction names on areas
+- Junction names on areas
- Area color for railway=station is the same as for railways
- Database perfomance tuning available for Docker
- Different patterns and all remaining icons moved to SVG
diff --git a/DOCKER.md b/DOCKER.md
index 075d36a47e..351b3b7379 100644
--- a/DOCKER.md
+++ b/DOCKER.md
@@ -40,7 +40,7 @@ Once you have that file put it into the openstreetmap-carto directory and run `d
This starts the PostgreSQL container (downloads it if it not exists) and starts a container that runs [osm2pgsql](https://github.com/openstreetmap/osm2pgsql) to import the data. The container is built the first time you run that command if it not exists.
At startup of the container the script `scripts/docker-startup.sh` is invoked which prepares the database and itself starts osm2pgsql for importing the data.
-osm2pgsql has a few [command line options](https://manpages.debian.org/testing/osm2pgsql/osm2pgsql.1.en.html) and the import by default uses a RAM cache of 512 MB, 1 worker and expects the import file to be named `data.osm.pbf`. If you want to customize any of these parameters you have to set the environment variables `OSM2PGSQL_CACHE` (e.g. `export OSM2PGSQL_CACHE=1024` on Linux to set the cache to 1 GB) for the RAM cache (the value depends on the amount of RAM you have available, the more you can use here the faster the import may be), `OSM2PGSQL_NUMPROC` for the number of workers (this depends on the number of processors you have and whether your harddisk is fast enough e.g. is a SSD), or `OSM2PGSQL_DATAFILE` if your file has a different name.
+osm2pgsql has a few [command line options](https://manpages.debian.org/testing/osm2pgsql/osm2pgsql.1.en.html) and the import by default uses a RAM cache of 512 MB, 1 worker and expects the import file to be named `data.osm.pbf`. If you want to customize any of these parameters you have to set the environment variables `OSM2PGSQL_CACHE` (e.g. `export OSM2PGSQL_CACHE=1024` on Linux to set the cache to 1 GB) for the RAM cache (the value depends on the amount of RAM you have available, the more you can use here the faster the import may be), `OSM2PGSQL_NUMPROC` for the number of workers (this depends on the number of processors you have and whether your harddisk is fast enough e.g. is a SSD), or `OSM2PGSQL_DATAFILE` if your file has a different name.
You can also [tune the PostgreSQL](https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server) during the import phases, with `PG_WORK_MEM` (default to 16MB) and `PG_MAINTENANCE_WORK_MEM` (default to 256MB), which will eventually write `work_mem` and `maintenance_work_mem` to the `postgresql.auto.conf` once, making them applied each time the database started. Note that unlike osm2pgsql variables, once thay are set, you can only change them by running `ALTER SYSTEM` on your own, changing `postgresql.auto.conf` or remove the database volume by `docker-compose down -v && docker-compose rm -v` and import again.
@@ -50,7 +50,7 @@ If you want to customize and remember the values, supply it during your first im
PG_WORK_MEM=128MB PG_MAINTENANCE_WORK_MEM=2GB \
OSM2PGSQL_CACHE=2048 OSM2PGSQL_NUMPROC=4 \
OSM2PGSQL_DATAFILE=taiwan.osm.pbf \
-docker-compose up import
+docker-compose up import
```
Variables will be remembered in `.env` if you don't have that file, and values in the file will be applied unless you manually assign them.
@@ -71,8 +71,8 @@ After startup is complete you can browse to [http://localhost:6789](http://local
Importing the data needs a substantial amount of RAM in the virtual machine. If you find the import process (Reading in file: data.osm.pbf, Processing) being _killed_ by the Docker demon, exiting with error code 137, increase the Memory assigned to Docker (e.g. macOS: Docker Preferences / Windows: Docker Settings > Advanced > Adjust the computing resources).
-Docker copies log files from the virtual machine into the host system, their [location depends on the host OS](https://stackoverflow.com/questions/30969435/where-is-the-docker-daemon-log). E.g. the 'console-ring' appears to be a ringbuffer of the console log, which can help to find reasons for killings.
+Docker copies log files from the virtual machine into the host system, their [location depends on the host OS](https://stackoverflow.com/questions/30969435/where-is-the-docker-daemon-log). E.g. the 'console-ring' appears to be a ringbuffer of the console log, which can help to find reasons for killings.
While installing software in the containers and populating the database, the disk image of the virtual machine grows in size, by Docker allocating more clusters. When the disk on the host system is full (only a few MB remaining), Docker can appear stuck. Watch the system log files of your host system for failed allocations.
-Docker stores its disk image by default in the home directories of the user. If you don't have enough space here, you can move it elsewhere. (E.g. macOS: Docker > Preferences > Disk).
+Docker stores its disk image by default in the home directories of the user. If you don't have enough space here, you can move it elsewhere. (E.g. macOS: Docker > Preferences > Disk).
diff --git a/Dockerfile b/Dockerfile
index 7eb830f702..61e1f579d5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,12 +10,12 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
# npm prefix to /usr/local, which breaks the install
RUN npm set prefix /usr && npm install -g kosmtik
-WORKDIR /usr/lib/node_modules/kosmtik/
+WORKDIR /usr/lib/node_modules/kosmtik/
RUN kosmtik plugins --install kosmtik-overpass-layer \
--install kosmtik-fetch-remote \
--install kosmtik-overlay \
--install kosmtik-open-in-josm \
- --install kosmtik-map-compare \
+ --install kosmtik-map-compare \
--install kosmtik-osm-data-overlay \
--install kosmtik-mapnik-reference \
--install kosmtik-geojson-overlay \
diff --git a/README.md b/README.md
index a5110d86e5..5fc367d28b 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ are updated from each point release. They supersede the previous [XML-based styl
# Installation
-You need a PostGIS database populated with OpenStreetMap data along with auxillary shapefiles.
+You need a PostGIS database populated with OpenStreetMap data along with auxillary shapefiles.
See [INSTALL.md](INSTALL.md).
# Contributing
@@ -66,7 +66,7 @@ these often make it easier to customise, experience has shown that over-cleverne
## Database schema change (v4.x)
The v4.x series includes [osm2pgsql lua transforms](https://github.com/openstreetmap/osm2pgsql/blob/master/docs/lua.md)
-and a hstore column with all other tags, allowing use of more OpenStreetMap data. Users need
+and a hstore column with all other tags, allowing use of more OpenStreetMap data. Users need
to reload their databases, v3.x compatibility is not maintained.
There are over [300 open requests][issues], some that have been open for years.
diff --git a/RELEASES.md b/RELEASES.md
index 73fe3ffadc..b3ce9b77f5 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -28,16 +28,16 @@ Decide among the maintainers if a new release is due.
Dear all,
Today, $NEW_VERSION of the OpenStreetMap Carto stylesheet (the default
-stylesheet on the OSM website) has been released. Once changes are deployed
-on the openstreetmap.org it will take couple of days before all tiles
+stylesheet on the OSM website) has been released. Once changes are deployed
+on the openstreetmap.org it will take couple of days before all tiles
show the new rendering.
If the tile server admins have rolled out the new version, change it to:
Today, $NEW_VERSION of the OpenStreetMap Carto stylesheet (the default
- stylesheet on the OSM website) has been released and rolled out
- to the openstreetmap.org servers. It might take a couple of days
- before all tiles show the new rendering.
+ stylesheet on the OSM website) has been released and rolled out
+ to the openstreetmap.org servers. It might take a couple of days
+ before all tiles show the new rendering.
Changes include
*A list of changes*
diff --git a/admin.mss b/admin.mss
index 1fad3dc852..984356fafb 100644
--- a/admin.mss
+++ b/admin.mss
@@ -1,4 +1,10 @@
-@admin-boundaries: #ac46ac;
+@admin-boundaries-level2: #6b516b;
+@admin-boundaries-level3: #764f76;
+@admin-boundaries-level4: #814d81;
+@admin-boundaries-level5: #8c4c8c;
+@admin-boundaries-level6: #964a96;
+@admin-boundaries-level7-8: #a148a1;
+@admin-boundaries-level9-10: #ac46ac;
@admin-simplify: 4;
@admin-simplify-algorithm: visvalingam-whyatt;
@@ -59,7 +65,7 @@ overlapping borders correctly.
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
line-join: bevel;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level3;
line-width: 0.6;
line-simplify: @admin-simplify;
line-simplify-algorithm: @admin-simplify-algorithm;
@@ -83,7 +89,7 @@ overlapping borders correctly.
background/line-width: 0.4;
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level4;
line-join: bevel;
line-width: 0.4;
line-simplify: @admin-simplify;
@@ -140,11 +146,11 @@ overlapping borders correctly.
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
line-join: bevel;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level5;
line-width: 2;
line-simplify: @admin-simplify;
line-simplify-algorithm: @admin-simplify-algorithm;
- line-dasharray: 6,3,2,3,2,3;
+ line-dasharray: 12,3,2,3,2,3,2,3;
line-clip: false;
}
[admin_level = '6'][zoom >= 11] {
@@ -154,11 +160,11 @@ overlapping borders correctly.
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
line-join: bevel;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level6;
line-width: 2;
line-simplify: @admin-simplify;
line-simplify-algorithm: @admin-simplify-algorithm;
- line-dasharray: 6,3,2,3;
+ line-dasharray: 6,3,2,3,2,3;
line-clip: false;
}
[admin_level = '7'],
@@ -166,15 +172,15 @@ overlapping borders correctly.
[zoom >= 12] {
background/line-join: bevel;
background/line-color: white;
- background/line-width: 1.5;
+ background/line-width: 2;
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
line-join: bevel;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level7-8;
line-width: 1.5;
line-simplify: @admin-simplify;
line-simplify-algorithm: @admin-simplify-algorithm;
- line-dasharray: 5,2;
+ line-dasharray: 6,3,2,3;
line-clip: false;
}
}
@@ -188,15 +194,15 @@ overlapping borders correctly.
[zoom >= 13] {
background/line-join: bevel;
background/line-color: white;
- background/line-width: 2;
+ background/line-width: 1.5;
background/line-simplify: @admin-simplify;
background/line-simplify-algorithm: @admin-simplify-algorithm;
line-join: bevel;
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level9-10;
line-width: 2;
line-simplify: @admin-simplify;
line-simplify-algorithm: @admin-simplify-algorithm;
- line-dasharray: 2,3;
+ line-dasharray: 5,2;
line-clip: false;
}
}
@@ -207,38 +213,58 @@ overlapping borders correctly.
#admin-text[zoom >= 16] {
text-name: "[name]";
text-face-name: @book-fonts;
- text-fill: @admin-boundaries;
+ text-fill: @admin-boundaries-level5;
text-halo-radius: @standard-halo-radius;
text-halo-fill: @standard-halo-fill;
+ text-largest-bbox-only: false;
text-placement: line;
+ text-spacing: 750;
+ text-repeat-distance: 250;
+ text-margin: 10;
text-clip: true;
text-vertical-alignment: middle;
text-dy: -10;
}
-#nature-reserve-text[zoom >= 13][way_pixels > 192000] {
+#protected-areas-text[zoom >= 13][way_pixels > 192000] {
text-name: "[name]";
text-face-name: @book-fonts;
text-fill: green;
+ [boundary='aboriginal_lands'],
+ [boundary='protected_area'][protect_class='24'] {
+ text-fill: @aboriginal;
+ }
text-halo-radius: @standard-halo-radius;
text-halo-fill: @standard-halo-fill;
+ text-largest-bbox-only: false;
text-placement: line;
+ text-spacing: 750;
+ text-repeat-distance: 250;
+ text-margin: 10;
text-clip: true;
text-vertical-alignment: middle;
text-dy: -10;
}
-#nature-reserve-boundaries {
+#protected-areas {
[way_pixels > 3000] {
[zoom >= 8][zoom < 10] {
::fill {
opacity: 0.05;
polygon-fill: green;
+ [boundary='aboriginal_lands'],
+ [boundary='protected_area'][protect_class='24'] {
+ polygon-fill: @aboriginal;
+ }
}
::outline {
opacity: 0.25;
line-width: 1.2;
line-color: green;
+ [boundary='aboriginal_lands'],
+ [boundary='protected_area'][protect_class='24'] {
+ line-color: @aboriginal;
+ }
[zoom >= 9] {
line-width: 1.5;
}
@@ -250,6 +276,10 @@ overlapping borders correctly.
line-width: 3.6;
line-offset: -0.9;
line-color: green;
+ [boundary='aboriginal_lands'],
+ [boundary='protected_area'][protect_class='24'] {
+ line-color: @aboriginal;
+ }
line-join: round;
line-cap: round;
[zoom >= 12] {
@@ -265,6 +295,10 @@ overlapping borders correctly.
opacity: 0.15;
line-width: 1.8;
line-color: green;
+ [boundary='aboriginal_lands'],
+ [boundary='protected_area'][protect_class='24'] {
+ line-color: @aboriginal;
+ }
line-join: round;
line-cap: round;
[zoom >= 12] {
diff --git a/amenity-points.mss b/amenity-points.mss
index 4fc8b76e17..c650ee8ba0 100644
--- a/amenity-points.mss
+++ b/amenity-points.mss
@@ -17,8 +17,11 @@
@office: #4863A0;
@man-made-icon: #666666;
@advertising-grey: @man-made-icon;
+@barrier-icon: #3f3f3f;
@landform-color: #d08f55;
@leisure-green: darken(@park, 60%);
+@aboriginal: #82643a;
+@religious-icon: #000000;
@landcover-font-size: 10;
@landcover-wrap-width-size: 30; // 3 em
@@ -187,7 +190,7 @@
marker-clip: false;
}
- [feature = 'amenity_vending_machine'] {
+ [feature = 'amenity_vending_machine'][zoom >= 19] {
[vending = 'excrement_bags'] {
marker-file: url('symbols/amenity/excrement_bags.svg');
}
@@ -409,7 +412,7 @@
marker-file: url('symbols/tourism/information.svg');
[information = 'audioguide'] {
marker-file: url('symbols/tourism/audioguide.svg');
- }
+ }
[information = 'board'] {
marker-file: url('symbols/tourism/board.svg');
}
@@ -487,9 +490,10 @@
[feature = 'man_made_mast']["tower:type" != 'lighting'],
[feature = 'man_made_mast']["tower:type" = 'lighting'][zoom >= 18] {
- [zoom >= 15][height > 80],
- [zoom >= 16][height > 40],
- [zoom >= 17][height > 20],
+ [zoom >= 14][height >= 160],
+ [zoom >= 15][height >= 80],
+ [zoom >= 16][height >= 40],
+ [zoom >= 17][height >= 20],
[zoom >= 18] {
marker-file: url('symbols/man_made/mast.svg');
marker-fill: @man-made-icon;
@@ -497,7 +501,7 @@
marker-clip: false;
["tower:type" = 'lighting'] {
marker-file: url('symbols/man_made/mast_lighting.svg');
- }
+ }
["tower:type" = 'communication'] {
marker-file: url('symbols/man_made/mast_communications.svg');
}
@@ -509,9 +513,9 @@
[feature = 'man_made_tower']["tower:type" = 'bell_tower'][zoom >= 18],
[feature = 'man_made_tower']["tower:type" = 'watchtower'][zoom >= 18],
[feature = 'man_made_tower']["tower:type" != 'cooling']["tower:type" != 'lighting']["tower:type" != 'bell_tower']["tower:type" != 'watchtower'] {
- [zoom >= 13][height > 100],
- [zoom >= 14][height > 50],
- [zoom >= 15][height > 30],
+ [zoom >= 14][height >= 160],
+ [zoom >= 15][height >= 80],
+ [zoom >= 16][height >= 40],
[zoom >= 17] {
marker-file: url('symbols/man_made/tower_generic.svg');
marker-fill: @man-made-icon;
@@ -522,7 +526,7 @@
}
["tower:type" = 'observation'],
["tower:type" = 'watchtower'] {
- marker-file: url('symbols/man_made/tower_observation.svg');
+ marker-file: url('symbols/man_made/tower_observation.svg');
}
["tower:type" = 'bell_tower'] {
marker-file: url('symbols/man_made/bell_tower.svg');
@@ -556,17 +560,17 @@
["tower:construction" = 'lattice'] {
marker-file: url('symbols/man_made/tower_lattice_lighting.svg');
}
- }
+ }
}
}
- [feature = 'man_made_communications_tower'][zoom >= 13] {
+ [feature = 'man_made_communications_tower'][zoom >= 14] {
marker-file: url('symbols/man_made/communications_tower.svg');
marker-fill: @man-made-icon;
marker-placement: interior;
marker-clip: false;
}
-
+
[feature = 'man_made_chimney'] {
[zoom >= 16][height > 50],
[zoom >= 17][height > 30],
@@ -589,27 +593,26 @@
}
[feature = 'man_made_telescope']["telescope:type" != 'optical']["telescope:type" != null] {
- [zoom >= 13]["telescope:diameter" >= 60],
- [zoom >= 14]["telescope:diameter" >= 30],
- [zoom >= 15]["telescope:diameter" >= 15],
- [zoom >= 16] {
- marker-file: url('symbols/man_made/telescope_dish.svg');
- marker-fill: @man-made-icon;
- marker-placement: interior;
- marker-clip: false;
+ [zoom >= 14]["telescope:diameter" >= 60],
+ [zoom >= 15]["telescope:diameter" >= 30],
+ [zoom >= 16] {
+ marker-file: url('symbols/man_made/telescope_dish.svg');
+ marker-fill: @man-made-icon;
+ marker-placement: interior;
+ marker-clip: false;
}
}
-[feature = 'man_made_telescope']["telescope:type" = 'optical'],
-[feature = 'man_made_telescope']["telescope:type" = null], {
- [zoom >= 14]["telescope:diameter" >= 8],
- [zoom >= 15]["telescope:diameter" >= 4],
- [zoom >= 16]["telescope:diameter" >= 2],
- [zoom >= 17] {
- marker-file: url('symbols/man_made/telescope_dome.svg');
- marker-fill: @man-made-icon;
- marker-placement: interior;
- marker-clip: false;
+ [feature = 'man_made_telescope']["telescope:type" = 'optical'],
+ [feature = 'man_made_telescope']["telescope:type" = null], {
+ [zoom >= 14]["telescope:diameter" >= 8],
+ [zoom >= 15]["telescope:diameter" >= 4],
+ [zoom >= 16]["telescope:diameter" >= 2],
+ [zoom >= 17] {
+ marker-file: url('symbols/man_made/telescope_dome.svg');
+ marker-fill: @man-made-icon;
+ marker-placement: interior;
+ marker-clip: false;
}
}
@@ -740,7 +743,7 @@
[feature = 'amenity_place_of_worship'][zoom >= 16] {
marker-file: url('symbols/amenity/place_of_worship.svg');
- marker-fill: #000000;
+ marker-fill: @religious-icon;
marker-placement: interior;
marker-clip: false;
[religion = 'christian'] {
@@ -775,7 +778,7 @@
[feature = 'man_made_cross'][zoom >= 17],
[feature = 'historic_wayside_cross'][zoom >= 17] {
marker-file: url('symbols/man_made/cross.svg');
- marker-fill: #000000;
+ marker-fill: @religious-icon;
marker-placement: interior;
marker-clip: false;
}
@@ -787,7 +790,7 @@
marker-placement: interior;
marker-clip: false;
}
-
+
[feature = 'historic_wayside_shrine'][zoom >= 17] {
marker-file: url('symbols/historic/shrine.svg');
marker-fill: @man-made-icon;
@@ -1069,7 +1072,7 @@
[shop = 'bookmaker'][zoom >= 18] {
marker-file: url('symbols/shop/bookmaker.svg');
}
-
+
[shop = 'books'][zoom >= 18] {
marker-file: url('symbols/amenity/library.svg');
}
@@ -1183,7 +1186,7 @@
[shop = 'hifi'][zoom >= 18] {
marker-file: url('symbols/shop/hifi.svg');
}
-
+
[shop = 'houseware'][zoom >= 18] {
marker-file: url('symbols/shop/houseware.svg');
}
@@ -1268,7 +1271,7 @@
marker-file: url('symbols/shop/massage.svg');
marker-fill: @leisure-green;
}
-
+
[shop = 'medical_supply'][zoom >= 18]{
marker-file: url('symbols/shop/medical_supply.svg');
}
@@ -1334,15 +1337,15 @@
[shop = 'ticket'][zoom >= 18] {
marker-file: url('symbols/shop/ticket.svg');
}
-
+
[shop = 'trade'][zoom >= 18] {
marker-file: url('symbols/shop/trade.svg');
- }
-
+ }
+
[shop = 'wholesale'][zoom >= 18] {
marker-file: url('symbols/shop/trade.svg');
- }
-
+ }
+
[shop = 'tyres'][zoom >= 18] {
marker-file: url('symbols/shop/tyres.svg');
}
@@ -1640,7 +1643,7 @@
[feature = 'man_made_cross'][zoom >= 16],
[feature = 'historic_wayside_cross'][zoom >= 16] {
marker-file: url('symbols/man_made/cross.svg');
- marker-fill: #000000;
+ marker-fill: @religious-icon;
marker-placement: interior;
marker-clip: false;
}
@@ -1691,49 +1694,49 @@
[feature = 'barrier_lift_gate'][zoom >= 17]::barrier,
[feature = 'barrier_swing_gate'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/lift_gate.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
[feature = 'barrier_cattle_grid'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/cattle_grid.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
[feature = 'barrier_stile'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/stile.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
- marker-clip: false;
+ marker-clip: false;
}
[feature = 'barrier_motorcycle_barrier'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/motorcycle_barrier.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
[feature = 'barrier_cycle_barrier'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/cycle_barrier.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
[feature = 'barrier_full-height_turnstile'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/full-height_turnstile.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
[feature = 'barrier_kissing_gate'][zoom >= 17]::barrier {
marker-file: url('symbols/barrier/kissing_gate.svg');
- marker-fill: #3f3f3f;
+ marker-fill: @barrier-icon;
marker-placement: interior;
marker-clip: false;
}
@@ -2285,6 +2288,7 @@
[feature = 'landuse_forest'],
[feature = 'boundary_national_park'],
[feature = 'leisure_nature_reserve'],
+ [feature = 'boundary_aboriginal_lands'],
[feature = 'boundary_protected_area'] {
[zoom >= 8][way_pixels > 3000][is_building = 'no'],
[zoom >= 17] {
@@ -2309,6 +2313,9 @@
[feature = 'landuse_military'] {
text-fill: darken(@military, 40%);
}
+ [feature = 'boundary_aboriginal_lands'] {
+ text-fill: @aboriginal;
+ }
[feature = 'natural_wood'],
[feature = 'landuse_forest'] {
text-fill: @forest-text;
@@ -2479,10 +2486,12 @@
}
[feature = 'landuse_meadow'],
[feature = 'natural_grassland'],
- [feature = 'landuse_grass'],
- [feature = 'landuse_allotments'] {
+ [feature = 'landuse_grass'] {
text-fill: darken(@grass, 50%);
}
+ [feature = 'landuse_allotments'] {
+ text-fill: darken(@allotments, 50%);
+ }
[feature = 'landuse_farmyard'] {
text-fill: darken(@farmyard, 50%);
}
@@ -2609,7 +2618,7 @@
text-placement: interior;
text-face-name: @standard-font;
}
-
+
[feature = 'tourism_alpine_hut'][zoom >= 14],
[feature = 'amenity_shelter'][zoom >= 17],
[feature = 'leisure_picnic_table'][zoom >= 17],
@@ -2853,7 +2862,7 @@
[feature = 'shop_beverages'],
[feature = 'shop_bookmaker'],
[feature = 'shop_books'],
- [feature = 'shop_carpet'],
+ [feature = 'shop_carpet'],
[feature = 'shop_charity'],
[feature = 'shop_clothes'],
[feature = 'shop_coffee'],
@@ -3056,7 +3065,7 @@
text-size: @standard-font-size;
text-wrap-width: @standard-wrap-width;
text-line-spacing: @standard-line-spacing-size;
- text-fill: #aa66cc;
+ text-fill: black;
text-face-name: @standard-font;
text-halo-radius: @standard-halo-radius;
text-halo-fill: @standard-halo-fill;
@@ -3327,7 +3336,7 @@
text-repeat-distance: @waterway-text-repeat-distance;
text-dy: 8;
}
- }
+ }
}
[feature = 'attraction_water_slide'] {
diff --git a/landcover.mss b/landcover.mss
index 876ec85afe..e45f1c6d8d 100644
--- a/landcover.mss
+++ b/landcover.mss
@@ -1,10 +1,11 @@
// --- Parks, woods, other green things ---
-@grass: #cdebb0; // Lch(90,32,128) also grassland, meadow, common, village_green, garden, allotments
+@grass: #cdebb0; // Lch(90,32,128) also grassland, meadow, common, village_green, garden
@scrub: #c8d7ab; // Lch(84,24,122)
@forest: #add19e; // Lch(80,30,135)
@forest-text: #46673b; // Lch(40,30,135)
@park: #c8facc; // Lch(94,30,145)
+@allotments: #c9e1bf; // Lch(87,20,135)
@orchard: #aedfa3; // also vineyard, plant_nursery
// --- "Base" landuses ---
@@ -94,8 +95,8 @@
[feature = 'leisure_swimming_pool'][zoom >= 14] {
polygon-fill: @water-color;
- [zoom >= 17] {
- line-width: 0.5;
+ [zoom >= 17] {
+ line-width: 0.5;
line-color: saturate(darken(@water-color, 20%), 20%);
}
[way_pixels >= 4] { polygon-gamma: 0.75; }
@@ -301,7 +302,7 @@
[feature = 'landuse_allotments'] {
[zoom >= 10] {
- polygon-fill: @grass;
+ polygon-fill: @allotments;
[way_pixels >= 4] { polygon-gamma: 0.75; }
[way_pixels >= 64] { polygon-gamma: 0.3; }
}
@@ -311,6 +312,13 @@
[way_pixels >= 4] { polygon-pattern-gamma: 0.75; }
[way_pixels >= 64] { polygon-pattern-gamma: 0.3; }
}
+ [zoom >= 16] {
+ line-width: 0.5;
+ line-color: desaturate(darken(@allotments, 10%), 10%);
+ [name != null] {
+ line-width: 0.7;
+ }
+ }
}
[feature = 'landuse_forest'],
diff --git a/placenames.mss b/placenames.mss
index fb0f62582b..8b4886be1f 100644
--- a/placenames.mss
+++ b/placenames.mss
@@ -1,10 +1,10 @@
@placenames: #222;
@placenames-light: #777777;
-@country-labels: darken(@admin-boundaries, 15%);
-@state-labels: desaturate(darken(@admin-boundaries, 5%), 20%);
+@country-labels: darken(@admin-boundaries-level2, 15%);
+@state-labels: desaturate(darken(@admin-boundaries-level4, 5%), 20%);
.country {
- [zoom >= 3][zoom < 5][way_pixels > 1000],
+ [zoom >= 3][zoom < 5][way_pixels > 1000],
[zoom >= 5][way_pixels < 360000] {
text-name: "[name]";
text-size: 10;
@@ -35,11 +35,10 @@
text-line-spacing: -0.7; // -0.05 em
}
text-fill: @country-labels;
- text-face-name: @book-fonts;
+ text-face-name: @bold-fonts;
text-halo-fill: @standard-halo-fill;
text-halo-radius: @standard-halo-radius * 1.5;
text-placement: interior;
- text-character-spacing: 0.5;
}
}
@@ -401,10 +400,40 @@
}
}
}
+ [place = 'hamlet'] {
+ [zoom >= 14][zoom < 18] {
+ text-name: "[name]";
+ text-fill: @placenames;
+ text-face-name: @book-fonts;
+ text-halo-fill: white;
+ text-halo-radius: @standard-halo-radius * 1.5;
+ [zoom >= 14] {
+ text-size: 10;
+ text-wrap-width: 55; // 5.0 em
+ text-line-spacing: -0.55; // -0.05 em
+ text-margin: 7.7; // 0.7 em
+ }
+ [zoom >= 15] {
+ text-size: 11;
+ text-fill: @placenames-light;
+ text-halo-fill: @standard-halo-fill;
+ text-wrap-width: 45; // 4.5 em
+ text-line-spacing: -0.8; // -0.08 em
+ text-margin: 7.0; // 0.7 em
+ }
+ [zoom >= 16] {
+ text-size: 12;
+ text-wrap-width: 60; // 5.0 em
+ text-line-spacing: -0.60; // -0.05 em
+ text-margin: 8.4; // 0.7 em
+ text-fill: @placenames-light;
+ text-halo-fill: white;
+ }
+ }
+ }
}
-#placenames-small::hamlet {
- [place = 'hamlet'],
+#placenames-small::neighborhood {
[place = 'locality'],
[place = 'neighbourhood'],
[place = 'isolated_dwelling'],
diff --git a/project.mml b/project.mml
index 2b4572f0fa..40f39fa682 100644
--- a/project.mml
+++ b/project.mml
@@ -90,7 +90,7 @@ Layer:
COALESCE(wetland, landuse, "natural") AS feature
FROM (SELECT
way,
- ('landuse_' || (CASE WHEN landuse IN ('forest', 'farmland', 'residential', 'commercial', 'retail', 'industrial',
+ ('landuse_' || (CASE WHEN landuse IN ('forest', 'farmland', 'residential', 'commercial', 'retail', 'industrial',
'meadow', 'vineyard', 'orchard') THEN landuse ELSE NULL END)) AS landuse,
('natural_' || (CASE WHEN "natural" IN ('wood', 'sand', 'scree', 'shingle', 'bare_rock', 'heath', 'grassland', 'scrub') THEN "natural" ELSE NULL END)) AS "natural",
('wetland_' || (CASE WHEN "natural" IN ('wetland', 'mud') THEN (CASE WHEN "natural" IN ('mud') THEN "natural" ELSE tags->'wetland' END) ELSE NULL END)) AS wetland,
@@ -100,6 +100,7 @@ Layer:
WHERE (landuse IN ('forest', 'farmland', 'residential', 'commercial', 'retail', 'industrial', 'meadow', 'vineyard', 'orchard')
OR "natural" IN ('wood', 'wetland', 'mud', 'sand', 'scree', 'shingle', 'bare_rock', 'heath', 'grassland', 'scrub'))
AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real
+ AND building IS NULL
) AS features
ORDER BY way_area DESC, feature
) AS landcover_low_zoom
@@ -290,14 +291,22 @@ Layer:
<<: *osm2pgsql
table: |-
(SELECT
- way, "natural"
- FROM planet_osm_polygon
- WHERE "natural" IN ('spring')
- UNION ALL
- SELECT
- way, "natural"
- FROM planet_osm_point
- WHERE "natural" IN ('spring')
+ way,
+ "natural"
+ FROM
+ (SELECT
+ ST_PointOnSurface(way) AS way,
+ "natural"
+ FROM planet_osm_polygon
+ WHERE way && !bbox!
+ UNION ALL
+ SELECT
+ way,
+ "natural"
+ FROM planet_osm_point
+ WHERE way && !bbox!
+ ) _
+ WHERE "natural" IN ('spring')
) AS springs
properties:
minzoom: 14
@@ -454,7 +463,7 @@ Layer:
table: |-
(SELECT
way,
- (CASE WHEN substr(feature, length(feature)-4, 5) = '_link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
+ (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
horse,
foot,
bicycle,
@@ -489,7 +498,7 @@ Layer:
ELSE 'INT-normal'::text
END AS service,
CASE
- WHEN substr(highway, length(highway)-4, 5) = '_link' THEN 'yes'
+ WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes'
ELSE 'no'
END AS link,
COALESCE(layer,0) AS layernotnull,
@@ -696,7 +705,7 @@ Layer:
table: |-
(SELECT
way,
- (CASE WHEN substr(feature, length(feature)-4, 5) = '_link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
+ (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
horse,
foot,
bicycle,
@@ -731,7 +740,7 @@ Layer:
ELSE 'INT-normal'::text
END AS service,
CASE
- WHEN substr(highway, length(highway)-4, 5) = '_link' THEN 'yes'
+ WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes'
ELSE 'no'
END AS link,
COALESCE(layer,0) AS layernotnull,
@@ -821,7 +830,7 @@ Layer:
table: |-
(SELECT
way,
- (CASE WHEN substr(feature, length(feature)-4, 5) = '_link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
+ (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
horse,
foot,
bicycle,
@@ -856,10 +865,11 @@ Layer:
ELSE 'INT-normal'::text
END AS service,
CASE
- WHEN substr(highway, length(highway)-4, 5) = '_link' THEN 'yes'
+ WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes'
ELSE 'no'
END AS link,
COALESCE(layer,0) AS layernotnull,
+ osm_id,
z_order
FROM planet_osm_line
WHERE (tunnel IS NULL OR NOT tunnel IN ('yes', 'building_passage'))
@@ -888,6 +898,7 @@ Layer:
ELSE 'INT-normal'::text END AS service,
'no' AS link,
COALESCE(layer,0) AS layernotnull,
+ osm_id,
z_order
FROM planet_osm_line
WHERE (tunnel IS NULL OR NOT tunnel IN ('yes', 'building_passage'))
@@ -901,7 +912,8 @@ Layer:
CASE WHEN substring(feature for 8) = 'railway_' THEN 2 ELSE 1 END,
CASE WHEN feature IN ('railway_INT-preserved-ssy', 'railway_INT-spur-siding-yard', 'railway_tram-service') THEN 0 ELSE 1 END,
CASE WHEN access IN ('no', 'private') THEN 0 WHEN access IN ('destination') THEN 1 ELSE 2 END,
- CASE WHEN int_surface IN ('unpaved') THEN 0 ELSE 2 END
+ CASE WHEN int_surface IN ('unpaved') THEN 0 ELSE 2 END,
+ osm_id
) AS roads_fill
properties:
minzoom: 10
@@ -957,12 +969,13 @@ Layer:
(SELECT
way,
COALESCE(
- ('highway_' || (CASE WHEN substr(highway, length(highway)-4, 5) = '_link' THEN substr(highway, 0, length(highway)-4) ELSE highway end)),
+ ('highway_' || (CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link')
+ THEN substr(highway, 0, length(highway)-4) ELSE highway end)),
('railway_' || (CASE WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard'
WHEN railway IN ('rail', 'tram', 'light_rail', 'funicular', 'narrow_gauge') THEN railway ELSE NULL END))
) 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)-4, 5) = '_link' THEN 'yes' ELSE 'no' END AS link,
+ CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_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', 'ice', 'snow') THEN 'unpaved'
WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes',
@@ -1011,7 +1024,7 @@ Layer:
table: |-
(SELECT
way,
- (CASE WHEN substr(feature, length(feature)-4, 5) = '_link' THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
+ (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature,
horse,
foot,
bicycle,
@@ -1046,7 +1059,7 @@ Layer:
ELSE 'INT-normal'::text
END AS service,
CASE
- WHEN substr(highway, length(highway)-4, 5) = '_link' THEN 'yes'
+ WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes'
ELSE 'no'
END AS link,
COALESCE(layer,0) AS layernotnull,
@@ -1218,7 +1231,7 @@ Layer:
) AS power_line
properties:
minzoom: 14
- - id: nature-reserve-boundaries
+ - id: protected-areas
geometry: polygon
<<: *extents
Datasource:
@@ -1228,14 +1241,15 @@ Layer:
way,
name,
boundary,
+ tags->'protect_class' AS protect_class,
way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels
FROM planet_osm_polygon
- WHERE (boundary = 'national_park'
+ WHERE (boundary IN ('aboriginal_lands', 'national_park')
OR leisure = 'nature_reserve'
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99')))
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99')))
AND building IS NULL
AND way_area > 1*!pixel_width!::real*!pixel_height!::real
- ) AS national_park_boundaries
+ ) AS protected_areas
properties:
minzoom: 8
- id: trees
@@ -1468,8 +1482,8 @@ Layer:
'nursing_home', 'childcare', 'driving_school', 'casino', 'boat_rental', 'bicycle_repair_station') THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('vending_machine') AND tags->'vending' IN ('excrement_bags', 'parking_tickets', 'public_transport_tickets') THEN amenity ELSE NULL END,
- 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
- 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
+ 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
+ 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
'physiotherapist', 'podiatrist', 'psychotherapist', 'rehabilitation', 'speech_therapist', 'yes') THEN tags->'healthcare' ELSE NULL END,
'advertising_' || CASE WHEN tags->'advertising' in ('column') THEN tags->'advertising' else NULL END,
'shop' || CASE WHEN shop IN ('no', 'vacant', 'closed', 'disused', 'empty') OR shop IS NULL THEN NULL ELSE '' END,
@@ -1609,8 +1623,8 @@ Layer:
'amenity_' || CASE WHEN amenity IN ('parking_entrance') AND tags->'parking' IN ('underground') AND (access IS NULL OR access NOT IN ('private', 'no')) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('vending_machine') AND tags->'vending' IN ('excrement_bags', 'parking_tickets', 'public_transport_tickets') THEN amenity ELSE NULL END,
- 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
- 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
+ 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
+ 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
'physiotherapist', 'podiatrist', 'psychotherapist', 'rehabilitation', 'speech_therapist', 'yes') THEN tags->'healthcare' ELSE NULL END,
'advertising_' || CASE WHEN tags->'advertising' in ('column') THEN tags->'advertising' else NULL END,
'emergency_' || CASE WHEN tags->'emergency' IN ('phone') THEN tags->'emergency' ELSE NULL END,
@@ -1620,7 +1634,7 @@ Layer:
'dog_park', 'fitness_centre', 'fitness_station', 'firepit', 'sauna', 'beach_resort',
'bowling_alley', 'outdoor_seating', 'bird_hide', 'amusement_arcade', 'sports_centre',
'swimming_area', 'fishing') THEN leisure ELSE NULL END,
- 'man_made_' || CASE WHEN (man_made IN ('mast', 'tower', 'water_tower', 'lighthouse', 'windmill', 'obelisk', 'communications_tower', 'telescope',
+ 'man_made_' || CASE WHEN (man_made IN ('mast', 'tower', 'water_tower', 'lighthouse', 'windmill', 'obelisk', 'communications_tower', 'telescope',
'chimney', 'crane', 'storage_tank', 'silo')
AND (tags->'location' NOT IN ('roof', 'rooftop') OR (tags->'location') IS NULL)) THEN man_made ELSE NULL END,
'natural_' || CASE WHEN "natural" IN ('peak', 'volcano', 'saddle', 'spring', 'cave_entrance') THEN "natural" ELSE NULL END,
@@ -1875,12 +1889,12 @@ Layer:
osm_id,
way,
COALESCE(
- CASE WHEN highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential') THEN highway ELSE NULL END,
+ CASE WHEN highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential', 'track') THEN highway ELSE NULL END,
CASE WHEN aeroway IN ('runway', 'taxiway') THEN aeroway ELSE NULL END
) AS highway,
string_to_array(ref, ';') AS refs
FROM planet_osm_line
- WHERE (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential') OR aeroway IN ('runway', 'taxiway'))
+ WHERE (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential', 'track') OR aeroway IN ('runway', 'taxiway'))
AND ref IS NOT NULL
) AS p) AS q
WHERE height <= 4 AND width <= 11
@@ -1893,6 +1907,7 @@ Layer:
WHEN highway = 'tertiary' THEN 34
WHEN highway = 'unclassified' THEN 33
WHEN highway = 'residential' THEN 32
+ WHEN highway = 'track' THEN 30
WHEN highway = 'runway' THEN 6
WHEN highway = 'taxiway' THEN 5
ELSE NULL
@@ -2049,7 +2064,8 @@ Layer:
'natural_' || CASE WHEN "natural" IN ('wood', 'glacier', 'sand', 'scree', 'shingle', 'bare_rock',
'water', 'bay', 'strait', 'cape') THEN "natural" ELSE NULL END,
'place_' || CASE WHEN place IN ('island') THEN place ELSE NULL END,
- 'boundary_' || CASE WHEN boundary IN ('national_park')
+ 'boundary_' || CASE WHEN (boundary = 'protected_area' AND tags->'protect_class' = '24') THEN 'aboriginal_lands'
+ WHEN boundary IN ('aboriginal_lands', 'national_park')
OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
THEN boundary ELSE NULL END,
'leisure_' || CASE WHEN leisure IN ('nature_reserve') THEN leisure ELSE NULL END
@@ -2061,8 +2077,8 @@ Layer:
OR military IN ('danger_area')
OR "natural" IN ('wood', 'glacier', 'sand', 'scree', 'shingle', 'bare_rock', 'water', 'bay', 'strait', 'cape')
OR "place" IN ('island')
- OR boundary IN ('national_park')
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
+ OR boundary IN ('aboriginal_lands', 'national_park')
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99'))
OR leisure IN ('nature_reserve'))
AND building IS NULL
AND name IS NOT NULL
@@ -2099,8 +2115,8 @@ Layer:
'casino', 'boat_rental', 'bicycle_repair_station') THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('vending_machine') AND tags->'vending' IN ('excrement_bags', 'parking_tickets', 'public_transport_tickets') THEN amenity ELSE NULL END,
- 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
- 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
+ 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
+ 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
'physiotherapist', 'podiatrist', 'psychotherapist', 'rehabilitation', 'speech_therapist', 'yes') THEN tags->'healthcare' ELSE NULL END,
'advertising_' || CASE WHEN tags->'advertising' in ('column') THEN tags->'advertising' else NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag', 'bakery', 'beauty', 'bed', 'bookmaker', 'books', 'butcher', 'carpet', 'clothes', 'computer', 'confectionery',
@@ -2133,7 +2149,8 @@ Layer:
'historic_' || CASE WHEN historic IN ('memorial', 'monument', 'archaeological_site', 'fort', 'castle', 'manor', 'city_gate')
THEN historic ELSE NULL END,
'highway_' || CASE WHEN highway IN ('services', 'rest_area', 'bus_stop', 'elevator') THEN highway ELSE NULL END,
- 'boundary_' || CASE WHEN boundary IN ('national_park')
+ 'boundary_' || CASE WHEN (boundary = 'protected_area' AND tags->'protect_class' = '24') THEN 'aboriginal_lands'
+ WHEN boundary IN ('aboriginal_lands', 'national_park')
OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
THEN boundary ELSE NULL END,
'waterway_' || CASE WHEN waterway IN ('dam', 'dock') THEN waterway ELSE NULL END,
@@ -2204,8 +2221,8 @@ Layer:
OR historic IN ('memorial', 'monument', 'archaeological_site', 'fort', 'castle', 'manor', 'city_gate')
OR highway IN ('services', 'rest_area', 'bus_stop', 'elevator')
OR power IN ('plant', 'station', 'generator', 'sub_station', 'substation')
- OR boundary IN ('national_park')
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
+ OR boundary IN ('aboriginal_lands', 'national_park')
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99'))
OR waterway IN ('dam', 'dock'))
AND (name IS NOT NULL
OR (ref IS NOT NULL AND aeroway IN ('gate'))
@@ -2294,14 +2311,14 @@ Layer:
'embassy', 'fuel', 'bus_station', 'prison', 'university', 'school', 'college', 'kindergarten', 'hospital',
'ice_cream', 'pharmacy', 'doctors', 'dentist', 'atm', 'bicycle_rental', 'bureau_de_change','car_rental',
'car_wash', 'post_box', 'post_office', 'recycling', 'telephone', 'toilets', 'taxi', 'internet_cafe', 'public_bookcase',
- 'drinking_water', 'hunting_stand', 'nightclub', 'veterinary', 'social_facility', 'vehicle_inspection',
+ 'drinking_water', 'hunting_stand', 'nightclub', 'veterinary', 'social_facility', 'vehicle_inspection',
'charging_station', 'arts_centre', 'ferry_terminal', 'marketplace', 'shower', 'bbq',
'nursing_home', 'childcare', 'driving_school', 'casino', 'boat_rental', 'bicycle_repair_station') THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('parking_entrance') AND tags->'parking' IN ('underground') AND (access IS NULL OR access NOT IN ('private', 'no')) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END,
'amenity_' || CASE WHEN amenity IN ('vending_machine') AND tags->'vending' IN ('public_transport_tickets') THEN amenity ELSE NULL END,
- 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
- 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
+ 'healthcare_' || CASE WHEN tags->'healthcare' IN ('alternative', 'audiologist', 'birthing_center', 'blood_bank', 'blood_donation', 'centre', 'clinic',
+ 'dentist', 'dialysis', 'doctor', 'hospital', 'laboratory', 'midwife', 'occupational_therapist', 'optometrist',
'physiotherapist', 'podiatrist', 'psychotherapist', 'rehabilitation', 'speech_therapist', 'yes') THEN tags->'healthcare' ELSE NULL END,
'advertising_' || CASE WHEN tags->'advertising' in ('column') THEN tags->'advertising' else NULL END,
'shop_' || CASE WHEN shop IN ('supermarket', 'bag','bakery', 'beauty', 'bed', 'bookmaker', 'books', 'butcher', 'clothes', 'carpet', 'computer', 'confectionery', 'fashion',
@@ -2337,8 +2354,8 @@ Layer:
'historic_' || CASE WHEN historic IN ('memorial', 'monument', 'archaeological_site', 'fort', 'castle', 'manor', 'city_gate')
THEN historic ELSE NULL END,
'highway_' || CASE WHEN highway IN ('services', 'rest_area', 'bus_stop', 'elevator') THEN highway ELSE NULL END,
- 'boundary_' || CASE WHEN boundary IN ('national_park')
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
+ 'boundary_' || CASE WHEN boundary IN ('aboriginal_lands', 'national_park')
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99'))
THEN boundary ELSE NULL END,
'waterway_' || CASE WHEN waterway IN ('dam', 'weir', 'dock') THEN waterway ELSE NULL END,
'man_made_' || CASE WHEN man_made IN ('cross') THEN man_made ELSE NULL END,
@@ -2410,8 +2427,8 @@ Layer:
OR historic IN ('memorial', 'monument', 'archaeological_site', 'wayside_cross', 'fort', 'wayside_shrine', 'castle', 'manor', 'city_gate')
OR highway IN ('bus_stop', 'services', 'rest_area', 'elevator')
OR power IN ('plant', 'station', 'generator', 'sub_station', 'substation')
- OR boundary IN ('national_park')
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99'))
+ OR boundary IN ('aboriginal_lands', 'national_park')
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99'))
OR waterway IN ('dam', 'weir', 'dock'))
AND (name IS NOT NULL
OR (tags?'ele' AND ("natural" IN ('peak', 'volcano', 'saddle')
@@ -2541,7 +2558,7 @@ Layer:
) AS admin_text
properties:
minzoom: 16
- - id: nature-reserve-text
+ - id: protected-areas-text
geometry: linestring
<<: *extents
Datasource:
@@ -2550,13 +2567,15 @@ Layer:
(SELECT
way,
name,
+ boundary,
+ tags->'protect_class' AS protect_class,
way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels
FROM planet_osm_polygon
- WHERE (boundary = 'national_park'
+ WHERE (boundary IN ('aboriginal_lands', 'national_park')
OR leisure = 'nature_reserve'
- OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','97','98','99')))
+ OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6','7','24','97','98','99')))
AND name IS NOT NULL
- ) AS nature_reserve_text
+ ) AS protected_areas_text
properties:
minzoom: 13
- id: amenity-low-priority
diff --git a/roads.mss b/roads.mss
index 78e4331a01..ec355db06a 100644
--- a/roads.mss
+++ b/roads.mss
@@ -3019,7 +3019,8 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
text-fill: #000;
text-face-name: @book-fonts;
- text-min-distance: 40;
+ text-placement: line;
+ text-repeat-distance: @major-highway-text-repeat-distance;
text-halo-radius: 2;
text-halo-fill: @standard-halo-fill;
text-spacing: 760;
@@ -3027,6 +3028,34 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
}
}
+ [highway = 'track'] {
+ [zoom >= 15] {
+ text-name: "[refs]";
+ text-size: 8;
+ text-dy: 5;
+
+ [zoom >= 16] {
+ text-size: 9;
+ text-dy: 7;
+ }
+ [zoom >= 17] {
+ text-size: 11;
+ text-dy: 9;
+ }
+
+ text-clip: false;
+ text-fill: #222;
+ text-face-name: @book-fonts;
+ text-halo-radius: @standard-halo-radius;
+ text-halo-fill: @standard-halo-fill;
+ text-margin: 10;
+ text-placement: line;
+ text-spacing: 760;
+ text-repeat-distance: @major-highway-text-repeat-distance;
+ text-vertical-alignment: middle;
+ }
+ }
+
[highway = 'runway'],
[highway = 'taxiway'] {
[zoom >= 15] {
@@ -3216,7 +3245,7 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */
text-clip: false;
text-placement: line;
text-halo-radius: @standard-halo-radius;
- [highway = 'living_street'] {
+ [highway = 'living_street'] {
text-halo-fill: @living-street-fill;
text-repeat-distance: @major-highway-text-repeat-distance;
}
diff --git a/shapefiles.mss b/shapefiles.mss
index 1bfee4f50a..7fedca80dc 100644
--- a/shapefiles.mss
+++ b/shapefiles.mss
@@ -7,7 +7,7 @@
[zoom >= 3] {
line-width: 0.4;
}
- line-color: @admin-boundaries;
+ line-color: @admin-boundaries-level2;
}
}
diff --git a/symbols/allotments.png b/symbols/allotments.png
index 63ac7bd4ee..c4077a7374 100644
Binary files a/symbols/allotments.png and b/symbols/allotments.png differ
diff --git a/symbols/generating_patterns/allotments.md b/symbols/generating_patterns/allotments.md
index 3e5070fa01..2b8aed5261 100644
--- a/symbols/generating_patterns/allotments.md
+++ b/symbols/generating_patterns/allotments.md
@@ -1,20 +1,3 @@
-Pattern file for allotments was generated in two steps.
-
-SVG file is generated using JSDotPattern generator (http://www.imagico.de/map/jsdotpattern.php) using these options:
-
-- symbol definition: pixel
- - offset: 8 8
- - scale: 0.25
-- symbol pattern (foreground color): #f2faeb
-- point generation
- - distance: 4
- - regular square dot pattern
-- rendering: render (px aligned)
-- pattern size: 64
-
-(direct link: x,64,jdp34225;gs,4,32,32;rd,1,0,0,pixel,0.25,8,8,0,jdp4911,f2faeb,cdebb0;)
-
-This generates file allotments.svg
-
-However, since SVG files are not properly handled by Mapnik, the file was converted to png with alpha channel: symbols/allotments.png
+The allotments pattern is based on allotments.svg
+However, since SVG patterns is not properly handled by Mapnik at this time, the SVG file was converted to a PNG file with alpha channel, allotments.png
diff --git a/symbols/generating_patterns/allotments.svg b/symbols/generating_patterns/allotments.svg
index e7361a4377..d4cba7d071 100644
--- a/symbols/generating_patterns/allotments.svg
+++ b/symbols/generating_patterns/allotments.svg
@@ -1,9 +1,38 @@
-
\ No newline at end of file
+
+
diff --git a/water-features.mss b/water-features.mss
index de0a588dcd..97efe0a816 100644
--- a/water-features.mss
+++ b/water-features.mss
@@ -169,7 +169,6 @@
#springs {
[natural = 'spring'][zoom >= 14] {
marker-file: url('symbols/spring.svg');
- marker-placement: interior;
marker-clip: false;
}
}