Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Electrification style #24

Merged
merged 19 commits into from
Feb 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ data/
standard.xml
maxspeed.xml
signals.xml
electrification.xml
*.mapcss
*.d
382 changes: 382 additions & 0 deletions electrification.mml
Original file line number Diff line number Diff line change
@@ -0,0 +1,382 @@
scale: 1
metatile: 2
name: OpenRailwayMap Electrification
description: A map style for railway electrification
bounds: &world
- -180
- -85.05112877980659
- 180
- 85.05112877980659
center:
- 0
- 0
- 4
format: png
interactivity: false
minzoom: 0
maxzoom: 22
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"

# Various parts to be included later on
_parts:
# Extents are used for tilemill, and don't actually make it to the generated XML
extents: &extents
extent: *world
srs-name: "900913"
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"
extents84: &extents84
extent: *world
srs-name: "WGS84"
srs: "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
osm2pgsql: &osm2pgsql
type: "postgis"
dbname: "gis"
key_field: ""
geometry_field: "way"
extent: "-20037508,-20037508,20037508,20037508"

Stylesheet:
- fonts.mss
- electrification_signals.mss
- electrification.mss
- common.mss

Layer:
- id: railway_line_casing
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage, service,
construction,
construction_railway,
CASE WHEN railway = 'rail' AND usage IN ('tourism', 'military', 'test') AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service = 'siding' THEN 870
WHEN railway = 'rail' AND usage IS NULL AND service = 'yard' THEN 860
WHEN railway = 'rail' AND usage IS NULL AND service = 'spur' THEN 880
WHEN railway = 'rail' AND usage IS NULL AND service = 'crossover' THEN 300
WHEN railway = 'rail' AND usage = 'main' AND service IS NULL THEN 1100
WHEN railway = 'rail' AND usage = 'branch' AND service IS NULL THEN 1000
WHEN railway = 'rail' AND usage = 'industrial' AND service IS NULL THEN 850
WHEN railway = 'rail' AND usage = 'industrial' AND service IN ('siding', 'spur', 'yard', 'crossover') THEN 850
WHEN railway IN ('preserved', 'construction') THEN 400
ELSE 50
END AS rank,
electrified,
frequency,
voltage,
construction_electrified,
construction_frequency,
proposed_electrified,
proposed_frequency,
railway_no_to_null(deelectrified)
FROM
(SELECT
way, railway, usage, service,
construction,
tags->'construction:railway' AS construction_railway,
electrified,
frequency,
voltage,
construction_electrified,
construction_frequency,
proposed_electrified,
proposed_frequency,
deelectrified,
layer
FROM openrailwaymap_osm_line
WHERE railway IN ('rail', 'tram', 'light_rail', 'subway', 'narrow_gauge', 'construction')
) AS r
ORDER by layer, rank NULLS LAST
) AS railway_line_casing
properties:
minzoom: 9
- id: railway_line_low
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage,
NULL AS service,
NULL AS construction,
NULL AS construction_railway,
NULL AS construction_usage, NULL AS construction_service,
NULL AS preserved_railway, NULL AS preserved_service,
NULL AS preserved_usage,
electrification_state AS state,
electrification_state_without_future AS state_now,
railway_voltage_for_state(electrification_state, voltage, construction_voltage, proposed_voltage) AS merged_voltage,
railway_frequency_for_state(electrification_state, frequency, construction_frequency, proposed_frequency) AS merged_frequency,
railway_to_int(voltage) AS voltage,
railway_to_float(frequency) AS frequency
FROM
(SELECT
way, railway, usage,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS electrification_state,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, NULL, NULL, TRUE) AS electrification_state_without_future,
frequency AS frequency,
voltage AS voltage,
construction_frequency AS construction_frequency,
construction_voltage AS construction_voltage,
proposed_frequency AS proposed_frequency,
proposed_voltage AS proposed_voltage,
layer
FROM openrailwaymap_osm_line
WHERE railway = 'rail' AND usage = 'main' AND service IS NULL
) AS r
ORDER BY layer NULLS LAST
) AS openrailwaymap_line_low
properties:
maxzoom: 7
- id: railway_line_med
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage,
NULL AS service,
NULL AS construction,
NULL AS construction_railway,
NULL AS construction_usage, NULL AS construction_service,
NULL AS preserved_railway, NULL AS preserved_service,
NULL AS preserved_usage,
CASE WHEN railway = 'rail' AND usage = 'main' THEN 1100
WHEN railway = 'rail' AND usage = 'branch' THEN 1000
ELSE 50
END AS rank,
electrification_state AS state,
electrification_state_without_future AS state_now,
railway_voltage_for_state(electrification_state, voltage, construction_voltage, proposed_voltage) AS merged_voltage,
railway_frequency_for_state(electrification_state, frequency, construction_frequency, proposed_frequency) AS merged_frequency,
railway_to_int(voltage) AS voltage,
railway_to_float(frequency) AS frequency
FROM
(SELECT
way, railway, usage,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS electrification_state,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, NULL, NULL, TRUE) AS electrification_state_without_future,
frequency AS frequency,
voltage AS voltage,
construction_frequency AS construction_frequency,
construction_voltage AS construction_voltage,
proposed_frequency AS proposed_frequency,
proposed_voltage AS proposed_voltage,
layer
FROM openrailwaymap_osm_line
WHERE railway = 'rail' AND usage IN ('main', 'branch') AND service IS NULL
) AS r
ORDER BY
layer,
rank NULLS LAST
) AS railway_line_med
properties:
minzoom: 8
maxzoom: 8
- id: railway_line_fill
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage, service,
construction,
construction_railway,
construction_usage, construction_service,
preserved_railway, preserved_service,
preserved_usage,
CASE WHEN railway = 'rail' AND usage IN ('tourism', 'military', 'test') AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service = 'siding' THEN 870
WHEN railway = 'rail' AND usage IS NULL AND service = 'yard' THEN 860
WHEN railway = 'rail' AND usage IS NULL AND service = 'spur' THEN 880
WHEN railway = 'rail' AND usage IS NULL AND service = 'crossover' THEN 300
WHEN railway = 'rail' AND usage = 'main' AND service IS NULL THEN 1100
WHEN railway = 'rail' AND usage = 'branch' AND service IS NULL THEN 1000
WHEN railway = 'rail' AND usage = 'industrial' AND service IS NULL THEN 850
WHEN railway = 'rail' AND usage = 'industrial' AND service IN ('siding', 'spur', 'yard', 'crossover') THEN 850
WHEN railway IN ('preserved', 'construction') THEN 400
ELSE 50
END AS rank,
electrification_state_without_future AS state,
railway_voltage_for_state(electrification_state_without_future, voltage, construction_voltage, proposed_voltage) AS voltage,
railway_frequency_for_state(electrification_state_without_future, frequency, construction_frequency, proposed_frequency) AS frequency
FROM
(SELECT
way, railway, usage, service,
construction,
tags->'construction:railway' AS construction_railway,
tags->'construction:usage' AS construction_usage, tags->'construction:service' AS construction_service,
tags->'preserved:railway' AS preserved_railway, tags->'preserved:service' AS preserved_service,
tags->'preserved:usage' AS preserved_usage,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS electrification_state,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, NULL, NULL, TRUE) AS electrification_state_without_future,
frequency AS frequency,
voltage AS voltage,
construction_frequency AS construction_frequency,
construction_voltage AS construction_voltage,
proposed_frequency AS proposed_frequency,
proposed_voltage AS proposed_voltage,
layer
FROM openrailwaymap_osm_line
WHERE railway IN ('rail', 'tram', 'light_rail', 'subway', 'narrow_gauge', 'construction', 'preserved')
) AS r
ORDER BY
layer,
rank NULLS LAST
) AS railway_line_fill
properties:
minzoom: 9
# electrification_future renders with almost the same styling on top of the line fill and thereby adds dashing.
- id: electrification_future
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage, service,
construction,
construction_railway,
construction_usage, construction_service,
preserved_railway, preserved_service,
preserved_usage,
CASE WHEN railway = 'rail' AND usage IN ('tourism', 'military', 'test') AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service = 'siding' THEN 870
WHEN railway = 'rail' AND usage IS NULL AND service = 'yard' THEN 860
WHEN railway = 'rail' AND usage IS NULL AND service = 'spur' THEN 880
WHEN railway = 'rail' AND usage IS NULL AND service = 'crossover' THEN 300
WHEN railway = 'rail' AND usage = 'main' AND service IS NULL THEN 1100
WHEN railway = 'rail' AND usage = 'branch' AND service IS NULL THEN 1000
WHEN railway = 'rail' AND usage = 'industrial' AND service IS NULL THEN 850
WHEN railway = 'rail' AND usage = 'industrial' AND service IN ('siding', 'spur', 'yard', 'crossover') THEN 850
WHEN railway IN ('preserved', 'construction') THEN 400
ELSE 50
END AS rank,
electrification_state AS state,
railway_voltage_for_state(electrification_state, voltage, construction_voltage, proposed_voltage) AS voltage,
railway_frequency_for_state(electrification_state, frequency, construction_frequency, proposed_frequency) AS frequency
FROM
(SELECT
way, railway, usage, service,
construction,
tags->'construction:railway' AS construction_railway,
tags->'construction:usage' AS construction_usage, tags->'construction:service' AS construction_service,
tags->'preserved:railway' AS preserved_railway, tags->'preserved:service' AS preserved_service,
tags->'preserved:usage' AS preserved_usage,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS electrification_state,
frequency AS frequency,
voltage AS voltage,
construction_frequency AS construction_frequency,
construction_voltage AS construction_voltage,
proposed_frequency AS proposed_frequency,
proposed_voltage AS proposed_voltage,
layer
FROM openrailwaymap_osm_line
WHERE railway IN ('rail', 'tram', 'light_rail', 'subway', 'narrow_gauge', 'construction', 'preserved')
) AS r
ORDER BY
layer,
rank NULLS LAST
) AS electrification_future
properties:
minzoom: 9
- id: electrification-signals
geometry: point
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way,
railway,
tags->'railway:signal:electricity' AS signal_electricity,
tags->'railway:signal:electricity:form' AS electricity_form,
tags->'railway:signal:electricity:turn_direction' AS electricity_turn_direction,
tags->'railway:signal:electricity:type' AS electricity_type,
signal_direction
FROM openrailwaymap_osm_signals
WHERE
railway = 'signal'
AND tags ? 'railway:signal:electricity'
) AS railway_signals
properties:
minzoom: 15
- id: railway_text_med
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage, service,
construction,
tags->'construction:railway' AS construction_railway,
CASE WHEN railway = 'rail' AND usage = 'main' THEN 1100
WHEN railway = 'rail' AND usage = 'branch' THEN 1000
ELSE 50
END AS rank,
layer,
railway_electrification_label(electrified, deelectrified, construction_electrified, proposed_electrified, voltage, frequency, construction_voltage, construction_frequency, proposed_voltage, proposed_frequency) AS label,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS state
FROM openrailwaymap_osm_line
WHERE
railway = 'rail' AND usage IN ('main', 'branch') AND service IS NULL
AND (
electrified IS NOT NULL
OR deelectrified IS NOT NULL
OR construction_electrified IS NOT NULL
OR proposed_electrified IS NOT NULL
)
ORDER by layer, rank NULLS LAST
) AS railway_text_high
properties:
minzoom: 8
maxzoom: 8
- id: railway_text_high
geometry: line
<<: *extents
Datasource:
<<: *osm2pgsql
table: |-
(SELECT
way, railway, usage, service,
construction,
tags->'construction:railway' AS construction_railway,
CASE WHEN railway = 'rail' AND usage IN ('usage', 'military', 'test') AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service IS NULL THEN 400
WHEN railway = 'rail' AND usage IS NULL AND service = 'siding' THEN 870
WHEN railway = 'rail' AND usage IS NULL AND service = 'yard' THEN 860
WHEN railway = 'rail' AND usage IS NULL AND service = 'spur' THEN 880
WHEN railway = 'rail' AND usage IS NULL AND service = 'crossover' THEN 300
WHEN railway = 'rail' AND usage = 'main' AND service IS NULL THEN 1100
WHEN railway = 'rail' AND usage = 'branch' AND service IS NULL THEN 1000
WHEN railway = 'rail' AND usage = 'industrial' AND service IS NULL THEN 850
WHEN railway = 'rail' AND usage = 'industrial' AND service IN ('siding', 'spur', 'yard', 'crossover') THEN 850
WHEN railway IN ('preserved', 'construction') THEN 400
ELSE 50
END AS rank,
layer,
railway_electrification_label(electrified, deelectrified, construction_electrified, proposed_electrified, voltage, frequency, construction_voltage, construction_frequency, proposed_voltage, proposed_frequency) AS label,
railway_electrification_state(railway, electrified, deelectrified, abandoned_electrified, construction_electrified, proposed_electrified, FALSE) AS state
FROM openrailwaymap_osm_line
WHERE
railway IN ('rail', 'tram', 'light_rail', 'subway', 'narrow_gauge', 'construction', 'preserved')
AND (
electrified IS NOT NULL
OR deelectrified IS NOT NULL
OR construction_electrified IS NOT NULL
OR proposed_electrified IS NOT NULL
)
ORDER by layer, rank NULLS LAST
) AS railway_text_high
properties:
minzoom: 9
Loading