From 79d04f379265bb8c8e4cdeb59e0ad634e9b760c1 Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Mon, 24 Oct 2016 12:02:33 +0200 Subject: [PATCH] Integrate urban into landuse --- layers/landuse/landuse.sql | 64 +++++++++++++++++++++++++++++++++++++ layers/landuse/landuse.yaml | 11 +++++++ layers/landuse/mapping.yaml | 29 +++++++++++++++++ layers/urban/urban.sql | 30 ----------------- layers/urban/urban.yaml | 8 ----- openmaptiles.yaml | 2 +- 6 files changed, 105 insertions(+), 39 deletions(-) create mode 100644 layers/landuse/landuse.sql create mode 100644 layers/landuse/landuse.yaml create mode 100644 layers/landuse/mapping.yaml delete mode 100644 layers/urban/urban.sql delete mode 100644 layers/urban/urban.yaml diff --git a/layers/landuse/landuse.sql b/layers/landuse/landuse.sql new file mode 100644 index 0000000..51daca7 --- /dev/null +++ b/layers/landuse/landuse.sql @@ -0,0 +1,64 @@ +CREATE OR REPLACE VIEW landuse_z4 AS ( + SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank + FROM ne_50m_urban_areas + WHERE scalerank <= 2 +); + +CREATE OR REPLACE VIEW landuse_z5 AS ( + SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank + FROM ne_50m_urban_areas +); + +CREATE OR REPLACE VIEW landuse_z6 AS ( + SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank + FROM ne_10m_urban_areas +); + +CREATE OR REPLACE VIEW landuse_z10 AS ( + SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen2 + WHERE ST_Area(geometry) > 1200000 +); + +CREATE OR REPLACE VIEW landuse_z11 AS ( + SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen2 + WHERE ST_Area(geometry) > 480000 +); + +CREATE OR REPLACE VIEW landuse_z12 AS ( + SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen1 + WHERE ST_Area(geometry) > 240000 +); + +CREATE OR REPLACE VIEW landuse_z13 AS ( + SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon + WHERE ST_Area(geometry) > 60000 +); + +CREATE OR REPLACE VIEW landuse_z14 AS ( + SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon +); + +CREATE OR REPLACE FUNCTION layer_landuse(bbox geometry, zoom_level int) +RETURNS TABLE(osm_id bigint, geometry geometry, landuse text) AS $$ + SELECT osm_id, geometry, landuse FROM ( + SELECT * FROM landuse_z4 + WHERE zoom_level = 4 + UNION ALL + SELECT * FROM landuse_z5 + WHERE zoom_level = 5 + UNION ALL + SELECT * FROM landuse_z6 + WHERE zoom_level BETWEEN 6 AND 10 AND scalerank-1 <= zoom_level + UNION ALL + SELECT * FROM landuse_z10 WHERE zoom_level = 10 + UNION ALL + SELECT * FROM landuse_z11 WHERE zoom_level = 11 + UNION ALL + SELECT * FROM landuse_z12 WHERE zoom_level = 12 + UNION ALL + SELECT * FROM landuse_z13 WHERE zoom_level = 13 + UNION ALL + SELECT * FROM landuse_z14 WHERE zoom_level >= 14 + ) AS zoom_levels; +$$ LANGUAGE SQL IMMUTABLE; + diff --git a/layers/landuse/landuse.yaml b/layers/landuse/landuse.yaml new file mode 100644 index 0000000..09acf19 --- /dev/null +++ b/layers/landuse/landuse.yaml @@ -0,0 +1,11 @@ +layer: + id: "landuse" + description: Landcover is used to describe the physical material at the surface of the earth. Land covers include grass, asphalt, trees, bare ground etc. Tagging of landcover is often only implied by other tags at present, for example a park may be assumed to be covered in grass, but in some places this may in fact be trees or sand or some other cover. The following keys imply or specifically indicate landcover properties. + buffer_size: 4 + datasource: + query: (SELECT * FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t +schema: + - ./landuse.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/layers/landuse/mapping.yaml b/layers/landuse/mapping.yaml new file mode 100644 index 0000000..57c5851 --- /dev/null +++ b/layers/landuse/mapping.yaml @@ -0,0 +1,29 @@ +generalized_tables: + landuse_polygon_gen2: + source: landuse_polygon_gen1 + sql_filter: area>500000.000000 + tolerance: 120.0 + landuse_polygon_gen1: + source: landuse_polygon + sql_filter: area>50000.000000 + tolerance: 50.0 +tables: + landuse_polygon: + type: polygon + fields: + - name: osm_id + type: id + - name: geometry + type: validated_geometry + - name: landuse + type: mapping_value + - name: area + type: pseudoarea + mapping: + amenity: + - school + - hospital + landuse: + - railway + - cemetry + - military diff --git a/layers/urban/urban.sql b/layers/urban/urban.sql deleted file mode 100644 index d2c5bf9..0000000 --- a/layers/urban/urban.sql +++ /dev/null @@ -1,30 +0,0 @@ -CREATE OR REPLACE VIEW urban_z4 AS ( - SELECT geom, scalerank - FROM ne_50m_urban_areas - WHERE scalerank <= 2 -); - -CREATE OR REPLACE VIEW urban_z5 AS ( - SELECT geom, scalerank - FROM ne_50m_urban_areas -); - -CREATE OR REPLACE VIEW urban_z6 AS ( - SELECT geom, scalerank - FROM ne_10m_urban_areas -); - -CREATE OR REPLACE FUNCTION layer_urban(bbox geometry, zoom_level int) -RETURNS TABLE(geom geometry, scalerank int) AS $$ - SELECT geom, scalerank FROM ( - SELECT * FROM urban_z4 - WHERE zoom_level = 4 - UNION ALL - SELECT * FROM urban_z5 - WHERE zoom_level = 5 - UNION ALL - SELECT * FROM urban_z6 - WHERE zoom_level BETWEEN 6 AND 10 AND scalerank-1 <= zoom_level - ) AS zoom_levels - WHERE geom && bbox; -$$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/urban/urban.yaml b/layers/urban/urban.yaml deleted file mode 100644 index 4cdb213..0000000 --- a/layers/urban/urban.yaml +++ /dev/null @@ -1,8 +0,0 @@ -layer: - id: "urban" - description: urban - buffer_size: 4 - datasource: - query: (SELECT * FROM layer_urban(!bbox!, z(!scale_denominator!))) AS t -schema: - - ./urban.sql diff --git a/openmaptiles.yaml b/openmaptiles.yaml index 6367fa7..1058fab 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -7,10 +7,10 @@ tileset: - layers/country/country.yaml - layers/place/place.yaml #- layers/rail/rail.yaml - - layers/urban/urban.yaml - layers/water/water.yaml - layers/waterway/waterway.yaml - layers/landcover/landcover.yaml + - layers/landuse/landuse.yaml name: OpenMapTiles v1.0 description: "A tileset showcasing all layers in OpenMapTiles. http://openmaptiles.org" attribution: "© OpenStreetMap contributors"