diff --git a/CHANGELOG.md b/CHANGELOG.md index cd886bd..f1c91b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `cycleway:left|right=opposite_lane`. See #555. * Cycleways and bicycle-designated paths with no oneway tag are now drawn like a cycleway/path with oneway=no tag. See #601 - +* Cycle tracks on roads rendered in shared light blue when cycleway[:left/:right/:both]:segregrated=no is set. ## v0.6 diff --git a/roads.mss b/roads.mss index 3727afd..fe83904 100644 --- a/roads.mss +++ b/roads.mss @@ -831,14 +831,17 @@ // Eventually overload right border for cycleways #roads_high::outline_right[zoom>=11][cycleway_right_render='track'], +#roads_high::outline_right[zoom>=11][cycleway_right_render='shared_track'], #roads_high::outline_right[zoom>=11][cycleway_right_render='sidewalk'], #roads_high::outline_right[zoom>=12][cycleway_right_render='lane'], #roads_high::outline_right[zoom>=12][cycleway_right_render='busway'], #tunnel::outline_right[zoom>=11][cycleway_right_render='track'], +#tunnel::outline_right[zoom>=11][cycleway_right_render='shared_track'], #tunnel::outline_right[zoom>=11][cycleway_right_render='sidewalk'], #tunnel::outline_right[zoom>=12][cycleway_right_render='lane'], #tunnel::outline_right[zoom>=12][cycleway_right_render='busway'], #bridge::outline_right[zoom>=11][cycleway_right_render='track'], +#bridge::outline_right[zoom>=11][cycleway_right_render='shared_track'], #bridge::outline_right[zoom>=11][cycleway_right_render='sidewalk'], #bridge::outline_right[zoom>=12][cycleway_right_render='lane'], #bridge::outline_right[zoom>=12][cycleway_right_render='busway'], @@ -857,6 +860,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz11_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz11_cycle; } @@ -913,6 +919,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -964,6 +973,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz11_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz11_cycle; } @@ -1020,6 +1032,10 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } + line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1071,6 +1087,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz11_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz11_cycle; } @@ -1127,6 +1146,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1178,6 +1200,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1229,6 +1254,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1280,6 +1308,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1331,6 +1362,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1382,6 +1416,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1433,6 +1470,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1484,6 +1524,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_right_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: 1 * @rdz12_cycle; [cycleway_right_oneway='no'] { line-offset: 1.5 * @rdz12_cycle; } @@ -1521,6 +1564,12 @@ } } +#roads_high::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='yes'], +#roads_high::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='-1'], +#tunnel::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='yes'], +#tunnel::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='-1'], +#bridge::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='yes'], +#bridge::cycleway_right[zoom>=18][cycleway_right_render='shared_track'][cycleway_right_oneway='-1'], #roads_high::cycleway_right[zoom>=18][cycleway_right_render='track'][cycleway_right_oneway='yes'], #roads_high::cycleway_right[zoom>=18][cycleway_right_render='track'][cycleway_right_oneway='-1'], #tunnel::cycleway_right[zoom>=18][cycleway_right_render='track'][cycleway_right_oneway='yes'], @@ -1568,14 +1617,17 @@ // Eventually overload left border for cycleways #roads_high::outline_left[zoom>=11][cycleway_left_render='track'], +#roads_high::outline_left[zoom>=11][cycleway_left_render='shared_track'], #roads_high::outline_left[zoom>=11][cycleway_left_render='sidewalk'], #roads_high::outline_left[zoom>=12][cycleway_left_render='lane'], #roads_high::outline_left[zoom>=12][cycleway_left_render='busway'], #tunnel::outline_left[zoom>=11][cycleway_left_render='track'], +#tunnel::outline_left[zoom>=11][cycleway_left_render='shared_track'], #tunnel::outline_left[zoom>=11][cycleway_left_render='sidewalk'], #tunnel::outline_left[zoom>=12][cycleway_left_render='lane'], #tunnel::outline_left[zoom>=12][cycleway_left_render='busway'], #bridge::outline_left[zoom>=11][cycleway_left_render='track'], +#bridge::outline_left[zoom>=11][cycleway_left_render='shared_track'], #bridge::outline_left[zoom>=11][cycleway_left_render='sidewalk'], #bridge::outline_left[zoom>=12][cycleway_left_render='lane'], #bridge::outline_left[zoom>=12][cycleway_left_render='busway'], @@ -1594,6 +1646,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz11_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz11_cycle; } @@ -1650,6 +1705,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -1701,6 +1759,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz11_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz11_cycle; } @@ -1757,6 +1818,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -1808,6 +1872,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz11_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz11_cycle; } @@ -1864,6 +1931,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -1915,6 +1985,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -1966,6 +2039,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2017,6 +2093,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2068,6 +2147,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2119,6 +2201,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2170,6 +2255,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2221,6 +2309,9 @@ line-dasharray: 6,10; line-color: @mixed-cycle-fill; } + [cycleway_left_render='shared_track'] { + line-color: @mixed-cycle-fill; + } line-offset: -1 * @rdz12_cycle; [cycleway_left_oneway='no'] { line-offset: -1.5 * @rdz12_cycle; } @@ -2258,6 +2349,12 @@ } } +#roads_high::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='yes'], +#roads_high::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='-1'], +#tunnel::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='yes'], +#tunnel::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='-1'], +#bridge::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='yes'], +#bridge::cycleway_left[zoom>=18][cycleway_left_render='shared_track'][cycleway_left_oneway='-1'], #roads_high::cycleway_left[zoom>=18][cycleway_left_render='track'][cycleway_left_oneway='yes'], #roads_high::cycleway_left[zoom>=18][cycleway_left_render='track'][cycleway_left_oneway='-1'], #tunnel::cycleway_left[zoom>=18][cycleway_left_render='track'][cycleway_left_oneway='yes'], diff --git a/taginfo.json b/taginfo.json index 45af83c..1a6a730 100644 --- a/taginfo.json +++ b/taginfo.json @@ -83,21 +83,33 @@ { "key": "cycleway" }, + { + "key": "cycleway:segregated" + }, { "key": "cycleway:both" }, + { + "key": "cycleway:both:segregated" + }, { "key": "cycleway:left" }, { "key": "cycleway:left:oneway" }, + { + "key": "cycleway:left:segregated" + }, { "key": "cycleway:right" }, { "key": "cycleway:right:oneway" }, + { + "key": "cycleway:right:segregated" + }, { "key": "denomination" }, diff --git a/views.sql b/views.sql index da6fc75..014aa3a 100644 --- a/views.sql +++ b/views.sql @@ -53,32 +53,50 @@ CREATE VIEW cyclosm_ways AS ELSE 'no' END AS oneway, CASE + WHEN tags->'cycleway:left' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:left:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway:left' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'sidewalk:left:bicycle' != 'no' AND tags->'sidewalk:left:segregated' = 'yes' THEN 'track' WHEN tags->'cycleway:left' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'sidewalk:left:bicycle' IN ('designated', 'yes') THEN 'sidewalk' WHEN tags->'cycleway:left' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway' + WHEN tags->'cycleway:both' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:left:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway:both' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'sidewalk:both:bicycle' != 'no' AND tags->'sidewalk:left:segregated' = 'yes' THEN 'track' WHEN tags->'cycleway:both' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'sidewalk:both:bicycle' IN ('designated', 'yes') THEN 'sidewalk' WHEN tags->'cycleway:both' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway' + WHEN tags->'cycleway' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:left:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'cycleway' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'cycleway' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway' ELSE NULL END AS cycleway_left_render, CASE + WHEN tags->'cycleway:right' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:right:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway:right' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'sidewalk:right:bicycle' != 'no' AND tags->'sidewalk:left:segregated' = 'yes' THEN 'track' WHEN tags->'cycleway:right' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'sidewalk:right:bicycle' IN ('designated', 'yes') THEN 'sidewalk' WHEN tags->'cycleway:right' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway' + WHEN tags->'cycleway:both' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:right:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway:both' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'sidewalk:both:bicycle' != 'no' AND tags->'sidewalk:left:segregated' = 'yes' THEN 'track' WHEN tags->'cycleway:both' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'sidewalk:both:bicycle' IN ('designated', 'yes') THEN 'sidewalk' WHEN tags->'cycleway:both' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway' + WHEN tags->'cycleway' IN ('track', 'opposite_track') + AND COALESCE(tags->'cycleway:right:segregated',tags->'cycleway:both:segregated', tags->'cycleway:segregated') = 'no' + THEN 'shared_track' WHEN tags->'cycleway' IN ('track', 'opposite_track') THEN 'track' WHEN tags->'cycleway' IN ('lane', 'opposite_lane') THEN 'lane' WHEN tags->'cycleway' IN ('share_busway', 'opposite_share_busway', 'shoulder', 'shared_lane') THEN 'busway'