From 106c79f3973f75b7c287ccc121473de11e670374 Mon Sep 17 00:00:00 2001 From: math1985 Date: Mon, 20 Nov 2017 16:25:31 +0100 Subject: [PATCH 1/2] Render maritime admin boundaries less prominently This requires rendering admin boundaries based on the individual lines, rather than the entire polygons. * This fixes #621 * This possibly impacts solutions to #723, #2234m and #2663. --- admin.mss | 22 ++++++++++++++++++++++ project.mml | 15 +++++++++------ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/admin.mss b/admin.mss index be4b104273..45ece982c4 100644 --- a/admin.mss +++ b/admin.mss @@ -1,4 +1,5 @@ @admin-boundaries: #ac46ac; +@admin-boundaries-maritime: darken(@water-color,15%); /* For performance reasons, the admin border layers are split into three groups for low, middle and high zoom levels. @@ -16,6 +17,9 @@ overlapping borders correctly. background/line-width: 1.2; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 1.2; } [zoom >= 5] { @@ -43,6 +47,9 @@ overlapping borders correctly. background/line-width: 0.6; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 0.6; } [zoom >= 7] { @@ -63,6 +70,9 @@ overlapping borders correctly. background/line-color: white; background/line-width: 0.4; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-join: bevel; line-width: 0.4; line-clip: false; @@ -116,6 +126,9 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 2; line-dasharray: 6,3,2,3,2,3; line-clip: false; @@ -126,6 +139,9 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 2; line-dasharray: 6,3,2,3; line-clip: false; @@ -138,6 +154,9 @@ overlapping borders correctly. background/line-width: 1.5; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 1.5; line-dasharray: 5,2; line-clip: false; @@ -156,6 +175,9 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; + [maritime = 'yes'] { + line-color: @admin-boundaries-maritime; + } line-width: 2; line-dasharray: 2,3; line-clip: false; diff --git a/project.mml b/project.mml index 2120b85528..de00ac0553 100644 --- a/project.mml +++ b/project.mml @@ -1130,11 +1130,12 @@ Layer: table: |- (SELECT way, - admin_level + admin_level, + tags->'maritime' as maritime FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4') - AND osm_id < 0 + AND osm_id > 0 ORDER BY admin_level DESC ) AS admin_low_zoom properties: @@ -1148,11 +1149,12 @@ Layer: table: |- (SELECT way, - admin_level + admin_level, + boundary FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8') - AND osm_id < 0 + AND osm_id > 0 ORDER BY admin_level DESC ) AS admin_mid_zoom properties: @@ -1166,11 +1168,12 @@ Layer: table: |- (SELECT way, - admin_level + admin_level, + boundary FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10') - AND osm_id < 0 + AND osm_id > 0 ORDER BY admin_level::integer DESC -- With 10 as a valid value, we need to do a numeric ordering, not a text ordering ) AS admin_high_zoom properties: From 1ce756d0753d1d2945cfcb03a4ad55eb21f00a2f Mon Sep 17 00:00:00 2001 From: math1985 Date: Sun, 4 Feb 2018 23:08:08 +0100 Subject: [PATCH 2/2] Improvement to maritime border rendering * Admin rendering based on lines instead of relatinos does not work (lack of data in e.g. Poland, and ugly rendering of dashes in case of short sections). Instead, this renders maritime borders based on lines, on top of the full border based on the polygon. * Fix error on high zoom levels. * Render maritime border slightly darker. --- admin.mss | 19 ++++++++-------- project.mml | 62 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 62 insertions(+), 19 deletions(-) diff --git a/admin.mss b/admin.mss index 45ece982c4..fda4a82ace 100644 --- a/admin.mss +++ b/admin.mss @@ -1,5 +1,5 @@ @admin-boundaries: #ac46ac; -@admin-boundaries-maritime: darken(@water-color,15%); +@admin-boundaries-maritime: darken(@water-color,20%); /* For performance reasons, the admin border layers are split into three groups for low, middle and high zoom levels. @@ -17,7 +17,7 @@ overlapping borders correctly. background/line-width: 1.2; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 1.2; @@ -47,7 +47,7 @@ overlapping borders correctly. background/line-width: 0.6; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 0.6; @@ -70,7 +70,7 @@ overlapping borders correctly. background/line-color: white; background/line-width: 0.4; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-join: bevel; @@ -126,7 +126,7 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 2; @@ -139,7 +139,7 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 2; @@ -154,7 +154,7 @@ overlapping borders correctly. background/line-width: 1.5; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 1.5; @@ -166,7 +166,8 @@ overlapping borders correctly. comp-op: darken; } -#admin-high-zoom[zoom >= 13] { +#admin-high-zoom[zoom >= 13], +#admin-high-zoom-maritime[zoom >= 13] { [admin_level = '9'], [admin_level = '10'] { [zoom >= 13] { @@ -175,7 +176,7 @@ overlapping borders correctly. background/line-width: 2; line-join: bevel; line-color: @admin-boundaries; - [maritime = 'yes'] { + [maritime = 'true'] { line-color: @admin-boundaries-maritime; } line-width: 2; diff --git a/project.mml b/project.mml index de00ac0553..67d7a63c53 100644 --- a/project.mml +++ b/project.mml @@ -1123,58 +1123,100 @@ Layer: properties: minzoom: 11 - id: admin-low-zoom + class: admin geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- - (SELECT + ( + (SELECT way, admin_level, - tags->'maritime' as maritime + 'false' as maritime + FROM planet_osm_roads + WHERE boundary = 'administrative' + AND admin_level IN ('0', '1', '2', '3', '4') + AND osm_id < 0 + ) + UNION + (SELECT + way, + admin_level, + 'true' as maritime FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4') AND osm_id > 0 - ORDER BY admin_level DESC + AND tags->'maritime' = 'yes' + ) + ORDER BY maritime, admin_level DESC ) AS admin_low_zoom properties: minzoom: 4 maxzoom: 10 - id: admin-mid-zoom + class: admin geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- - (SELECT + ( + (SELECT + way, + admin_level, + 'false'as maritime + FROM planet_osm_roads + WHERE boundary = 'administrative' + AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8') + AND osm_id < 0 + ) + UNION + (SELECT way, admin_level, - boundary + 'true' as maritime FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8') AND osm_id > 0 - ORDER BY admin_level DESC + AND tags->'maritime' = 'yes' + ) + ORDER BY maritime, admin_level DESC ) AS admin_mid_zoom properties: minzoom: 11 maxzoom: 12 - id: admin-high-zoom + class: admin geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- - (SELECT + ( + (SELECT way, - admin_level, - boundary + admin_level::integer, -- With 10 as a valid value, we need to do a numeric ordering, not a text ordering + 'false' as maritime + FROM planet_osm_roads + WHERE boundary = 'administrative' + AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10') + AND osm_id < 0 + ) + UNION + (SELECT + way, + admin_level::integer, -- With 10 as a valid value, we need to do a numeric ordering, not a text ordering + 'true' as maritime FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10') AND osm_id > 0 - ORDER BY admin_level::integer DESC -- With 10 as a valid value, we need to do a numeric ordering, not a text ordering + AND tags->'maritime' = 'yes' + ) + ORDER BY maritime, admin_level DESC ) AS admin_high_zoom properties: minzoom: 13