diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 068b876..8d9a295 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,4 +13,4 @@ Your pull request must: * Be possible to merge automatically. -When you rea making PR that adds new spatial features to OpenMapTiles schema, please make also PR for at least one of our GL styles to show it on the map. Visual check is crucial. \ No newline at end of file +When you are making a PR that adds new spatial features to OpenMapTiles schema, please make also PR for at least one of our GL styles to show it on the map. Visual check is crucial. diff --git a/.gitignore b/.gitignore index cae69c7..9696f56 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,6 @@ wikidata/* # generated source files build/* -# any IntelliJ IDEA files +# any IDE files .idea/ +.vscode/ diff --git a/Makefile b/Makefile index 6e674b5..4069f0c 100644 --- a/Makefile +++ b/Makefile @@ -154,7 +154,8 @@ etl-graph: # generate etl graph for a certain layer, e.g. etl-graph-building, etl-graph-place etl-graph-%: layers/% build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/$*/$*.yaml ./build/devdoc + docker run --rm -u $$(id -u $${USER}):$$(id -g $${USER}) -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-etlgraph layers/$*/$*.yaml ./build/devdoc + cp ./build/devdoc/etl_$*.png layers/$*/etl_diagram.png mappingLayers = $(notdir $(patsubst %/mapping.yaml,%, $(wildcard layers/*/mapping.yaml))) # layers with mapping.yaml @@ -166,7 +167,8 @@ mapping-graph: @echo 'Valid layers: $(mappingLayers)' mapping-graph-%: ./layers/%/mapping.yaml build/devdoc - docker run --rm -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-mapping-graph layers/$*/$*.yaml ./build/devdoc/mapping-diagram-$* + docker run --rm -u $$(id -u $${USER}):$$(id -g $${USER}) -v $$(pwd):/tileset openmaptiles/openmaptiles-tools generate-mapping-graph layers/$*/$*.yaml ./build/devdoc/mapping-diagram-$* + cp ./build/devdoc/mapping-diagram-$*.png layers/$*/mapping_diagram.png # generate all etl and mapping graphs generate-devdoc: $(addprefix etl-graph-,$(layers)) $(addprefix mapping-graph-,$(mappingLayers)) diff --git a/README.md b/README.md index 208f4af..1ef1c6e 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ You can start from several GL styles supporting the OpenMapTiles vector schema. - [Klokantech 3D](https://github.com/openmaptiles/klokantech-3d-gl-style) - [Fiord Color](https://github.com/openmaptiles/fiord-color-gl-style) - [Toner](https://github.com/openmaptiles/toner-gl-style) +- [OSM Liberty](https://github.com/maputnik/osm-liberty) We also ported over our favorite old raster styles (TM2). @@ -105,6 +106,16 @@ docker-compose run import-lakelines docker-compose run import-osmborder ``` +**[Optional]** +Import latest Wikidata. If an OSM feature has [Key:wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata), OpenMapTiles check corresponding item in Wikidata and use its [labels](https://www.wikidata.org/wiki/Help:Label) for languages listed in [openmaptiles.yaml](openmaptiles.yaml). So the generated vector tiles includes multi-languages in name field. + +Beware that current [Wikidata dump](https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.json.gz) is more than 55GB, it takes time to download and import it. If you just want to have a quickstart on OpenMapTiles, just skip this step. + +```bash +make download-wikidata +docker-compose run import-wikidata +``` + [Download OpenStreetMap data extracts](http://download.geofabrik.de/) and store the PBF file in the `./data` directory. ```bash diff --git a/docker-compose.yml b/docker-compose.yml index 478d5c0..13aacfb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,7 @@ services: networks: - postgres_conn import-water: - image: "openmaptiles/import-water:1.1" + image: "openmaptiles/import-water:1.2" env_file: .env networks: - postgres_conn @@ -68,7 +68,7 @@ services: - ./build:/mapping - cache:/cache import-sql: - image: "openmaptiles/import-sql:0.8" + image: "openmaptiles/import-sql:1.0" env_file: .env networks: - postgres_conn diff --git a/layers/aerodrome_label/aerodrome_label.yaml b/layers/aerodrome_label/aerodrome_label.yaml index 4942723..17b0fbe 100644 --- a/layers/aerodrome_label/aerodrome_label.yaml +++ b/layers/aerodrome_label/aerodrome_label.yaml @@ -27,6 +27,8 @@ layer: ele_ft: Elevation (`ele`) in feets. datasource: geometry_field: geometry + key_field: osm_id + key_field_as_attribute: no srid: 900913 query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, iata, icao, ele, ele_ft FROM layer_aerodrome_label (!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: diff --git a/layers/aerodrome_label/etl_diagram.png b/layers/aerodrome_label/etl_diagram.png index 3e30825..3879664 100644 Binary files a/layers/aerodrome_label/etl_diagram.png and b/layers/aerodrome_label/etl_diagram.png differ diff --git a/layers/aerodrome_label/mapping_diagram.png b/layers/aerodrome_label/mapping_diagram.png index bcaf83a..cbbb899 100644 Binary files a/layers/aerodrome_label/mapping_diagram.png and b/layers/aerodrome_label/mapping_diagram.png differ diff --git a/layers/aeroway/etl_diagram.png b/layers/aeroway/etl_diagram.png index c2b3818..a895735 100644 Binary files a/layers/aeroway/etl_diagram.png and b/layers/aeroway/etl_diagram.png differ diff --git a/layers/aeroway/mapping_diagram.png b/layers/aeroway/mapping_diagram.png index 7a102c4..ca19fec 100644 Binary files a/layers/aeroway/mapping_diagram.png and b/layers/aeroway/mapping_diagram.png differ diff --git a/layers/boundary/etl_diagram.png b/layers/boundary/etl_diagram.png index 12e4cea..53f4eef 100644 Binary files a/layers/boundary/etl_diagram.png and b/layers/boundary/etl_diagram.png differ diff --git a/layers/building/etl_diagram.png b/layers/building/etl_diagram.png index 6b52667..8a43f94 100644 Binary files a/layers/building/etl_diagram.png and b/layers/building/etl_diagram.png differ diff --git a/layers/building/mapping_diagram.png b/layers/building/mapping_diagram.png index 887f487..8d8341f 100644 Binary files a/layers/building/mapping_diagram.png and b/layers/building/mapping_diagram.png differ diff --git a/layers/housenumber/etl_diagram.png b/layers/housenumber/etl_diagram.png index 5dcd499..add427d 100644 Binary files a/layers/housenumber/etl_diagram.png and b/layers/housenumber/etl_diagram.png differ diff --git a/layers/housenumber/mapping_diagram.png b/layers/housenumber/mapping_diagram.png index bcaf83a..a30e718 100644 Binary files a/layers/housenumber/mapping_diagram.png and b/layers/housenumber/mapping_diagram.png differ diff --git a/layers/landcover/etl_diagram.png b/layers/landcover/etl_diagram.png index ba8f588..8fb941a 100644 Binary files a/layers/landcover/etl_diagram.png and b/layers/landcover/etl_diagram.png differ diff --git a/layers/landcover/landcover.sql b/layers/landcover/landcover.sql index f157047..b949563 100644 --- a/layers/landcover/landcover.sql +++ b/layers/landcover/landcover.sql @@ -21,7 +21,7 @@ CREATE OR REPLACE FUNCTION landcover_class(landuse VARCHAR, "natural" VARCHAR, l OR leisure IN ('park', 'garden') THEN 'grass' WHEN "natural"='wetland' OR wetland IN ('bog', 'swamp', 'wet_meadow', 'marsh', 'reedbed', 'saltern', 'tidalflat', 'saltmarsh', 'mangrove') THEN 'wetland' - WHEN "natural"IN ('beach', 'sand') THEN 'sand' + WHEN "natural"IN ('beach', 'sand', 'dune') THEN 'sand' ELSE NULL END; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/landcover/landcover.yaml b/layers/landcover/landcover.yaml index 4c29aea..6920b34 100644 --- a/layers/landcover/landcover.yaml +++ b/layers/landcover/landcover.yaml @@ -29,6 +29,7 @@ layer: - bare_rock - beach - bog + - dune - farm - farmland - forest diff --git a/layers/landcover/mapping.yaml b/layers/landcover/mapping.yaml index 90e7372..f5193d8 100644 --- a/layers/landcover/mapping.yaml +++ b/layers/landcover/mapping.yaml @@ -92,6 +92,7 @@ tables: - scree - beach - sand + - dune leisure: - park - garden diff --git a/layers/landcover/mapping_diagram.png b/layers/landcover/mapping_diagram.png index a0d708f..2080160 100644 Binary files a/layers/landcover/mapping_diagram.png and b/layers/landcover/mapping_diagram.png differ diff --git a/layers/landuse/etl_diagram.png b/layers/landuse/etl_diagram.png index a89a48c..bf447a3 100644 Binary files a/layers/landuse/etl_diagram.png and b/layers/landuse/etl_diagram.png differ diff --git a/layers/landuse/mapping_diagram.png b/layers/landuse/mapping_diagram.png index 2ee445e..51a2ec9 100644 Binary files a/layers/landuse/mapping_diagram.png and b/layers/landuse/mapping_diagram.png differ diff --git a/layers/mountain_peak/etl_diagram.png b/layers/mountain_peak/etl_diagram.png index 403d43c..e9a5bd7 100644 Binary files a/layers/mountain_peak/etl_diagram.png and b/layers/mountain_peak/etl_diagram.png differ diff --git a/layers/mountain_peak/mapping_diagram.png b/layers/mountain_peak/mapping_diagram.png index 77e06db..e0c5ceb 100644 Binary files a/layers/mountain_peak/mapping_diagram.png and b/layers/mountain_peak/mapping_diagram.png differ diff --git a/layers/mountain_peak/mountain_peak.yaml b/layers/mountain_peak/mountain_peak.yaml index 1d75bae..35a75b8 100644 --- a/layers/mountain_peak/mountain_peak.yaml +++ b/layers/mountain_peak/mountain_peak.yaml @@ -8,7 +8,7 @@ layer: name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. 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: | Use the **class** to differentiate between mountain peak and volcano. values: @@ -19,6 +19,8 @@ layer: rank: Rank of the peak within one tile (starting at 1 that is the most important peak). datasource: geometry_field: geometry + key_field: osm_id + key_field_as_attribute: no srid: 900913 query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: diff --git a/layers/park/etl_diagram.png b/layers/park/etl_diagram.png index 4eb1ea5..2ee4242 100644 Binary files a/layers/park/etl_diagram.png and b/layers/park/etl_diagram.png differ diff --git a/layers/park/mapping_diagram.png b/layers/park/mapping_diagram.png index 0c59a6d..0f1a4ef 100644 Binary files a/layers/park/mapping_diagram.png and b/layers/park/mapping_diagram.png differ diff --git a/layers/place/etl_diagram.png b/layers/place/etl_diagram.png index 223187c..f63eb6c 100644 Binary files a/layers/place/etl_diagram.png and b/layers/place/etl_diagram.png differ diff --git a/layers/place/mapping_diagram.png b/layers/place/mapping_diagram.png index d96830a..6a43d74 100644 Binary files a/layers/place/mapping_diagram.png and b/layers/place/mapping_diagram.png differ diff --git a/layers/poi/class.sql b/layers/poi/class.sql index 949dd33..c991d22 100644 --- a/layers/poi/class.sql +++ b/layers/poi/class.sql @@ -30,7 +30,7 @@ $$ LANGUAGE SQL IMMUTABLE; CREATE OR REPLACE FUNCTION poi_class(subclass TEXT, mapping_key TEXT) RETURNS TEXT AS $$ SELECT CASE - WHEN subclass IN ('accessories','antiques','beauty','bed','boutique','camera','carpet','charity','chemist','chocolate','coffee','computer','confectionery','convenience','copyshop','cosmetics','garden_centre','doityourself','erotic','electronics','fabric','florist','frozen_food','furniture','video_games','video','general','gift','hardware','hearing_aids','hifi','ice_cream','interior_decoration','jewelry','kiosk','lamps','mall','massage','motorcycle','mobile_phone','newsagent','optician','outdoor','perfumery','perfume','pet','photo','second_hand','shoes','sports','stationery','tailor','tattoo','ticket','tobacco','toys','travel_agency','watches','weapons','wholesale') THEN 'shop' + WHEN subclass IN ('accessories','antiques','beauty','bed','boutique','camera','carpet','charity','chemist','coffee','computer','convenience','copyshop','cosmetics','garden_centre','doityourself','erotic','electronics','fabric','florist','frozen_food','furniture','video_games','video','general','gift','hardware','hearing_aids','hifi','ice_cream','interior_decoration','jewelry','kiosk','lamps','mall','massage','motorcycle','mobile_phone','newsagent','optician','outdoor','perfumery','perfume','pet','photo','second_hand','shoes','sports','stationery','tailor','tattoo','ticket','tobacco','toys','travel_agency','watches','weapons','wholesale') THEN 'shop' WHEN subclass IN ('townhall','public_building','courthouse','community_centre') THEN 'town_hall' WHEN subclass IN ('golf','golf_course','miniature_golf') THEN 'golf' WHEN subclass IN ('fast_food','food_court') THEN 'fast_food' diff --git a/layers/poi/etl_diagram.png b/layers/poi/etl_diagram.png index 314855c..bbabf80 100644 Binary files a/layers/poi/etl_diagram.png and b/layers/poi/etl_diagram.png differ diff --git a/layers/poi/mapping.yaml b/layers/poi/mapping.yaml index d639877..3fb327b 100644 --- a/layers/poi/mapping.yaml +++ b/layers/poi/mapping.yaml @@ -314,134 +314,78 @@ def_poi_mapping_tourism: &poi_mapping_tourism def_poi_mapping_waterway: &poi_mapping_waterway - dock +def_poi_fields: &poi_fields + - name: osm_id + type: id + - name: geometry + type: geometry + - name: name + key: name + type: string + - name: name_en + key: name:en + type: string + - name: name_de + key: name:de + type: string + - name: tags + type: hstore_tags + - name: subclass + type: mapping_value + - name: mapping_key + type: mapping_key + - name: station + key: station + type: string + - name: funicular + key: funicular + type: string + - name: information + key: information + type: string + - name: uic_ref + key: uic_ref + type: string + - name: religion + key: religion + type: string + - name: level + key: level + type: integer + - name: indoor + key: indoor + type: bool + - name: layer + key: layer + type: integer + - name: sport + key: sport + type: string + +def_poi_mapping: &poi_mapping + aerialway: *poi_mapping_aerialway + amenity: *poi_mapping_amenity + barrier: *poi_mapping_barrier + building: *poi_mapping_building + highway: *poi_mapping_highway + historic: *poi_mapping_historic + landuse: *poi_mapping_landuse + leisure: *poi_mapping_leisure + railway: *poi_mapping_railway + shop: *poi_mapping_shop + sport: *poi_mapping_sport + tourism: *poi_mapping_tourism + waterway: *poi_mapping_waterway + tables: # etldoc: imposm3 -> osm_poi_point poi_point: type: point - fields: - - name: osm_id - type: id - - name: geometry - type: geometry - - name: name - key: name - type: string - - name: name_en - key: name:en - type: string - - name: name_de - key: name:de - type: string - - name: tags - type: hstore_tags - - name: subclass - type: mapping_value - - name: mapping_key - type: mapping_key - - name: station - key: station - type: string - - name: funicular - key: funicular - type: string - - name: information - key: information - type: string - - name: uic_ref - key: uic_ref - type: string - - name: religion - key: religion - type: string - - name: level - key: level - type: integer - - name: indoor - key: indoor - type: bool - - name: layer - key: layer - type: integer - - name: sport - key: sport - type: string - mapping: - aerialway: *poi_mapping_aerialway - amenity: *poi_mapping_amenity - barrier: *poi_mapping_barrier - building: *poi_mapping_building - highway: *poi_mapping_highway - historic: *poi_mapping_historic - landuse: *poi_mapping_landuse - leisure: *poi_mapping_leisure - railway: *poi_mapping_railway - shop: *poi_mapping_shop - sport: *poi_mapping_sport - tourism: *poi_mapping_tourism - waterway: *poi_mapping_waterway - + fields: *poi_fields + mapping: *poi_mapping # etldoc: imposm3 -> osm_poi_polygon poi_polygon: type: polygon - fields: - - name: osm_id - type: id - - name: geometry - type: geometry - - name: name - key: name - type: string - - name: name_en - key: name:en - type: string - - name: name_de - key: name:de - type: string - - name: tags - type: hstore_tags - - name: subclass - type: mapping_value - - name: mapping_key - type: mapping_key - - name: station - key: station - type: string - - name: funicular - key: funicular - type: string - - name: information - key: information - type: string - - name: uic_ref - key: uic_ref - type: string - - name: religion - key: religion - type: string - - name: level - key: level - type: integer - - name: indoor - key: indoor - type: bool - - name: layer - key: layer - type: integer - - name: sport - key: sport - type: string - mapping: - aerialway: *poi_mapping_aerialway - amenity: *poi_mapping_amenity - barrier: *poi_mapping_barrier - building: *poi_mapping_building - highway: *poi_mapping_highway - historic: *poi_mapping_historic - landuse: *poi_mapping_landuse - leisure: *poi_mapping_leisure - railway: *poi_mapping_railway - shop: *poi_mapping_shop - sport: *poi_mapping_sport - tourism: *poi_mapping_tourism - waterway: *poi_mapping_waterway + fields: *poi_fields + mapping: *poi_mapping diff --git a/layers/poi/mapping_diagram.png b/layers/poi/mapping_diagram.png index 3fe9c14..f584a1a 100644 Binary files a/layers/poi/mapping_diagram.png and b/layers/poi/mapping_diagram.png differ diff --git a/layers/transportation/class.sql b/layers/transportation/class.sql index 3c632f4..187b5f8 100644 --- a/layers/transportation/class.sql +++ b/layers/transportation/class.sql @@ -9,7 +9,7 @@ $$ LANGUAGE SQL IMMUTABLE STRICT; -- The classes for highways are derived from the classes used in ClearTables -- https://github.com/ClearTables/ClearTables/blob/master/transportation.lua -CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT) RETURNS TEXT AS $$ +CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT, construction TEXT) RETURNS TEXT AS $$ SELECT CASE WHEN highway IN ('motorway', 'motorway_link') THEN 'motorway' WHEN highway IN ('trunk', 'trunk_link') THEN 'trunk' @@ -17,9 +17,19 @@ CREATE OR REPLACE FUNCTION highway_class(highway TEXT, public_transport TEXT) RE WHEN highway IN ('secondary', 'secondary_link') THEN 'secondary' WHEN highway IN ('tertiary', 'tertiary_link') THEN 'tertiary' WHEN highway IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor' - WHEN highway IN ('service', 'track') THEN highway WHEN highway IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR public_transport IN ('platform') THEN 'path' - WHEN highway = 'raceway' THEN 'raceway' + WHEN highway IN ('service', 'track', 'raceway') THEN highway + WHEN highway = 'construction' THEN CASE + WHEN construction IN ('motorway', 'motorway_link') THEN 'motorway_construction' + WHEN construction IN ('trunk', 'trunk_link') THEN 'trunk_construction' + WHEN construction IN ('primary', 'primary_link') THEN 'primary_construction' + WHEN construction IN ('secondary', 'secondary_link') THEN 'secondary_construction' + WHEN construction IN ('tertiary', 'tertiary_link') THEN 'tertiary_construction' + WHEN construction = '' OR construction IN ('unclassified', 'residential', 'living_street', 'road') THEN 'minor_construction' + WHEN construction IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps', 'bridleway', 'corridor') OR public_transport IN ('platform') THEN 'path_construction' + WHEN construction IN ('service', 'track', 'raceway') THEN CONCAT(highway, '_construction') + ELSE NULL + END ELSE NULL END; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/transportation/etl_diagram.png b/layers/transportation/etl_diagram.png index 82b331d..ba57d14 100644 Binary files a/layers/transportation/etl_diagram.png and b/layers/transportation/etl_diagram.png differ diff --git a/layers/transportation/layer.sql b/layers/transportation/layer.sql index 651ea5b..561f611 100644 --- a/layers/transportation/layer.sql +++ b/layers/transportation/layer.sql @@ -8,11 +8,11 @@ $$ LANGUAGE SQL IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION layer_transportation(bbox geometry, zoom_level int) RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text, ramp int, oneway int, brunnel TEXT, service TEXT, layer INT, level INT, -indoor INT, surface TEXT) AS $$ +indoor INT, bicycle TEXT, foot TEXT, horse TEXT, mtb_scale TEXT, surface TEXT) AS $$ SELECT osm_id, geometry, CASE - WHEN NULLIF(highway, '') IS NOT NULL OR NULLIF(public_transport, '') IS NOT NULL THEN highway_class(highway, public_transport) + WHEN NULLIF(highway, '') IS NOT NULL OR NULLIF(public_transport, '') IS NOT NULL THEN highway_class(highway, public_transport, construction) WHEN NULLIF(railway, '') IS NOT NULL THEN railway_class(railway) WHEN NULLIF(aerialway, '') IS NOT NULL THEN aerialway WHEN NULLIF(shipway, '') IS NOT NULL THEN shipway @@ -21,7 +21,7 @@ indoor INT, surface TEXT) AS $$ CASE WHEN railway IS NOT NULL THEN railway WHEN (highway IS NOT NULL OR public_transport IS NOT NULL) - AND highway_class(highway, public_transport) = 'path' + AND highway_class(highway, public_transport, construction) = 'path' THEN COALESCE(NULLIF(public_transport, ''), highway) ELSE NULL END AS subclass, @@ -34,19 +34,23 @@ indoor INT, surface TEXT) AS $$ NULLIF(layer, 0) AS layer, "level", CASE WHEN indoor=TRUE THEN 1 ELSE NULL END as indoor, + NULLIF(bicycle, '') AS bicycle, + NULLIF(foot, '') AS foot, + NULLIF(horse, '') AS horse, + NULLIF(mtb_scale, '') AS mtb_scale, NULLIF(surface, '') AS surface FROM ( -- etldoc: osm_transportation_merge_linestring_gen7 -> layer_transportation:z4 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, - NULL AS surface, - z_order + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, + NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen7 WHERE zoom_level = 4 UNION ALL @@ -54,12 +58,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_transportation_merge_linestring_gen6 -> layer_transportation:z5 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen6 WHERE zoom_level = 5 @@ -68,12 +73,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_transportation_merge_linestring_gen5 -> layer_transportation:z6 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen5 WHERE zoom_level = 6 @@ -82,12 +88,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_transportation_merge_linestring_gen4 -> layer_transportation:z7 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen4 WHERE zoom_level = 7 @@ -96,12 +103,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_transportation_merge_linestring_gen3 -> layer_transportation:z8 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_transportation_merge_linestring_gen3 WHERE zoom_level = 8 @@ -111,12 +119,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_highway_linestring_gen2 -> layer_transportation:z10 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + bicycle, foot, horse, mtb_scale, NULL AS surface, z_order FROM osm_highway_linestring_gen2 WHERE zoom_level BETWEEN 9 AND 10 @@ -126,12 +135,13 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_highway_linestring_gen1 -> layer_transportation:z11 SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, NULL AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + bicycle, foot, horse, mtb_scale, NULL AS surface, z_order FROM osm_highway_linestring_gen1 WHERE zoom_level = 11 @@ -143,7 +153,7 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_highway_linestring -> layer_transportation:z14_ SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, man_made, layer, @@ -153,17 +163,18 @@ indoor INT, surface TEXT) AS $$ CASE WHEN highway IN ('footway', 'steps') THEN indoor ELSE NULL::boolean END AS indoor, + bicycle, foot, horse, mtb_scale, surface_value(surface) AS "surface", z_order FROM osm_highway_linestring WHERE NOT is_area AND ( zoom_level = 12 AND ( - highway_class(highway, public_transport) NOT IN ('track', 'path', 'minor') + highway_class(highway, public_transport, construction) NOT IN ('track', 'path', 'minor') OR highway IN ('unclassified', 'residential') ) AND man_made <> 'pier' OR zoom_level = 13 AND ( - highway_class(highway, public_transport) NOT IN ('track', 'path') AND man_made <> 'pier' + highway_class(highway, public_transport, construction) NOT IN ('track', 'path') AND man_made <> 'pier' OR man_made = 'pier' AND NOT ST_IsClosed(geometry) ) @@ -179,13 +190,14 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring_gen5 -> layer_transportation:z8 SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, NULL::int AS layer, NULL::int AS level, NULL::boolean AS indoor, - NULL as surface, z_order + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, + NULL as surface, z_order FROM osm_railway_linestring_gen5 WHERE zoom_level = 8 AND railway='rail' AND service = '' and usage='main' @@ -194,13 +206,14 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring_gen4 -> layer_transportation:z9 SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, NULL::boolean AS is_bridge, NULL::boolean AS is_tunnel, NULL::boolean AS is_ford, NULL::boolean AS is_ramp, NULL::int AS is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, - NULL AS surface, z_order + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, + NULL AS surface, z_order FROM osm_railway_linestring_gen4 WHERE zoom_level = 9 AND railway='rail' AND service = '' and usage='main' @@ -209,10 +222,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring_gen3 -> layer_transportation:z10 SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_railway_linestring_gen3 WHERE zoom_level = 10 @@ -222,10 +236,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring_gen2 -> layer_transportation:z11 SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as surface, z_order FROM osm_railway_linestring_gen2 WHERE zoom_level = 11 @@ -235,10 +250,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring_gen1 -> layer_transportation:z12 SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as surface, z_order FROM osm_railway_linestring_gen1 WHERE zoom_level = 12 @@ -249,10 +265,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_railway_linestring -> layer_transportation:z14_ SELECT osm_id, geometry, - NULL AS highway, railway, NULL AS aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, railway, NULL AS aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL as surface, z_order FROM osm_railway_linestring WHERE zoom_level = 13 @@ -263,10 +280,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_aerialway_linestring_gen1 -> layer_transportation:z12 SELECT osm_id, geometry, - NULL AS highway, NULL as railway, aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, NULL as railway, aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_aerialway_linestring_gen1 WHERE zoom_level = 12 @@ -276,10 +294,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_aerialway_linestring -> layer_transportation:z14_ SELECT osm_id, geometry, - NULL AS highway, NULL as railway, aerialway, NULL AS shipway, + NULL AS highway, NULL AS construction, NULL as railway, aerialway, NULL AS shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_aerialway_linestring WHERE zoom_level >= 13 @@ -288,10 +307,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_shipway_linestring_gen2 -> layer_transportation:z11 SELECT osm_id, geometry, - NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, + NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_shipway_linestring_gen2 WHERE zoom_level = 11 @@ -300,10 +320,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_shipway_linestring_gen1 -> layer_transportation:z12 SELECT osm_id, geometry, - NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, + NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_shipway_linestring_gen1 WHERE zoom_level = 12 @@ -313,10 +334,11 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_shipway_linestring -> layer_transportation:z14_ SELECT osm_id, geometry, - NULL AS highway, NULL AS railway, NULL AS aerialway, shipway, + NULL AS highway, NULL AS construction, NULL AS railway, NULL AS aerialway, shipway, NULL AS public_transport, service_value(service) AS service, is_bridge, is_tunnel, is_ford, is_ramp, is_oneway, NULL as man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_shipway_linestring WHERE zoom_level >= 13 @@ -330,13 +352,14 @@ indoor INT, surface TEXT) AS $$ -- etldoc: osm_highway_polygon -> layer_transportation:z14_ SELECT osm_id, geometry, - highway, NULL AS railway, NULL AS aerialway, NULL AS shipway, + highway, NULL AS construction, NULL AS railway, NULL AS aerialway, NULL AS shipway, public_transport, NULL AS service, CASE WHEN man_made IN ('bridge') THEN TRUE ELSE FALSE END AS is_bridge, FALSE AS is_tunnel, FALSE AS is_ford, FALSE AS is_ramp, FALSE::int AS is_oneway, man_made, layer, NULL::int AS level, NULL::boolean AS indoor, + NULL as bicycle, NULL as foot, NULL as horse, NULL as mtb_scale, NULL AS surface, z_order FROM osm_highway_polygon -- We do not want underground pedestrian areas for now diff --git a/layers/transportation/mapping.yaml b/layers/transportation/mapping.yaml index facd319..29c0c25 100644 --- a/layers/transportation/mapping.yaml +++ b/layers/transportation/mapping.yaml @@ -45,13 +45,13 @@ generalized_tables: # etldoc: imposm3 -> osm_highway_linestring_gen2 highway_linestring_gen2: source: highway_linestring_gen1 - sql_filter: highway IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link') AND NOT is_area + sql_filter: (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link') OR highway = 'construction' AND construction IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link')) AND NOT is_area tolerance: ZRES11 # etldoc: imposm3 -> osm_highway_linestring_gen1 highway_linestring_gen1: source: highway_linestring - sql_filter: highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') AND NOT is_area AND ST_IsValid(geometry) + sql_filter: (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') OR highway = 'construction' AND construction IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link')) AND NOT is_area AND ST_IsValid(geometry) tolerance: ZRES12 name_field: &name @@ -133,6 +133,22 @@ man_made_field: &man_made z_order_field: &z_order name: z_order type: wayzorder +bicycle_field: &bicycle + key: bicycle + name: bicycle + type: string +foot_field: &foot + key: foot + name: foot + type: string +horse_field: &horse + key: horse + name: horse + type: string +mtb_scale_field: &mtb_scale + key: mtb:scale + name: mtb_scale + type: string surface_field: &surface key: surface name: surface @@ -150,6 +166,9 @@ tables: - name: highway key: highway type: string + - name: construction + key: construction + type: string - *ref - *network - *z_order @@ -172,6 +191,10 @@ tables: - *usage - *public_transport - *man_made + - *bicycle + - *foot + - *horse + - *mtb_scale - *surface mapping: highway: @@ -187,18 +210,19 @@ tables: - tertiary_link - unclassified - residential - - road - living_street - - raceway - - track - - service - - path - - cycleway - - bridleway - - footway - - corridor + - road - pedestrian + - path + - footway + - cycleway - steps + - bridleway + - corridor + - service + - track + - raceway + - construction public_transport: - platform man_made: diff --git a/layers/transportation/mapping_diagram.png b/layers/transportation/mapping_diagram.png index ef040b4..eacdce7 100644 Binary files a/layers/transportation/mapping_diagram.png and b/layers/transportation/mapping_diagram.png differ diff --git a/layers/transportation/transportation.yaml b/layers/transportation/transportation.yaml index 83505d3..b92f650 100644 --- a/layers/transportation/transportation.yaml +++ b/layers/transportation/transportation.yaml @@ -14,9 +14,10 @@ layer: fields: class: description: | - Distinguish between more and less important roads or railways. + Distinguish between more and less important roads or railways and roads under construction. Class is derived from the value of the [`highway`](http://wiki.openstreetmap.org/wiki/Key:highway), + [`construction`](http://wiki.openstreetmap.org/wiki/Key:construction), [`railway`](http://wiki.openstreetmap.org/wiki/Key:railway), [`aerialway`](http://wiki.openstreetmap.org/wiki/Key:aerialway), [`route`](http://wiki.openstreetmap.org/wiki/Key:route) tag (for @@ -33,6 +34,16 @@ layer: - track - path - raceway + - motorway_construction + - trunk_construction + - primary_construction + - secondary_construction + - tertiary_construction + - minor_construction + - service_construction + - track_construction + - path_construction + - raceway_construction - rail - transit - cable_car @@ -95,17 +106,29 @@ layer: - parking_aisle layer: description: | - Original value of [`layer`](http://wiki.openstreetmap.org/wiki/Key:layer) tag. + Original value of the [`layer`](http://wiki.openstreetmap.org/wiki/Key:layer) tag. level: description: | Experimental feature! Filled only for steps and footways. Original - value of [`level`](http://wiki.openstreetmap.org/wiki/Key:level) tag. + value of the [`level`](http://wiki.openstreetmap.org/wiki/Key:level) tag. indoor: description: | Experimental feature! Filled only for steps and footways. Original - value of [`indoor`](http://wiki.openstreetmap.org/wiki/Key:indoor) tag. + value of the [`indoor`](http://wiki.openstreetmap.org/wiki/Key:indoor) tag. values: - 1 + bicycle: + description: | + Original value of the [`bicycle`](http://wiki.openstreetmap.org/wiki/Key:bicycle) tag (highways only). + foot: + description: | + Original value of the [`foot`](http://wiki.openstreetmap.org/wiki/Key:foot) tag (highways only). + horse: + description: | + Original value of the [`horse`](http://wiki.openstreetmap.org/wiki/Key:horse) tag (highways only). + mtb_scale: + description: | + Original value of the [`mtb:scale`](http://wiki.openstreetmap.org/wiki/Key:mtb:scale) tag (highways only). surface: description: | Values of [`surface`](https://wiki.openstreetmap.org/wiki/Key:surface) tag devided into 2 groups `paved` (paved, asphalt, cobblestone, concrete, concrete:lanes, concrete:plates, metal, paving_stones, sett, unhewn_cobblestone, wood) and `unpaved` (unpaved, compacted, dirt, earth, fine_gravel, grass, grass_paver, gravel, gravel_turf, ground, ice, mud, pebblestone, salt, sand, snow, woodchips). @@ -115,7 +138,7 @@ layer: datasource: geometry_field: geometry srid: 900913 - query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, surface FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT geometry, class, subclass, oneway, ramp, brunnel, service, layer, level, indoor, bicycle, foot, horse, mtb_scale, surface FROM layer_transportation(!bbox!, z(!scale_denominator!))) AS t schema: - ./class.sql - ./update_transportation_merge.sql diff --git a/layers/transportation/update_transportation_merge.sql b/layers/transportation/update_transportation_merge.sql index 36d0931..a2c1852 100644 --- a/layers/transportation/update_transportation_merge.sql +++ b/layers/transportation/update_transportation_merge.sql @@ -22,84 +22,88 @@ CREATE INDEX IF NOT EXISTS osm_highway_linestring_highway_idx -- Improve performance of the sql below CREATE INDEX IF NOT EXISTS osm_highway_linestring_highway_partial_idx ON osm_highway_linestring(highway) - WHERE highway IN ('motorway','trunk', 'primary'); + WHERE highway IN ('motorway','trunk', 'primary', 'construction'); -- etldoc: osm_highway_linestring -> osm_transportation_merge_linestring CREATE MATERIALIZED VIEW osm_transportation_merge_linestring AS ( SELECT (ST_Dump(geometry)).geom AS geometry, NULL::bigint AS osm_id, - highway, + highway, construction, z_order FROM ( SELECT ST_LineMerge(ST_Collect(geometry)) AS geometry, - highway, + highway, construction, min(z_order) AS z_order FROM osm_highway_linestring - WHERE highway IN ('motorway','trunk', 'primary') AND ST_IsValid(geometry) - group by highway + WHERE (highway IN ('motorway','trunk', 'primary') OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary')) + AND ST_IsValid(geometry) + group by highway, construction ) AS highway_union ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_geometry_idx ON osm_transportation_merge_linestring USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_highway_partial_idx - ON osm_transportation_merge_linestring(highway) - WHERE highway IN ('motorway','trunk', 'primary'); + ON osm_transportation_merge_linestring(highway, construction) + WHERE highway IN ('motorway','trunk', 'primary', 'construction'); -- etldoc: osm_transportation_merge_linestring -> osm_transportation_merge_linestring_gen3 CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen3 AS ( - SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, highway, z_order + SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, highway, construction, z_order FROM osm_transportation_merge_linestring WHERE highway IN ('motorway','trunk', 'primary') + OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary') ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_geometry_idx ON osm_transportation_merge_linestring_gen3 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen3_highway_partial_idx - ON osm_transportation_merge_linestring_gen3(highway) - WHERE highway IN ('motorway','trunk', 'primary'); + ON osm_transportation_merge_linestring_gen3(highway, construction) + WHERE highway IN ('motorway','trunk', 'primary', 'construction'); -- etldoc: osm_transportation_merge_linestring_gen3 -> osm_transportation_merge_linestring_gen4 CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen4 AS ( - SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, highway, z_order + SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, highway, construction, z_order FROM osm_transportation_merge_linestring_gen3 - WHERE highway IN ('motorway','trunk', 'primary') AND ST_Length(geometry) > 50 + WHERE (highway IN ('motorway','trunk', 'primary') OR highway = 'construction' AND construction IN ('motorway','trunk', 'primary')) + AND ST_Length(geometry) > 50 ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_geometry_idx ON osm_transportation_merge_linestring_gen4 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen4_highway_partial_idx - ON osm_transportation_merge_linestring_gen4(highway) - WHERE highway IN ('motorway','trunk', 'primary'); + ON osm_transportation_merge_linestring_gen4(highway, construction) + WHERE highway IN ('motorway','trunk', 'primary', 'construction'); -- etldoc: osm_transportation_merge_linestring_gen4 -> osm_transportation_merge_linestring_gen5 CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen5 AS ( - SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, highway, z_order + SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, highway, construction, z_order FROM osm_transportation_merge_linestring_gen4 - WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 100 + WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk')) + AND ST_Length(geometry) > 100 ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_geometry_idx ON osm_transportation_merge_linestring_gen5 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen5_highway_partial_idx - ON osm_transportation_merge_linestring_gen5(highway) - WHERE highway IN ('motorway', 'trunk'); + ON osm_transportation_merge_linestring_gen5(highway, construction) + WHERE highway IN ('motorway','trunk', 'construction'); -- etldoc: osm_transportation_merge_linestring_gen5 -> osm_transportation_merge_linestring_gen6 CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen6 AS ( - SELECT ST_Simplify(geometry, 1000) AS geometry, osm_id, highway, z_order + SELECT ST_Simplify(geometry, 1000) AS geometry, osm_id, highway, construction, z_order FROM osm_transportation_merge_linestring_gen5 - WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 500 + WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk')) AND ST_Length(geometry) > 500 ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_geometry_idx ON osm_transportation_merge_linestring_gen6 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen6_highway_partial_idx - ON osm_transportation_merge_linestring_gen6(highway) - WHERE highway IN ('motorway','trunk'); + ON osm_transportation_merge_linestring_gen6(highway, construction) + WHERE highway IN ('motorway','trunk', 'construction'); -- etldoc: osm_transportation_merge_linestring_gen6 -> osm_transportation_merge_linestring_gen7 CREATE MATERIALIZED VIEW osm_transportation_merge_linestring_gen7 AS ( - SELECT ST_Simplify(geometry, 2000) AS geometry, osm_id, highway, z_order + SELECT ST_Simplify(geometry, 2000) AS geometry, osm_id, highway, construction, z_order FROM osm_transportation_merge_linestring_gen6 - WHERE highway IN ('motorway') AND ST_Length(geometry) > 1000 + WHERE (highway = 'motorway' OR highway = 'construction' AND construction = 'motorway') AND ST_Length(geometry) > 1000 ); CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen7_geometry_idx ON osm_transportation_merge_linestring_gen7 USING gist(geometry); diff --git a/layers/transportation_name/etl_diagram.png b/layers/transportation_name/etl_diagram.png index 3d8e46d..cd90e76 100644 Binary files a/layers/transportation_name/etl_diagram.png and b/layers/transportation_name/etl_diagram.png differ diff --git a/layers/transportation_name/layer.sql b/layers/transportation_name/layer.sql index 0cfb45a..9f108d6 100644 --- a/layers/transportation_name/layer.sql +++ b/layers/transportation_name/layer.sql @@ -19,9 +19,9 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, when length(coalesce(ref, ''))>0 then 'road' end as network, - highway_class(highway, '') AS class, + highway_class(highway, '', construction) AS class, CASE - WHEN highway IS NOT NULL AND highway_class(highway, '') = 'path' + WHEN highway IS NOT NULL AND highway_class(highway, '', construction) = 'path' THEN highway ELSE NULL END AS subclass, @@ -70,6 +70,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, "tags", ref, highway, + construction, network, z_order, layer, @@ -78,7 +79,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, FROM osm_transportation_name_linestring WHERE zoom_level = 12 AND LineLabel(zoom_level, COALESCE(NULLIF(name, ''), ref), geometry) - AND highway_class(highway, '') NOT IN ('minor', 'track', 'path') + AND highway_class(highway, '', construction) NOT IN ('minor', 'track', 'path') AND NOT highway_is_link(highway) UNION ALL @@ -92,6 +93,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, "tags", ref, highway, + construction, network, z_order, layer, @@ -100,7 +102,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, FROM osm_transportation_name_linestring WHERE zoom_level = 13 AND LineLabel(zoom_level, COALESCE(NULLIF(name, ''), ref), geometry) - AND highway_class(highway, '') NOT IN ('track', 'path') + AND highway_class(highway, '', construction) NOT IN ('track', 'path') UNION ALL -- etldoc: osm_transportation_name_linestring -> layer_transportation_name:z14_ @@ -113,6 +115,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, "tags", ref, highway, + construction, network, z_order, layer, diff --git a/layers/transportation_name/transportation_name.yaml b/layers/transportation_name/transportation_name.yaml index 263032c..746ec50 100644 --- a/layers/transportation_name/transportation_name.yaml +++ b/layers/transportation_name/transportation_name.yaml @@ -29,7 +29,7 @@ layer: - road (default) class: description: | - Distinguish between more and less important roads. + Distinguish between more and less important roads and roads under construction. values: - motorway - trunk @@ -41,6 +41,16 @@ layer: - track - path - raceway + - motorway_construction + - trunk_construction + - primary_construction + - secondary_construction + - tertiary_construction + - minor_construction + - service_construction + - track_construction + - path_construction + - raceway_construction - rail - transit subclass: diff --git a/layers/transportation_name/update_route_member.sql b/layers/transportation_name/update_route_member.sql index 74b1831..60716a3 100644 --- a/layers/transportation_name/update_route_member.sql +++ b/layers/transportation_name/update_route_member.sql @@ -8,14 +8,14 @@ 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) + insert into osm_route_member (osm_id, member, ref, network) ( - SELECT hw.osm_id, substring(hw.ref from E'^[AM][0-9AM()]+'), 'omt-gb-motorway' + SELECT 0, 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' + SELECT 0, 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') diff --git a/layers/transportation_name/update_transportation_name.sql b/layers/transportation_name/update_transportation_name.sql index 82a49dc..58a521f 100644 --- a/layers/transportation_name/update_transportation_name.sql +++ b/layers/transportation_name/update_transportation_name.sql @@ -24,6 +24,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_network AS ( else hl.ref end as ref, hl.highway, + hl.construction, CASE WHEN highway IN ('footway', 'steps') THEN layer ELSE NULL::int END AS layer, @@ -53,6 +54,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( tags || get_basic_names(tags, geometry) AS "tags", ref, highway, + construction, "level", layer, indoor, @@ -68,6 +70,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( AS "tags", ref, highway, + construction, "level", layer, indoor, @@ -77,56 +80,56 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( 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, "level", layer, indoor, network_type + group by name, name_en, name_de, ref, highway, construction, "level", layer, indoor, network_type ) 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_highway_partial_idx - ON osm_transportation_name_linestring(highway) - WHERE highway IN ('motorway','trunk'); + ON osm_transportation_name_linestring(highway, construction) + WHERE highway IN ('motorway','trunk', 'construction'); -- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1 CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS ( - SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, network, z_order + SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, construction, network, z_order FROM osm_transportation_name_linestring - WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000 + WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk')) AND ST_Length(geometry) > 8000 ); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_geometry_idx ON osm_transportation_name_linestring_gen1 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_highway_partial_idx - ON osm_transportation_name_linestring_gen1(highway) - WHERE highway IN ('motorway','trunk'); + ON osm_transportation_name_linestring_gen1(highway, construction) + WHERE highway IN ('motorway','trunk', 'construction'); -- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2 CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS ( - SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, network, z_order + SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, construction, network, z_order FROM osm_transportation_name_linestring_gen1 - WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000 + WHERE (highway IN ('motorway','trunk') OR highway = 'construction' AND construction IN ('motorway','trunk')) AND ST_Length(geometry) > 14000 ); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_geometry_idx ON osm_transportation_name_linestring_gen2 USING gist(geometry); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_highway_partial_idx - ON osm_transportation_name_linestring_gen2(highway) - WHERE highway = 'motorway'; + ON osm_transportation_name_linestring_gen2(highway, construction) + WHERE highway IN ('motorway','trunk', 'construction'); -- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3 CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( - SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, network, z_order + SELECT ST_Simplify(geometry, 200) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, construction, network, z_order FROM osm_transportation_name_linestring_gen2 - WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 + WHERE (highway = 'motorway' OR highway = 'construction' AND construction = '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_highway_partial_idx - ON osm_transportation_name_linestring_gen3(highway) - WHERE highway = 'motorway'; + ON osm_transportation_name_linestring_gen3(highway, construction) + WHERE highway IN ('motorway', 'construction'); -- 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, name, name_en, name_de, tags, ref, highway, network, z_order + SELECT ST_Simplify(geometry, 500) AS geometry, osm_id, name, name_en, name_de, tags, ref, highway, construction, network, z_order FROM osm_transportation_name_linestring_gen3 - WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 + WHERE (highway = 'motorway' OR highway = 'construction' AND construction = '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); diff --git a/layers/water/etl_diagram.png b/layers/water/etl_diagram.png index 936fe0c..8fad179 100644 Binary files a/layers/water/etl_diagram.png and b/layers/water/etl_diagram.png differ diff --git a/layers/water/mapping_diagram.png b/layers/water/mapping_diagram.png index 400bbda..2dce3fc 100644 Binary files a/layers/water/mapping_diagram.png and b/layers/water/mapping_diagram.png differ diff --git a/layers/water_name/etl_diagram.png b/layers/water_name/etl_diagram.png index 95d5006..b0e4a40 100644 Binary files a/layers/water_name/etl_diagram.png and b/layers/water_name/etl_diagram.png differ diff --git a/layers/water_name/mapping_diagram.png b/layers/water_name/mapping_diagram.png index 400bbda..2dce3fc 100644 Binary files a/layers/water_name/mapping_diagram.png and b/layers/water_name/mapping_diagram.png differ diff --git a/layers/waterway/etl_diagram.png b/layers/waterway/etl_diagram.png index babd2a5..e2e229d 100644 Binary files a/layers/waterway/etl_diagram.png and b/layers/waterway/etl_diagram.png differ diff --git a/layers/waterway/mapping_diagram.png b/layers/waterway/mapping_diagram.png index a622b6f..cd6c0b3 100644 Binary files a/layers/waterway/mapping_diagram.png and b/layers/waterway/mapping_diagram.png differ diff --git a/openmaptiles.yaml b/openmaptiles.yaml index 26cb732..71356bf 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -27,7 +27,8 @@ tileset: minzoom: 0 pixel_scale: 256 languages: - - ar # Arabic + - am # Amharic + - ar # Arabic - az # Azerbaijani, Latin - be # Belarusian - bg # Bulgarian @@ -65,6 +66,7 @@ tileset: - kn # Kannada - ko # Korean - ko_rm # romanization of Korean, Latin + - ku # Kurdish, Latin - la # Latin, Latin - lb # Luxembourgish, Latin - lt # Lithuanian, Latin