Merge remote-tracking branch 'upstream/master' into lincomatic-master

This commit is contained in:
jirik 2017-03-21 15:41:01 +01:00
commit 380da2cae7
39 changed files with 390 additions and 172 deletions

View File

@ -4,8 +4,7 @@
Read the layer documentation at **http://openmaptiles.org/schema#landcover** Read the layer documentation at **http://openmaptiles.org/schema#landcover**
### Mapping Diagram ### Mapping Diagram
![Mapping diagram for landcover](http://openmaptiles.org/media/mapping_landcover.png) ![Mapping diagram for landcover](mapping_diagram.png?raw=true)
### ETL diagram ### ETL diagram
![ETL diagram for landcover](http://openmaptiles.org/media/etl_landcover.png) ![ETL diagram for landcover](etl_diagram.png?raw=true)

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -3,19 +3,21 @@
-- etldoc: style="rounded,filled", label="layer_mountain_peak | <z7_> z7+" ] ; -- etldoc: style="rounded,filled", label="layer_mountain_peak | <z7_> z7+" ] ;
CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry, zoom_level integer, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry, zoom_level integer, pixel_width numeric)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, ele int, ele_ft int, "rank" int) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, ele int, ele_ft int, "rank" int) AS $$
-- etldoc: osm_peak_point -> layer_mountain_peak:z7_ -- etldoc: osm_peak_point -> layer_mountain_peak:z7_
SELECT osm_id, geometry, name, name_en, ele::int, ele_ft::int, rank::int SELECT osm_id, geometry, name, name_en, name_de, ele::int, ele_ft::int, rank::int
FROM ( FROM (
SELECT osm_id, geometry, name, name_en, SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele,
round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft,
row_number() OVER ( row_number() OVER (
PARTITION BY LabelGrid(geometry, 100 * pixel_width) PARTITION BY LabelGrid(geometry, 100 * pixel_width)
ORDER BY ( ORDER BY (
substring(ele from E'^(-?\\d+)(\\D|$)')::int + substring(ele from E'^(-?\\d+)(\\D|$)')::int +
(CASE WHEN length(NULLIF(wikipedia, '')) > 0 THEN 10000 ELSE 0 END) + (CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) +
(CASE WHEN length(NULLIF(name, '')) > 0 THEN 10000 ELSE 0 END) (CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END)
) DESC ) DESC
)::int AS "rank" )::int AS "rank"
FROM osm_peak_point FROM osm_peak_point

View File

@ -15,6 +15,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
- name: ele - name: ele
key: ele key: ele
type: string type: string

View File

@ -6,12 +6,13 @@ layer:
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 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
fields: fields:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak.
name_en: The english `name:en` value if available. name_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
elev_m: Elevation (`ele`) in meters. elev_m: Elevation (`ele`) in meters.
datasource: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 srid: 900913
query: (SELECT osm_id, geometry, name, name_en, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t query: (SELECT osm_id, geometry, name, name_en, name_de, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
schema: schema:
- ./layer.sql - ./layer.sql
datasources: datasources:

View File

@ -4,8 +4,11 @@
-- etldoc: osm_city_point -> layer_city:z2_14 -- etldoc: osm_city_point -> layer_city:z2_14
CREATE OR REPLACE FUNCTION layer_city(bbox geometry, zoom_level int, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_city(bbox geometry, zoom_level int, pixel_width numeric)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, place city_place, "rank" int, capital int) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, place city_place, "rank" int, capital int) AS $$
SELECT osm_id, geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, place, "rank", normalize_capital_level(capital) AS capital SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
place, "rank", normalize_capital_level(capital) AS capital
FROM osm_city_point FROM osm_city_point
WHERE geometry && bbox WHERE geometry && bbox
AND ((zoom_level = 2 AND "rank" = 1) AND ((zoom_level = 2 AND "rank" = 1)
@ -14,11 +17,15 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, place c
UNION ALL UNION ALL
SELECT osm_id, geometry, name, SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
place, place,
COALESCE("rank", gridrank + 10), COALESCE("rank", gridrank + 10),
normalize_capital_level(capital) AS capital normalize_capital_level(capital) AS capital
FROM ( FROM (
SELECT osm_id, geometry, name, name_en, place, "rank", capital, SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
place, "rank", capital,
row_number() OVER ( row_number() OVER (
PARTITION BY LabelGrid(geometry, 128 * pixel_width) PARTITION BY LabelGrid(geometry, 128 * pixel_width)
ORDER BY "rank" ASC NULLS LAST, ORDER BY "rank" ASC NULLS LAST,

View File

@ -3,11 +3,13 @@
-- etldoc: label="layer_place | <z0_3> z0-3|<z4_7> z4-7|<z8_11> z8-11| <z12_14> z12-z14+" ] ; -- etldoc: label="layer_place | <z0_3> z0-3|<z4_7> z4-7|<z8_11> z8-11| <z12_14> z12-z14+" ] ;
CREATE OR REPLACE FUNCTION layer_place(bbox geometry, zoom_level int, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_place(bbox geometry, zoom_level int, pixel_width numeric)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text, "rank" int, capital INT) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, class text, "rank" int, capital INT) AS $$
-- etldoc: osm_continent_point -> layer_place:z0_3 -- etldoc: osm_continent_point -> layer_place:z0_3
SELECT SELECT
osm_id, geometry, name, name_en, osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'continent' AS class, 1 AS "rank", NULL::int AS capital 'continent' AS class, 1 AS "rank", NULL::int AS capital
FROM osm_continent_point FROM osm_continent_point
WHERE geometry && bbox AND zoom_level < 4 WHERE geometry && bbox AND zoom_level < 4
@ -18,7 +20,9 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: osm_country_point -> layer_place:z8_11 -- etldoc: osm_country_point -> layer_place:z8_11
-- etldoc: osm_country_point -> layer_place:z12_14 -- etldoc: osm_country_point -> layer_place:z12_14
SELECT SELECT
osm_id, geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'country' AS class, "rank", NULL::int AS capital 'country' AS class, "rank", NULL::int AS capital
FROM osm_country_point FROM osm_country_point
WHERE geometry && bbox AND "rank" <= zoom_level + 1 AND name <> '' WHERE geometry && bbox AND "rank" <= zoom_level + 1 AND name <> ''
@ -29,7 +33,9 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: osm_state_point -> layer_place:z8_11 -- etldoc: osm_state_point -> layer_place:z8_11
-- etldoc: osm_state_point -> layer_place:z12_14 -- etldoc: osm_state_point -> layer_place:z12_14
SELECT SELECT
osm_id, geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'state' AS class, "rank", NULL::int AS capital 'state' AS class, "rank", NULL::int AS capital
FROM osm_state_point FROM osm_state_point
WHERE geometry && bbox AND WHERE geometry && bbox AND
@ -42,7 +48,9 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: osm_island_point -> layer_place:z12_14 -- etldoc: osm_island_point -> layer_place:z12_14
SELECT SELECT
osm_id, geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'island' AS class, 7 AS "rank", NULL::int AS capital 'island' AS class, 7 AS "rank", NULL::int AS capital
FROM osm_island_point FROM osm_island_point
WHERE zoom_level >= 12 WHERE zoom_level >= 12
@ -52,7 +60,9 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: osm_island_polygon -> layer_place:z8_11 -- etldoc: osm_island_polygon -> layer_place:z8_11
-- etldoc: osm_island_polygon -> layer_place:z12_14 -- etldoc: osm_island_polygon -> layer_place:z12_14
SELECT SELECT
osm_id, geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'island' AS class, island_rank(area) AS "rank", NULL::int AS capital 'island' AS class, island_rank(area) AS "rank", NULL::int AS capital
FROM osm_island_polygon FROM osm_island_polygon
WHERE geometry && bbox AND WHERE geometry && bbox AND
@ -66,7 +76,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: layer_city -> layer_place:z8_11 -- etldoc: layer_city -> layer_place:z8_11
-- etldoc: layer_city -> layer_place:z12_14 -- etldoc: layer_city -> layer_place:z12_14
SELECT SELECT
osm_id, geometry, name, name_en, osm_id, geometry, name, name_en, name_de,
place::text AS class, "rank", capital place::text AS class, "rank", capital
FROM layer_city(bbox, zoom_level, pixel_width) FROM layer_city(bbox, zoom_level, pixel_width)
ORDER BY "rank" ASC ORDER BY "rank" ASC

View File

@ -55,6 +55,7 @@ tables:
type: geometry type: geometry
- *name - *name
- *name_en - *name_en
- *name_de
filters: filters:
require: require:
name: ["__any__"] name: ["__any__"]

View File

@ -7,7 +7,8 @@ layer:
We suggest you use different font styles and sizes to create a text hierarchy. We suggest you use different font styles and sizes to create a text hierarchy.
fields: fields:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI. name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI.
name_en: The English `name:en` value or local `name` if not available. name_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
capital: capital:
description: | description: |
The **capital** field marks the The **capital** field marks the
@ -49,10 +50,10 @@ layer:
and states and for cities consists out of a shifted and states and for cities consists out of a shifted
Natural Earth `scalerank` combined with a local rank Natural Earth `scalerank` combined with a local rank
within a grid for cities that do not have a Natural Earth `scalerank`. within a grid for cities that do not have a Natural Earth `scalerank`.
buffer_size: 128 buffer_size: 256
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, name, name_en, class, rank, capital FROM layer_place(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t query: (SELECT geometry, name, name_en, name_de, class, rank, capital FROM layer_place(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
schema: schema:
- ./types.sql - ./types.sql
- ./capital.sql - ./capital.sql

View File

@ -3,8 +3,11 @@
-- etldoc: label="layer_poi | <z14_> z14+" ] ; -- etldoc: label="layer_poi | <z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_poi(bbox geometry, zoom_level integer, pixel_width numeric) CREATE OR REPLACE FUNCTION layer_poi(bbox geometry, zoom_level integer, pixel_width numeric)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text, subclass text, "rank" int) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, class text, subclass text, "rank" int) AS $$
SELECT osm_id, geometry, NULLIF(name, '') AS name, NULLIF(name_en, '') AS name_en, poi_class(subclass) AS class, subclass, SELECT osm_id, geometry, NULLIF(name, '') AS name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
poi_class(subclass) AS class, subclass,
row_number() OVER ( row_number() OVER (
PARTITION BY LabelGrid(geometry, 100 * pixel_width) PARTITION BY LabelGrid(geometry, 100 * pixel_width)
ORDER BY CASE WHEN name = '' THEN 2000 ELSE poi_class_rank(poi_class(subclass)) END ASC ORDER BY CASE WHEN name = '' THEN 2000 ELSE poi_class_rank(poi_class(subclass)) END ASC

View File

@ -1,6 +1,6 @@
# imposm3 mapping file for https://github.com/osm2vectortiles/imposm3 # imposm3 mapping file for https://github.com/osm2vectortiles/imposm3
# Warning: this is not the official imposm3 # Warning: this is not the official imposm3
# aerialway values , see http://taginfo.openstreetmap.org/keys/aerialway#values # aerialway values , see http://taginfo.openstreetmap.org/keys/aerialway#values
def_poi_mapping_aerialway: &poi_mapping_aerialway def_poi_mapping_aerialway: &poi_mapping_aerialway
@ -306,6 +306,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
- name: subclass - name: subclass
type: mapping_value type: mapping_value
mapping: mapping:
@ -336,6 +339,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
- name: subclass - name: subclass
type: mapping_value type: mapping_value
mapping: mapping:
@ -349,4 +355,4 @@ tables:
shop: *poi_mapping_shop shop: *poi_mapping_shop
sport: *poi_mapping_sport sport: *poi_mapping_sport
tourism: *poi_mapping_tourism tourism: *poi_mapping_tourism
waterway: *poi_mapping_waterway waterway: *poi_mapping_waterway

View File

@ -7,7 +7,8 @@ layer:
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 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
fields: fields:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI. name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the POI.
name_en: The english `name:en` value if available. name_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
class: | class: |
More general classes of POIs. If there is no more general `class` for the `subclass` More general classes of POIs. If there is no more general `class` for the `subclass`
this field will contain the same value as `subclass`. this field will contain the same value as `subclass`.
@ -31,9 +32,9 @@ layer:
datasource: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 srid: 900913
query: (SELECT geometry, name, name_en, class, subclass, rank FROM layer_poi(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t query: (SELECT geometry, name, name_en, name_de, class, subclass, rank FROM layer_poi(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
schema: schema:
- ./poi_polygon_update.sql - ./poi_polygon_update.sql
- ./class.sql - ./class.sql
- ./layer.sql - ./layer.sql
datasources: datasources:

View File

@ -4,8 +4,7 @@
Read the layer documentation at **http://openmaptiles.org/schema#transportation** Read the layer documentation at **http://openmaptiles.org/schema#transportation**
### Mapping Diagram ### Mapping Diagram
![Mapping diagram for transportation](http://openmaptiles.org/media/mapping_transportation.png) ![Mapping diagram for transportation](mapping_diagram.png?raw=true)
### ETL diagram ### ETL diagram
![ETL diagram for transportation](http://openmaptiles.org/media/etl_transportation.png) ![ETL diagram for transportation](etl_diagram.png?raw=true)

View File

@ -42,13 +42,3 @@ CREATE OR REPLACE FUNCTION service_value(service TEXT) RETURNS TEXT AS $$
ELSE NULL ELSE NULL
END; END;
$$ LANGUAGE SQL IMMUTABLE STRICT; $$ LANGUAGE SQL IMMUTABLE STRICT;
-- Map Natural Earth types to OSM highway
CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$
SELECT CASE type
WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary'
ELSE type
END;
$$ LANGUAGE SQL IMMUTABLE;

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -4,7 +4,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT;
-- etldoc: layer_transportation[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_transportation[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="<sql> layer_transportation |<z4z6> z4-z6 |<z7z8> z7-z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ; -- etldoc: label="<sql> layer_transportation |<z4> z4 |<z5z6> z5-z6 |<z7> z7 |<z8> z8 |<z9z10> z9-z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int, brunnel TEXT, service TEXT) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int, brunnel TEXT, service TEXT) AS $$
SELECT SELECT
@ -20,21 +20,29 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
brunnel(is_bridge, is_tunnel, is_ford) AS brunnel, brunnel(is_bridge, is_tunnel, is_ford) AS brunnel,
NULLIF(service, '') AS service NULLIF(service, '') AS service
FROM ( FROM (
-- etldoc: ne_10m_roads -> layer_transportation:z4z6 -- etldoc: osm_highway_linestring_gen6 -> layer_transportation:z4
SELECT SELECT
NULL::bigint AS osm_id, geometry, osm_id, geometry, highway, NULL AS railway, NULL AS service,
ne_highway(type) AS highway, NULL AS railway, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford, NULL::boolean AS is_ford,
NULL::boolean AS is_ramp, NULL::boolean AS is_oneway, NULL::boolean AS is_ramp, NULL::boolean AS is_oneway,
0 AS z_order z_order
FROM ne_10m_roads FROM osm_highway_linestring_gen6
WHERE featurecla = 'Road' WHERE zoom_level = 4
AND type IN ('Major Highway', 'Secondary Highway', 'Road')
AND zoom_level BETWEEN 4 AND 6 AND scalerank <= 1 + zoom_level
UNION ALL UNION ALL
-- etldoc: osm_highway_linestring_gen4 -> layer_transportation:z7z8 -- etldoc: osm_highway_linestring_gen5 -> layer_transportation:z5z6
SELECT
osm_id, geometry, highway, NULL AS railway, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford,
NULL::boolean AS is_ramp, NULL::boolean AS is_oneway,
z_order
FROM osm_highway_linestring_gen5
WHERE zoom_level BETWEEN 5 AND 6
UNION ALL
-- etldoc: osm_highway_linestring_gen4 -> layer_transportation:z7
SELECT SELECT
osm_id, geometry, highway, NULL AS railway, NULL AS service, osm_id, geometry, highway, NULL AS railway, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
@ -42,10 +50,10 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
NULL::boolean AS is_ramp, NULL::boolean AS is_oneway, NULL::boolean AS is_ramp, NULL::boolean AS is_oneway,
z_order z_order
FROM osm_highway_linestring_gen4 FROM osm_highway_linestring_gen4
WHERE zoom_level BETWEEN 7 AND 8 WHERE zoom_level = 7
UNION ALL UNION ALL
-- etldoc: osm_highway_linestring_gen3 -> layer_transportation:z9 -- etldoc: osm_highway_linestring_gen3 -> layer_transportation:z8
SELECT SELECT
osm_id, geometry, highway, NULL AS railway, NULL AS service, osm_id, geometry, highway, NULL AS railway, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
@ -53,10 +61,10 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
NULL::boolean AS is_ramp, NULL::boolean AS is_oneway, NULL::boolean AS is_ramp, NULL::boolean AS is_oneway,
z_order z_order
FROM osm_highway_linestring_gen3 FROM osm_highway_linestring_gen3
WHERE zoom_level = 9 WHERE zoom_level = 8
UNION ALL UNION ALL
-- etldoc: osm_highway_linestring_gen2 -> layer_transportation:z10 -- etldoc: osm_highway_linestring_gen2 -> layer_transportation:z9z10
SELECT SELECT
osm_id, geometry, highway, NULL AS railway, NULL AS service, osm_id, geometry, highway, NULL AS railway, NULL AS service,
NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel,
@ -64,7 +72,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
NULL::boolean AS is_ramp, NULL::boolean AS is_oneway, NULL::boolean AS is_ramp, NULL::boolean AS is_oneway,
z_order z_order
FROM osm_highway_linestring_gen2 FROM osm_highway_linestring_gen2
WHERE zoom_level = 10 WHERE zoom_level BETWEEN 9 AND 10
UNION ALL UNION ALL
-- etldoc: osm_highway_linestring_gen1 -> layer_transportation:z11 -- etldoc: osm_highway_linestring_gen1 -> layer_transportation:z11
@ -96,7 +104,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
) )
UNION ALL UNION ALL
-- etldoc: osm_railway_linestring_gen2 -> layer_transportation:z11" -- etldoc: osm_railway_linestring_gen2 -> layer_transportation:z11
SELECT SELECT
osm_id, geometry, NULL AS highway, railway, osm_id, geometry, NULL AS highway, railway,
service_value(service) AS service, service_value(service) AS service,
@ -105,7 +113,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, class text, ramp int, oneway int
WHERE zoom_level = 11 AND (railway='rail' AND service = '') WHERE zoom_level = 11 AND (railway='rail' AND service = '')
UNION ALL UNION ALL
-- etldoc: osm_railway_linestring_gen1 -> layer_transportation:z12" -- etldoc: osm_railway_linestring_gen1 -> layer_transportation:z12
SELECT SELECT
osm_id, geometry, NULL AS highway, railway, osm_id, geometry, NULL AS highway, railway,
service_value(service) AS service, service_value(service) AS service,

View File

@ -11,6 +11,18 @@ generalized_tables:
sql_filter: railway='rail' AND service='' sql_filter: railway='rail' AND service=''
tolerance: 20.0 tolerance: 20.0
# etldoc: imposm3 -> osm_highway_linestring_gen6
highway_linestring_gen6:
source: highway_linestring_gen5
sql_filter: highway IN ('motorway') AND NOT is_area
tolerance: 2000.0
# etldoc: imposm3 -> osm_highway_linestring_gen5
highway_linestring_gen5:
source: highway_linestring_gen4
sql_filter: highway IN ('motorway','trunk') AND NOT is_area
tolerance: 500.0
# etldoc: imposm3 -> osm_highway_linestring_gen4 # etldoc: imposm3 -> osm_highway_linestring_gen4
highway_linestring_gen4: highway_linestring_gen4:
source: highway_linestring_gen3 source: highway_linestring_gen3
@ -43,6 +55,10 @@ name_en_field: &name_en
name: name_en name: name_en
key: name:en key: name:en
type: string type: string
name_de_field: &name_de
name: name_de
key: name:de
type: string
short_name_field: &short_name short_name_field: &short_name
key: short_name key: short_name
name: short_name name: short_name
@ -113,6 +129,7 @@ tables:
- *layer - *layer
- *name - *name
- *name_en - *name_en
- *name_de
- *short_name - *short_name
- *tunnel - *tunnel
- *bridge - *bridge
@ -166,6 +183,7 @@ tables:
- *layer - *layer
- *name - *name
- *name_en - *name_en
- *name_de
- *short_name - *short_name
- *tunnel - *tunnel
- *bridge - *bridge
@ -210,7 +228,7 @@ tables:
- pedestrian - pedestrian
# TODO: Future table for joining networks # TODO: Future table for joining networks
# etldoc: imposm3 -> osm_route_member -> "!!!todo:Networks!!!" # etldoc: imposm3 -> osm_route_member
route_member: route_member:
type: relation_member type: relation_member
columns: columns:
@ -224,6 +242,7 @@ tables:
type: member_type type: member_type
- *ref - *ref
- *network - *network
- *name
mapping: mapping:
route: route:
- road - road

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -4,8 +4,7 @@
Read the layer documentation at **http://openmaptiles.org/schema#transportation_name** Read the layer documentation at **http://openmaptiles.org/schema#transportation_name**
### Mapping Diagram ### Mapping Diagram
![Mapping diagram for transportation_name](http://openmaptiles.org/media/mapping_transportation_name.png) ![Mapping diagram for transportation_name](mapping_diagram.png?raw=true)
### ETL diagram ### ETL diagram
![ETL diagram for transportation_name](http://openmaptiles.org/media/etl_transportation_name.png) ![ETL diagram for transportation_name](etl_diagram.png?raw=true)

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

View File

@ -1,32 +1,44 @@
-- etldoc: layer_transportation_name[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_transportation_name[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_transportation_name | <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ; -- etldoc: label="layer_transportation_name | <z6> z6 | <z7> z7 | <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_transportation_name(bbox geometry, zoom_level integer) CREATE OR REPLACE FUNCTION layer_transportation_name(bbox geometry, zoom_level integer)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, ref text, ref_length int, network text, class text) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, ref text, ref_length int, network text, class text) AS $$
SELECT osm_id, geometry, SELECT osm_id, geometry,
NULLIF(name, '') AS name, NULLIF(name, '') AS name,
COALESCE(NULLIF(name_en, ''), NULLIF(name, '')) AS name_en, COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
NULLIF(ref, ''), NULLIF(LENGTH(ref), 0) AS ref_length, NULLIF(ref, ''), NULLIF(LENGTH(ref), 0) AS ref_length,
--TODO: The road network of the road is not yet implemented --TODO: The road network of the road is not yet implemented
NULL::text AS network, case
when network is not null
then network::text
when length(coalesce(ref, ''))>0
then 'road'
end as network,
highway_class(highway) AS class highway_class(highway) AS class
FROM ( FROM (
-- etldoc: osm_transportation_name_linestring_gen3 -> layer_transportation_name:z8 -- etldoc: osm_transportation_name_linestring_gen4 -> layer_transportation_name:z6
SELECT * FROM osm_transportation_name_linestring_gen4
WHERE zoom_level = 6
UNION ALL
-- etldoc: osm_transportation_name_linestring_gen3 -> layer_transportation_name:z7
SELECT * FROM osm_transportation_name_linestring_gen3 SELECT * FROM osm_transportation_name_linestring_gen3
WHERE zoom_level = 7
UNION ALL
-- etldoc: osm_transportation_name_linestring_gen2 -> layer_transportation_name:z8
SELECT * FROM osm_transportation_name_linestring_gen2
WHERE zoom_level = 8 WHERE zoom_level = 8
UNION ALL UNION ALL
-- etldoc: osm_transportation_name_linestring_gen2 -> layer_transportation_name:z9 -- etldoc: osm_transportation_name_linestring_gen1 -> layer_transportation_name:z9
SELECT * FROM osm_transportation_name_linestring_gen2
WHERE zoom_level = 9
UNION ALL
-- etldoc: osm_transportation_name_linestring_gen1 -> layer_transportation_name:z10 -- etldoc: osm_transportation_name_linestring_gen1 -> layer_transportation_name:z10
-- etldoc: osm_transportation_name_linestring_gen1 -> layer_transportation_name:z11 -- etldoc: osm_transportation_name_linestring_gen1 -> layer_transportation_name:z11
SELECT * FROM osm_transportation_name_linestring_gen1 SELECT * FROM osm_transportation_name_linestring_gen1
WHERE zoom_level BETWEEN 10 AND 11 WHERE zoom_level BETWEEN 9 AND 11
UNION ALL UNION ALL
-- etldoc: osm_transportation_name_linestring -> layer_transportation_name:z12 -- etldoc: osm_transportation_name_linestring -> layer_transportation_name:z12

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -6,44 +6,70 @@ DROP TRIGGER IF EXISTS trigger_refresh ON transportation_name.updates;
-- to allow for nice label rendering -- to allow for nice label rendering
-- Because this works well for roads that do not have relations as well -- Because this works well for roads that do not have relations as well
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen1 CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen2 CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen3 CASCADE;
-- etldoc: osm_highway_linestring -> osm_transportation_name_linestring -- etldoc: osm_highway_linestring -> osm_transportation_name_network
-- etldoc: osm_route_member -> osm_transportation_name_network
CREATE MATERIALIZED VIEW osm_transportation_name_network AS (
SELECT
hl.geometry,
hl.osm_id,
hl.name,
hl.name_en,
hl.name_de,
rm.network_type,
CASE
WHEN (rm.network_type is not null AND nullif(rm.ref::text, '') is not null)
then rm.ref::text
else hl.ref
end as ref,
hl.highway,
ROW_NUMBER() OVER(PARTITION BY hl.osm_id
ORDER BY rm.network_type) AS "rank",
hl.z_order
FROM osm_highway_linestring hl
left join osm_route_member rm on (rm.member = hl.osm_id)
);
CREATE INDEX IF NOT EXISTS osm_transportation_name_network_geometry_idx ON osm_transportation_name_network USING gist(geometry);
-- etldoc: osm_transportation_name_network -> osm_transportation_name_linestring
CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS (
SELECT SELECT
(ST_Dump(geometry)).geom AS geometry, (ST_Dump(geometry)).geom AS geometry,
-- NOTE: The osm_id is no longer the original one which can make it difficult -- NOTE: The osm_id is no longer the original one which can make it difficult
-- to lookup road names by OSM ID -- to lookup road names by OSM ID
member_osm_ids[0] AS osm_id, member_osm_ids[1] AS osm_id,
member_osm_ids, member_osm_ids,
name, name,
name_en, name_en,
name_de,
ref, ref,
highway, highway,
network_type AS network,
z_order z_order
FROM ( FROM (
SELECT SELECT
ST_LineMerge(ST_Collect(geometry)) AS geometry, ST_LineMerge(ST_Collect(geometry)) AS geometry,
name, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en, name_en,
ref, name_de,
highway, ref,
min(z_order) AS z_order, highway,
array_agg(DISTINCT osm_id) AS member_osm_ids network_type,
FROM osm_highway_linestring min(z_order) AS z_order,
-- We only care about highways (not railways) for labeling array_agg(DISTINCT osm_id) AS member_osm_ids
WHERE (name <> '' OR ref <> '') AND NULLIF(highway, '') IS NOT NULL FROM osm_transportation_name_network
GROUP BY name, name_en, highway, ref WHERE ("rank"=1 OR "rank" is null)
AND (name <> '' OR ref <> '')
AND NULLIF(highway, '') IS NOT NULL
group by name, name_en, name_de, ref, highway, network_type
) AS highway_union ) AS highway_union
); );
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist(geometry);
-- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1 -- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1
CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS ( CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS (
SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, member_osm_ids, name, name_en, ref, highway, z_order SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, member_osm_ids, name, name_en, name_de, ref, highway, network, z_order
FROM osm_transportation_name_linestring FROM osm_transportation_name_linestring
WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000 WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000
); );
@ -51,7 +77,7 @@ CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_geometry_idx
-- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2 -- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2
CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS ( CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS (
SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, name_en, ref, highway, z_order SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, name_en, name_de, ref, highway, network, z_order
FROM osm_transportation_name_linestring_gen1 FROM osm_transportation_name_linestring_gen1
WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000 WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000
); );
@ -59,12 +85,20 @@ CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_geometry_idx
-- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3 -- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3
CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS (
SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, name_en, ref, highway, z_order SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, member_osm_ids, name, name_en, name_de, ref, highway, network, z_order
FROM osm_transportation_name_linestring_gen2 FROM osm_transportation_name_linestring_gen2
WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 WHERE highway = 'motorway' AND ST_Length(geometry) > 20000
); );
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry);
-- etldoc: osm_transportation_name_linestring_gen3 -> osm_transportation_name_linestring_gen4
CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen4 AS (
SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, member_osm_ids, name, name_en, name_de, ref, highway, network, z_order
FROM osm_transportation_name_linestring_gen3
WHERE highway = 'motorway' AND ST_Length(geometry) > 20000
);
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen4_geometry_idx ON osm_transportation_name_linestring_gen4 USING gist(geometry);
-- Handle updates -- Handle updates
CREATE SCHEMA IF NOT EXISTS transportation_name; CREATE SCHEMA IF NOT EXISTS transportation_name;
@ -85,6 +119,7 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS
REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1;
REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2;
REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3;
REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen4;
DELETE FROM transportation_name.updates; DELETE FROM transportation_name.updates;
RETURN null; RETURN null;
END; END;

View File

@ -0,0 +1,84 @@
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_network CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen1 CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen2 CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen3 CASCADE;
DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen4 CASCADE;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'route_network_type') THEN
CREATE TYPE route_network_type AS ENUM (
'us-interstate', 'us-highway', 'us-state',
'ca-transcanada',
'gb-motorway', 'gb-trunk'
);
END IF;
END
$$
;
DO $$
BEGIN
BEGIN
ALTER TABLE osm_route_member ADD COLUMN network_type route_network_type;
EXCEPTION
WHEN duplicate_column THEN RAISE NOTICE 'column network_type already exists in network_type.';
END;
END;
$$
;
-- create GBR relations (so we can use it in the same way as other relations)
DO $$
DECLARE gbr_geom geometry;
BEGIN
select st_buffer(geometry, 10000) into gbr_geom from ne_10m_admin_0_countries where iso_a2 = 'GB';
delete from osm_route_member where network IN('omt-gb-motorway', 'omt-gb-trunk');
insert into osm_route_member (member, ref, network)
(
SELECT hw.osm_id, substring(hw.ref from E'^[AM][0-9AM()]+'), 'omt-gb-motorway'
from osm_highway_linestring hw
where length(hw.ref)>0 and ST_Intersects(hw.geometry, gbr_geom)
and hw.highway IN ('motorway')
) UNION (
SELECT hw.osm_id, substring(hw.ref from E'^[AM][0-9AM()]+'), 'omt-gb-trunk'
from osm_highway_linestring hw
where length(hw.ref)>0 and ST_Intersects(hw.geometry, gbr_geom)
and hw.highway IN ('trunk')
)
;
END $$;
-- see http://wiki.openstreetmap.org/wiki/Relation:route#Road_routes
UPDATE osm_route_member
SET network_type =
CASE
WHEN network = 'US:I' THEN 'us-interstate'::route_network_type
WHEN network = 'US:US' THEN 'us-highway'::route_network_type
WHEN network LIKE 'US:__' THEN 'us-state'::route_network_type
-- https://en.wikipedia.org/wiki/Trans-Canada_Highway
-- TODO: improve hierarchical queries using
-- http://www.openstreetmap.org/relation/1307243
-- however the relation does not cover the whole Trans-Canada_Highway
WHEN
(network = 'CA:transcanada') OR
(network = 'CA:BC:primary' AND ref IN ('16')) OR
(name = 'Yellowhead Highway (AB)' AND ref IN ('16')) OR
(network = 'CA:SK' AND ref IN ('16')) OR
(network = 'CA:ON:primary' AND ref IN ('17', '417')) OR
(name = 'Route Transcanadienne (QC)') OR
(network = 'CA:NB' AND ref IN ('2', '16')) OR
(network = 'CA:PEI' AND ref IN ('1')) OR
(network = 'CA:NS' AND ref IN ('104', '105')) OR
(network = 'CA:NL:R' AND ref IN ('1')) OR
(name = ' Trans-Canada Highway (Super)')
THEN 'ca-transcanada'::route_network_type
WHEN network = 'omt-gb-motorway' THEN 'gb-motorway'::route_network_type
WHEN network = 'omt-gb-trunk' THEN 'gb-trunk'::route_network_type
ELSE NULL
END
;

View File

@ -9,10 +9,24 @@ layer:
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 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
fields: fields:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Highways#Names_and_references) value of the highway. name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Highways#Names_and_references) value of the highway.
name_en: The english `name:en` value if available. name_en: English name `name:en` if available, otherwise `name`.
ref: The OSM [`ref`](http://wiki.openstreetmap.org/wiki/Key:ref) tag of the motorway or road. name_de: German name `name:de` if available, otherwise `name` or `name:en`.
ref: The OSM [`ref`](http://wiki.openstreetmap.org/wiki/Key:ref) tag of the motorway or its network.
ref_length: Length of the `ref` field. Useful for having a shield icon as background for labeling motorways. ref_length: Length of the `ref` field. Useful for having a shield icon as background for labeling motorways.
network: The OSM [`network`](http://wiki.openstreetmap.org/wiki/Key:network) tag of the road. network:
description: |
The network type derived mainly from [`network`](http://wiki.openstreetmap.org/wiki/Key:network) tag of the road.
See more info about [`us-*`](http://wiki.openstreetmap.org/wiki/Road_signs_in_the_United_States),
[`ca-transcanada`](https://en.wikipedia.org/wiki/Trans-Canada_Highway),
or [`gb-*`](http://wiki.openstreetmap.org/wiki/United_Kingdom_Tagging_Guidelines#UK_roads).
values:
- us-interstate
- us-highway
- us-state
- ca-transcanada
- gb-motorway
- gb-trunk
- road (default)
class: class:
description: | description: |
Distinguish between more and less important roads. Distinguish between more and less important roads.
@ -32,8 +46,9 @@ layer:
datasource: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 srid: 900913
query: (SELECT geometry, name, name_en, ref, ref_length, class::text FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, name, name_en, name_de, ref, ref_length, network::text, class::text FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./network_type.sql
- ./merge_highways.sql - ./merge_highways.sql
- ./layer.sql - ./layer.sql
datasources: datasources:

View File

@ -7,5 +7,4 @@ Read the layer documentation at **http://openmaptiles.org/schema#water**
![Mapping diagram for water](http://openmaptiles.org/media/mapping_water.png) ![Mapping diagram for water](http://openmaptiles.org/media/mapping_water.png)
### ETL diagram ### ETL diagram
![ETL diagram for water](http://openmaptiles.org/media/etl_water.png) ![ETL diagram for water](etl_diagram.png?raw=true)

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

View File

@ -1,5 +1,11 @@
generalized_tables: generalized_tables:
# etldoc: imposm3 -> osm_water_polygon_gen6
water_polygon_gen6:
source: water_polygon_gen5
sql_filter: area>20000000.0
tolerance: 640.0
# etldoc: imposm3 -> osm_water_polygon_gen5 # etldoc: imposm3 -> osm_water_polygon_gen5
water_polygon_gen5: water_polygon_gen5:
source: water_polygon_gen4 source: water_polygon_gen4
@ -47,6 +53,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
- name: natural - name: natural
key: natural key: natural
type: string type: string

View File

@ -5,66 +5,66 @@ $$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE VIEW water_z0 AS ( CREATE OR REPLACE VIEW water_z0 AS (
-- etldoc: ne_110m_ocean -> water_z0 -- etldoc: ne_110m_ocean -> water_z0
SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean
UNION ALL UNION ALL
-- etldoc: ne_110m_lakes -> water_z0 -- etldoc: ne_110m_lakes -> water_z0
SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes
); );
CREATE OR REPLACE VIEW water_z1 AS ( CREATE OR REPLACE VIEW water_z1 AS (
-- etldoc: ne_110m_ocean -> water_z1 -- etldoc: ne_110m_ocean -> water_z1
SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_110m_ocean
UNION ALL UNION ALL
-- etldoc: ne_110m_lakes -> water_z1 -- etldoc: ne_110m_lakes -> water_z1
SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes SELECT geometry, 'lake'::text AS class FROM ne_110m_lakes
); );
CREATE OR REPLACE VIEW water_z2 AS ( CREATE OR REPLACE VIEW water_z2 AS (
-- etldoc: ne_50m_ocean -> water_z2 -- etldoc: ne_50m_ocean -> water_z2
SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean
UNION ALL UNION ALL
-- etldoc: ne_50m_lakes -> water_z2 -- etldoc: ne_50m_lakes -> water_z2
SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes
); );
CREATE OR REPLACE VIEW water_z4 AS ( CREATE OR REPLACE VIEW water_z4 AS (
-- etldoc: ne_50m_ocean -> water_z4 -- etldoc: ne_50m_ocean -> water_z4
SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_50m_ocean
UNION ALL UNION ALL
-- etldoc: ne_50m_lakes -> water_z4 -- etldoc: ne_50m_lakes -> water_z4
SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes SELECT geometry, 'lake'::text AS class FROM ne_50m_lakes
); );
CREATE OR REPLACE VIEW water_z5 AS ( CREATE OR REPLACE VIEW water_z5 AS (
-- etldoc: ne_10m_ocean -> water_z5 -- etldoc: ne_10m_ocean -> water_z5
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: ne_10m_lakes -> water_z5 -- etldoc: ne_10m_lakes -> water_z5
SELECT geometry, 'lake'::text AS class FROM ne_10m_lakes SELECT geometry, 'lake'::text AS class FROM ne_10m_lakes
); );
CREATE OR REPLACE VIEW water_z6 AS ( CREATE OR REPLACE VIEW water_z6 AS (
-- etldoc: ne_10m_ocean -> water_z6 -- etldoc: ne_10m_ocean -> water_z6
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: ne_10m_lakes -> water_z6 -- etldoc: osm_water_polygon_gen6 -> water_z6
SELECT geometry, 'lake'::text AS class FROM ne_10m_lakes SELECT geometry, 'lake' AS class FROM osm_water_polygon_gen6
); );
CREATE OR REPLACE VIEW water_z7 AS ( CREATE OR REPLACE VIEW water_z7 AS (
-- etldoc: ne_10m_ocean -> water_z7 -- etldoc: ne_10m_ocean -> water_z7
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: osm_water_polygon_gen3 -> water_z7 -- etldoc: osm_water_polygon_gen5 -> water_z7
SELECT geometry, 'lake' AS class FROM osm_water_polygon_gen5 SELECT geometry, 'lake' AS class FROM osm_water_polygon_gen5
); );
CREATE OR REPLACE VIEW water_z8 AS ( CREATE OR REPLACE VIEW water_z8 AS (
-- etldoc: ne_10m_ocean -> water_z8 -- etldoc: ne_10m_ocean -> water_z8
SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean SELECT geometry, 'ocean'::text AS class FROM ne_10m_ocean
UNION ALL UNION ALL
-- etldoc: osm_water_polygon_gen2 -> water_z8 -- etldoc: osm_water_polygon_gen4 -> water_z8
SELECT geometry, 'lake' AS class FROM osm_water_polygon_gen4 SELECT geometry, 'lake' AS class FROM osm_water_polygon_gen4
); );
@ -72,7 +72,7 @@ CREATE OR REPLACE VIEW water_z9 AS (
-- etldoc: osm_ocean_polygon_gen3 -> water_z9 -- etldoc: osm_ocean_polygon_gen3 -> water_z9
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen3 SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen3
UNION ALL UNION ALL
-- etldoc: osm_water_polygon_gen1 -> water_z9 -- etldoc: osm_water_polygon_gen3 -> water_z9
SELECT geometry, 'lake'::text AS class FROM osm_water_polygon_gen3 SELECT geometry, 'lake'::text AS class FROM osm_water_polygon_gen3
); );
@ -88,7 +88,7 @@ CREATE OR REPLACE VIEW water_z11 AS (
-- etldoc: osm_ocean_polygon_gen1 -> water_z11 -- etldoc: osm_ocean_polygon_gen1 -> water_z11
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen1 SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon_gen1
UNION ALL UNION ALL
-- etldoc: osm_water_polygon -> water_z11 -- etldoc: osm_water_polygon_gen1 -> water_z11
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen1 WHERE area > 40000 SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon_gen1 WHERE area > 40000
); );
@ -96,7 +96,7 @@ CREATE OR REPLACE VIEW water_z12 AS (
-- etldoc: osm_ocean_polygon_gen1 -> water_z12 -- etldoc: osm_ocean_polygon_gen1 -> water_z12
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL UNION ALL
-- etldoc: osm_water_polygon -> water_z12 -- etldoc: osm_water_polygon -> water_z12
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 10000 SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 10000
); );
@ -104,7 +104,7 @@ CREATE OR REPLACE VIEW water_z13 AS (
-- etldoc: osm_ocean_polygon -> water_z13 -- etldoc: osm_ocean_polygon -> water_z13
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL UNION ALL
-- etldoc: osm_water_polygon -> water_z13 -- etldoc: osm_water_polygon -> water_z13
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 5000 SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon WHERE area > 5000
); );
@ -112,11 +112,11 @@ CREATE OR REPLACE VIEW water_z14 AS (
-- etldoc: osm_ocean_polygon -> water_z14 -- etldoc: osm_ocean_polygon -> water_z14
SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon SELECT geometry, 'ocean'::text AS class FROM osm_ocean_polygon
UNION ALL UNION ALL
-- etldoc: osm_water_polygon -> water_z14 -- etldoc: osm_water_polygon -> water_z14
SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon SELECT geometry, water_class(waterway) AS class FROM osm_water_polygon
); );
-- etldoc: layer_water [shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_water [shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_water |<z0> z0|<z1>z1|<z2>z2|<z3>z3 |<z4> z4|<z5>z5|<z6>z6|<z7>z7| <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ; -- etldoc: label="layer_water |<z0> z0|<z1>z1|<z2>z2|<z3>z3 |<z4> z4|<z5>z5|<z6>z6|<z7>z7| <z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_water (bbox geometry, zoom_level int)
@ -125,44 +125,44 @@ RETURNS TABLE(geometry geometry, class text) AS $$
-- etldoc: water_z0 -> layer_water:z0 -- etldoc: water_z0 -> layer_water:z0
SELECT * FROM water_z0 WHERE zoom_level = 0 SELECT * FROM water_z0 WHERE zoom_level = 0
UNION ALL UNION ALL
-- etldoc: water_z1 -> layer_water:z1 -- etldoc: water_z1 -> layer_water:z1
SELECT * FROM water_z1 WHERE zoom_level = 1 SELECT * FROM water_z1 WHERE zoom_level = 1
UNION ALL UNION ALL
-- etldoc: water_z2 -> layer_water:z2 -- etldoc: water_z2 -> layer_water:z2
-- etldoc: water_z2 -> layer_water:z3 -- etldoc: water_z2 -> layer_water:z3
SELECT * FROM water_z2 WHERE zoom_level BETWEEN 2 AND 3 SELECT * FROM water_z2 WHERE zoom_level BETWEEN 2 AND 3
UNION ALL UNION ALL
-- etldoc: water_z4 -> layer_water:z4 -- etldoc: water_z4 -> layer_water:z4
SELECT * FROM water_z4 WHERE zoom_level = 4 SELECT * FROM water_z4 WHERE zoom_level = 4
UNION ALL UNION ALL
-- etldoc: water_z5 -> layer_water:z5 -- etldoc: water_z5 -> layer_water:z5
SELECT * FROM water_z5 WHERE zoom_level = 5 SELECT * FROM water_z5 WHERE zoom_level = 5
UNION ALL UNION ALL
-- etldoc: water_z6 -> layer_water:z6 -- etldoc: water_z6 -> layer_water:z6
SELECT * FROM water_z6 WHERE zoom_level = 6 SELECT * FROM water_z6 WHERE zoom_level = 6
UNION ALL UNION ALL
-- etldoc: water_z7 -> layer_water:z7 -- etldoc: water_z7 -> layer_water:z7
SELECT * FROM water_z7 WHERE zoom_level = 7 SELECT * FROM water_z7 WHERE zoom_level = 7
UNION ALL UNION ALL
-- etldoc: water_z8 -> layer_water:z8 -- etldoc: water_z8 -> layer_water:z8
SELECT * FROM water_z8 WHERE zoom_level = 8 SELECT * FROM water_z8 WHERE zoom_level = 8
UNION ALL UNION ALL
-- etldoc: water_z9 -> layer_water:z9 -- etldoc: water_z9 -> layer_water:z9
SELECT * FROM water_z9 WHERE zoom_level = 9 SELECT * FROM water_z9 WHERE zoom_level = 9
UNION ALL UNION ALL
-- etldoc: water_z10 -> layer_water:z10 -- etldoc: water_z10 -> layer_water:z10
SELECT * FROM water_z10 WHERE zoom_level = 10 SELECT * FROM water_z10 WHERE zoom_level = 10
UNION ALL UNION ALL
-- etldoc: water_z11 -> layer_water:z11 -- etldoc: water_z11 -> layer_water:z11
SELECT * FROM water_z11 WHERE zoom_level = 11 SELECT * FROM water_z11 WHERE zoom_level = 11
UNION ALL UNION ALL
-- etldoc: water_z12 -> layer_water:z2 -- etldoc: water_z12 -> layer_water:z12
SELECT * FROM water_z12 WHERE zoom_level = 12 SELECT * FROM water_z12 WHERE zoom_level = 12
UNION ALL UNION ALL
-- etldoc: water_z13 -> layer_water:z13 -- etldoc: water_z13 -> layer_water:z13
SELECT * FROM water_z13 WHERE zoom_level = 13 SELECT * FROM water_z13 WHERE zoom_level = 13
UNION ALL UNION ALL
-- etldoc: water_z14 -> layer_water:z14_ -- etldoc: water_z14 -> layer_water:z14_
SELECT * FROM water_z14 WHERE zoom_level >= 14 SELECT * FROM water_z14 WHERE zoom_level >= 14
) AS zoom_levels ) AS zoom_levels
WHERE geometry && bbox; WHERE geometry && bbox;

View File

@ -3,10 +3,13 @@
-- etldoc: label="layer_water_name | <z9_13> z9_13 | <z14_> z14+" ] ; -- etldoc: label="layer_water_name | <z9_13> z9_13 | <z14_> z14+" ] ;
CREATE OR REPLACE FUNCTION layer_water_name(bbox geometry, zoom_level integer) CREATE OR REPLACE FUNCTION layer_water_name(bbox geometry, zoom_level integer)
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class text) AS $$ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, class text) AS $$
-- etldoc: osm_water_lakeline -> layer_water_name:z9_13 -- etldoc: osm_water_lakeline -> layer_water_name:z9_13
-- etldoc: osm_water_lakeline -> layer_water_name:z14_ -- etldoc: osm_water_lakeline -> layer_water_name:z14_
SELECT osm_id, geometry, name, name_en, 'lake'::text AS class SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'lake'::text AS class
FROM osm_water_lakeline FROM osm_water_lakeline
WHERE geometry && bbox WHERE geometry && bbox
AND ((zoom_level BETWEEN 9 AND 13 AND LineLabel(zoom_level, NULLIF(name, ''), geometry)) AND ((zoom_level BETWEEN 9 AND 13 AND LineLabel(zoom_level, NULLIF(name, ''), geometry))
@ -14,7 +17,10 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
-- etldoc: osm_water_point -> layer_water_name:z9_13 -- etldoc: osm_water_point -> layer_water_name:z9_13
-- etldoc: osm_water_point -> layer_water_name:z14_ -- etldoc: osm_water_point -> layer_water_name:z14_
UNION ALL UNION ALL
SELECT osm_id, geometry, name, name_en, 'lake'::text AS class SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
'lake'::text AS class
FROM osm_water_point FROM osm_water_point
WHERE geometry && bbox AND ( WHERE geometry && bbox AND (
(zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level)) (zoom_level BETWEEN 9 AND 13 AND area > 70000*2^(20-zoom_level))
@ -22,7 +28,10 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t
) )
-- etldoc: osm_marine_point -> layer_water_name:z0_14_ -- etldoc: osm_marine_point -> layer_water_name:z0_14_
UNION ALL UNION ALL
SELECT osm_id, geometry, name, name_en, place::text AS class SELECT osm_id, geometry, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
place::text AS class
FROM osm_marine_point FROM osm_marine_point
WHERE geometry && bbox AND ( WHERE geometry && bbox AND (
place = 'ocean' place = 'ocean'

View File

@ -13,6 +13,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
- name: place - name: place
key: place key: place
type: string type: string

View File

@ -8,7 +8,7 @@ DROP MATERIALIZED VIEW IF EXISTS osm_water_lakeline CASCADE;
CREATE MATERIALIZED VIEW osm_water_lakeline AS ( CREATE MATERIALIZED VIEW osm_water_lakeline AS (
SELECT wp.osm_id, SELECT wp.osm_id,
ll.wkb_geometry AS geometry, ll.wkb_geometry AS geometry,
name, name_en, ST_Area(wp.geometry) AS area name, name_en, name_de, ST_Area(wp.geometry) AS area
FROM osm_water_polygon AS wp FROM osm_water_polygon AS wp
INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
WHERE wp.name <> '' WHERE wp.name <> ''
@ -24,7 +24,7 @@ CREATE OR REPLACE FUNCTION water_lakeline.flag() RETURNS trigger AS $$
BEGIN BEGIN
INSERT INTO water_lakeline.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; INSERT INTO water_lakeline.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
RETURN null; RETURN null;
END; END;
$$ language plpgsql; $$ language plpgsql;
CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS

View File

@ -6,18 +6,19 @@ layer:
which derives nice centerlines from OSM water bodies. Only the most important lakes contain labels. which derives nice centerlines from OSM water bodies. Only the most important lakes contain labels.
fields: fields:
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the water body. name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the water body.
name_en: The english `name:en` value if available. name_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
class: class:
description: | description: |
At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*. At the moment only `lake` since no ocean parts are labelled. *Reserved for future use*.
values: values:
- lake - lake
buffer_size: 64 buffer_size: 256
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 srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
datasource: datasource:
geometry_field: geometry geometry_field: geometry
srid: 900913 srid: 900913
query: (SELECT geometry, name, name_en, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, name, name_en, name_de, class FROM layer_water_name(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./merge_marine_rank.sql - ./merge_marine_rank.sql
- ./water_lakeline.sql - ./water_lakeline.sql

View File

@ -8,13 +8,13 @@ DROP MATERIALIZED VIEW IF EXISTS osm_water_point CASCADE;
CREATE MATERIALIZED VIEW osm_water_point AS ( CREATE MATERIALIZED VIEW osm_water_point AS (
SELECT SELECT
wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry, wp.osm_id, ST_PointOnSurface(wp.geometry) AS geometry,
wp.name, wp.name_en, ST_Area(wp.geometry) AS area wp.name, wp.name_en, wp.name_de, ST_Area(wp.geometry) AS area
FROM osm_water_polygon AS wp FROM osm_water_polygon AS wp
LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id
WHERE ll.osm_id IS NULL AND wp.name <> '' WHERE ll.osm_id IS NULL AND wp.name <> ''
); );
CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry);
-- Handle updates -- Handle updates
CREATE SCHEMA IF NOT EXISTS water_point; CREATE SCHEMA IF NOT EXISTS water_point;
@ -24,7 +24,7 @@ CREATE OR REPLACE FUNCTION water_point.flag() RETURNS trigger AS $$
BEGIN BEGIN
INSERT INTO water_point.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; INSERT INTO water_point.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
RETURN null; RETURN null;
END; END;
$$ language plpgsql; $$ language plpgsql;
CREATE OR REPLACE FUNCTION water_point.refresh() RETURNS trigger AS CREATE OR REPLACE FUNCTION water_point.refresh() RETURNS trigger AS

View File

@ -32,6 +32,9 @@ tables:
- name: name_en - name: name_en
key: name:en key: name:en
type: string type: string
- name: name_de
key: name:de
type: string
mapping: mapping:
waterway: waterway:
- stream - stream

View File

@ -14,21 +14,21 @@ DROP MATERIALIZED VIEW IF EXISTS osm_important_waterway_linestring_gen3 CASCADE;
CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS ( CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS (
SELECT SELECT
(ST_Dump(geometry)).geom AS geometry, (ST_Dump(geometry)).geom AS geometry,
name, name_en name, name_en, name_de
FROM ( FROM (
SELECT SELECT
ST_LineMerge(ST_Union(geometry)) AS geometry, ST_LineMerge(ST_Union(geometry)) AS geometry,
name, COALESCE(NULLIF(name_en, ''), name) AS name_en name, name_en, name_de
FROM osm_waterway_linestring FROM osm_waterway_linestring
WHERE name <> '' AND waterway = 'river' WHERE name <> '' AND waterway = 'river'
GROUP BY name, name_en GROUP BY name, name_en, name_de
) AS waterway_union ) AS waterway_union
); );
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry);
-- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1 -- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1
CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen1 AS ( CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen1 AS (
SELECT ST_Simplify(geometry, 60) AS geometry, name, name_en SELECT ST_Simplify(geometry, 60) AS geometry, name, name_en, name_de
FROM osm_important_waterway_linestring FROM osm_important_waterway_linestring
WHERE ST_Length(geometry) > 1000 WHERE ST_Length(geometry) > 1000
); );
@ -36,7 +36,7 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen1_geometry_idx O
-- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2 -- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2
CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen2 AS ( CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen2 AS (
SELECT ST_Simplify(geometry, 100) AS geometry, name, name_en SELECT ST_Simplify(geometry, 100) AS geometry, name, name_en, name_de
FROM osm_important_waterway_linestring_gen1 FROM osm_important_waterway_linestring_gen1
WHERE ST_Length(geometry) > 4000 WHERE ST_Length(geometry) > 4000
); );
@ -44,7 +44,7 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen2_geometry_idx O
-- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3 -- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3
CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS ( CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS (
SELECT ST_Simplify(geometry, 200) AS geometry, name, name_en SELECT ST_Simplify(geometry, 200) AS geometry, name, name_en, name_de
FROM osm_important_waterway_linestring_gen2 FROM osm_important_waterway_linestring_gen2
WHERE ST_Length(geometry) > 8000 WHERE ST_Length(geometry) > 8000
); );
@ -86,6 +86,3 @@ CREATE CONSTRAINT TRIGGER trigger_refresh
INITIALLY DEFERRED INITIALLY DEFERRED
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE waterway.refresh(); EXECUTE PROCEDURE waterway.refresh();

View File

@ -1,65 +1,66 @@
-- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3 -- etldoc: ne_110m_rivers_lake_centerlines -> waterway_z3
CREATE OR REPLACE VIEW waterway_z3 AS ( CREATE OR REPLACE VIEW waterway_z3 AS (
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de
FROM ne_110m_rivers_lake_centerlines FROM ne_110m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4 -- etldoc: ne_50m_rivers_lake_centerlines -> waterway_z4
CREATE OR REPLACE VIEW waterway_z4 AS ( CREATE OR REPLACE VIEW waterway_z4 AS (
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de
FROM ne_50m_rivers_lake_centerlines FROM ne_50m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6 -- etldoc: ne_10m_rivers_lake_centerlines -> waterway_z6
CREATE OR REPLACE VIEW waterway_z6 AS ( CREATE OR REPLACE VIEW waterway_z6 AS (
SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en SELECT geometry, 'river'::text AS class, NULL::text AS name, NULL::text AS name_en, NULL::text AS name_de
FROM ne_10m_rivers_lake_centerlines FROM ne_10m_rivers_lake_centerlines
WHERE featurecla = 'River' WHERE featurecla = 'River'
); );
-- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9 -- etldoc: osm_important_waterway_linestring_gen3 -> waterway_z9
CREATE OR REPLACE VIEW waterway_z9 AS ( CREATE OR REPLACE VIEW waterway_z9 AS (
SELECT geometry, 'river'::text AS class, name, name_en FROM osm_important_waterway_linestring_gen3 SELECT geometry, 'river'::text AS class, name, name_en, name_de FROM osm_important_waterway_linestring_gen3
); );
-- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10 -- etldoc: osm_important_waterway_linestring_gen2 -> waterway_z10
CREATE OR REPLACE VIEW waterway_z10 AS ( CREATE OR REPLACE VIEW waterway_z10 AS (
SELECT geometry, 'river'::text AS class, name, name_en FROM osm_important_waterway_linestring_gen2 SELECT geometry, 'river'::text AS class, name, name_en, name_de FROM osm_important_waterway_linestring_gen2
); );
-- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11 -- etldoc:osm_important_waterway_linestring_gen1 -> waterway_z11
CREATE OR REPLACE VIEW waterway_z11 AS ( CREATE OR REPLACE VIEW waterway_z11 AS (
SELECT geometry, 'river'::text AS class, name, name_en FROM osm_important_waterway_linestring_gen1 SELECT geometry, 'river'::text AS class, name, name_en, name_de FROM osm_important_waterway_linestring_gen1
); );
-- etldoc: osm_waterway_linestring -> waterway_z12 -- etldoc: osm_waterway_linestring -> waterway_z12
CREATE OR REPLACE VIEW waterway_z12 AS ( CREATE OR REPLACE VIEW waterway_z12 AS (
SELECT geometry, waterway AS class, name, name_en FROM osm_waterway_linestring SELECT geometry, waterway AS class, name, name_en, name_de FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal') WHERE waterway IN ('river', 'canal')
); );
-- etldoc: osm_waterway_linestring -> waterway_z13 -- etldoc: osm_waterway_linestring -> waterway_z13
CREATE OR REPLACE VIEW waterway_z13 AS ( CREATE OR REPLACE VIEW waterway_z13 AS (
SELECT geometry, waterway::text AS class, name, name_en FROM osm_waterway_linestring SELECT geometry, waterway::text AS class, name, name_en, name_de FROM osm_waterway_linestring
WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch')
); );
-- etldoc: osm_waterway_linestring -> waterway_z14 -- etldoc: osm_waterway_linestring -> waterway_z14
CREATE OR REPLACE VIEW waterway_z14 AS ( CREATE OR REPLACE VIEW waterway_z14 AS (
SELECT geometry, waterway::text AS class, name, name_en FROM osm_waterway_linestring SELECT geometry, waterway::text AS class, name, name_en, name_de FROM osm_waterway_linestring
); );
-- etldoc: layer_waterway[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: layer_waterway[shape=record fillcolor=lightpink, style="rounded,filled",
-- etldoc: label="layer_waterway | <z3> z3 |<z4_5> z4-z5 |<z6_8> z6-8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14> z14+" ]; -- etldoc: label="layer_waterway | <z3> z3 |<z4_5> z4-z5 |<z6_8> z6-8 | <z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14> z14+" ];
CREATE OR REPLACE FUNCTION layer_waterway(bbox geometry, zoom_level int) CREATE OR REPLACE FUNCTION layer_waterway(bbox geometry, zoom_level int)
RETURNS TABLE(geometry geometry, class text, name text, name_en text) AS $$ RETURNS TABLE(geometry geometry, class text, name text, name_en text, name_de text) AS $$
SELECT geometry, class, SELECT geometry, class,
NULLIF(name, '') AS name, NULLIF(name, '') AS name,
COALESCE(NULLIF(name_en, ''), name) AS name_en COALESCE(NULLIF(name_en, ''), name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de
FROM ( FROM (
-- etldoc: waterway_z3 -> layer_waterway:z3 -- etldoc: waterway_z3 -> layer_waterway:z3
SELECT * FROM waterway_z3 WHERE zoom_level = 3 SELECT * FROM waterway_z3 WHERE zoom_level = 3

View File

@ -10,7 +10,8 @@ layer:
name: | name: |
The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the waterway. The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the waterway.
The `name` field may be empty for NaturalEarth data or at lower zoom levels. The `name` field may be empty for NaturalEarth data or at lower zoom levels.
name_en: The english `name:en` value if available. name_en: English name `name:en` if available, otherwise `name`.
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
class: class:
description: | description: |
The original value of the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag. The original value of the [`waterway`](http://wiki.openstreetmap.org/wiki/Key:waterway) tag.
@ -22,7 +23,7 @@ layer:
- ditch - ditch
datasource: datasource:
geometry_field: geometry geometry_field: geometry
query: (SELECT geometry, name, name_en, class FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t query: (SELECT geometry, name, name_en, name_de, class FROM layer_waterway(!bbox!, z(!scale_denominator!))) AS t
schema: schema:
- ./merge_waterway.sql - ./merge_waterway.sql
- ./waterway.sql - ./waterway.sql