diff --git a/layers/boundary/boundary.sql b/layers/boundary/boundary.sql index 9128c4e..1b29d19 100644 --- a/layers/boundary/boundary.sql +++ b/layers/boundary/boundary.sql @@ -12,60 +12,60 @@ END; $$ LANGUAGE plpgsql IMMUTABLE; CREATE OR REPLACE VIEW boundary_z0 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_110m_admin_0_boundary_lines_land ); CREATE OR REPLACE VIEW boundary_z1 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_50m_admin_0_boundary_lines_land UNION ALL - SELECT geom, 1 AS admin_level, scalerank, + SELECT geom, 4 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_50m_admin_1_states_provinces_lines WHERE scalerank <= 2 ); CREATE OR REPLACE VIEW boundary_z3 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_50m_admin_0_boundary_lines_land UNION ALL - SELECT geom, 1 AS admin_level, scalerank, + SELECT geom, 4 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_50m_admin_1_states_provinces_lines ); CREATE OR REPLACE VIEW boundary_z4 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_0_boundary_lines_land UNION ALL - SELECT geom, 1 AS admin_level, scalerank, + SELECT geom, 4 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_1_states_provinces_lines_shp WHERE scalerank <= 3 AND featurecla = 'Adm-1 boundary' ); CREATE OR REPLACE VIEW boundary_z5 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_0_boundary_lines_land UNION ALL - SELECT geom, 1 AS admin_level, scalerank, + SELECT geom, 4 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_1_states_provinces_lines_shp WHERE scalerank <= 7 AND featurecla = 'Adm-1 boundary' ); CREATE OR REPLACE VIEW boundary_z7 AS ( - SELECT geom, 0 AS admin_level, scalerank, + SELECT geom, 2 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_0_boundary_lines_land UNION ALL - SELECT geom, 1 AS admin_level, scalerank, + SELECT geom, 4 AS admin_level, scalerank, boundary_class(featurecla) AS class FROM ne_10m_admin_1_states_provinces_lines_shp WHERE featurecla = 'Adm-1 boundary' @@ -73,30 +73,37 @@ CREATE OR REPLACE VIEW boundary_z7 AS ( ); CREATE OR REPLACE VIEW boundary_z8 AS ( - SELECT way AS geom, level AS admin_level, + SELECT geometry AS geom, admin_level, NULL AS scalerank, NULL AS class - FROM admin_line - WHERE level <= 4 AND ST_Length(way) > 10000 + FROM osm_boundary_linestring_gen5 + WHERE admin_level <= 4 AND ST_Length(geometry) > 1000 +); + +CREATE OR REPLACE VIEW boundary_z9 AS ( + SELECT geometry AS geom, admin_level, + NULL AS scalerank, NULL AS class + FROM osm_boundary_linestring_gen4 + WHERE admin_level <= 6 ); CREATE OR REPLACE VIEW boundary_z10 AS ( - SELECT way AS geom, level AS admin_level, + SELECT geometry AS geom, admin_level, NULL AS scalerank, NULL AS class - FROM admin_line - WHERE level <= 6 + FROM osm_boundary_linestring_gen3 + WHERE admin_level <= 6 ); CREATE OR REPLACE VIEW boundary_z11 AS ( - SELECT way AS geom, level AS admin_level, + SELECT geometry AS geom, admin_level, NULL AS scalerank, NULL AS class - FROM admin_line - WHERE level <= 8 + FROM osm_boundary_linestring_gen2 + WHERE admin_level <= 8 ); CREATE OR REPLACE VIEW boundary_z12 AS ( - SELECT way AS geom, level AS admin_level, + SELECT geometry AS geom, admin_level, NULL AS scalerank, NULL AS class - FROM admin_line + FROM osm_boundary_linestring_gen1 ); CREATE OR REPLACE FUNCTION layer_boundary (bbox geometry, zoom_level int) @@ -114,22 +121,16 @@ RETURNS TABLE(geom geometry, admin_level int, scalerank int, class text) AS $$ UNION ALL SELECT * FROM boundary_z7 WHERE geom && bbox AND zoom_level = 7 UNION ALL - SELECT ST_Simplify(geom, 400) AS geom, admin_level, scalerank, class - FROM boundary_z8 WHERE geom && bbox AND zoom_level = 8 + SELECT * FROM boundary_z8 WHERE geom && bbox AND zoom_level = 8 UNION ALL - SELECT ST_Simplify(geom, 320) AS geom, admin_level, scalerank, class - FROM boundary_z8 WHERE geom && bbox AND zoom_level = 9 + SELECT * FROM boundary_z9 WHERE geom && bbox AND zoom_level = 9 UNION ALL - SELECT ST_Simplify(geom, 150) AS geom, admin_level, scalerank, class - FROM boundary_z10 WHERE geom && bbox AND zoom_level = 10 + SELECT * FROM boundary_z10 WHERE geom && bbox AND zoom_level = 10 UNION ALL - SELECT ST_Simplify(geom, 100) AS geom, admin_level, scalerank, class - FROM boundary_z11 WHERE geom && bbox AND zoom_level = 11 + SELECT * FROM boundary_z11 WHERE geom && bbox AND zoom_level = 11 UNION ALL - SELECT ST_Simplify(geom, 50) AS geom, admin_level, scalerank, class - FROM boundary_z12 WHERE geom && bbox AND zoom_level = 12 + SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level = 12 UNION ALL - SELECT geom, admin_level, scalerank, class - FROM boundary_z12 WHERE geom && bbox AND zoom_level >= 13 + SELECT * FROM boundary_z12 WHERE geom && bbox AND zoom_level >= 13 ) AS zoom_levels; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/boundary/boundary.yaml b/layers/boundary/boundary.yaml index 7cd868a..605c2a2 100644 --- a/layers/boundary/boundary.yaml +++ b/layers/boundary/boundary.yaml @@ -1,12 +1,19 @@ layer: id: "boundary" - description: Buildings + description: | + Contains [administrative boundaries](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative) + (no maritime boundaries yet). + Until z7 Natural Earth data is used which switches to OSM boundaries after z8. buffer_size: 4 fields: - admin_level: Number - class: String - scalerank: Number + admin_level: | + OSM [admin_level](http://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative#admin_level) + indicating the level of importance of this boundary. + At low zoom levels the Natural Earth boundaries are mapped to the equivalent admin levels. datasource: query: (SELECT * FROM layer_boundary(!bbox!, z(!scale_denominator!))) AS t schema: - ./boundary.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/layers/boundary/mapping.yaml b/layers/boundary/mapping.yaml new file mode 100644 index 0000000..a6330c7 --- /dev/null +++ b/layers/boundary/mapping.yaml @@ -0,0 +1,34 @@ +generalized_tables: + boundary_linestring_gen5: + source: boundary_linestring + tolerance: 420.0 + boundary_linestring_gen4: + source: boundary_linestring + tolerance: 320.0 + boundary_linestring_gen3: + source: boundary_linestring + tolerance: 150.0 + boundary_linestring_gen2: + source: boundary_linestring + tolerance: 100.0 + boundary_linestring_gen1: + source: boundary_linestring + tolerance: 50.0 +tables: + boundary_linestring: + fields: + - name: osm_id + type: id + - name: geometry + type: geometry + - key: admin_level + name: admin_level + type: integer + filters: + exclude_tags: + - [ "admin_level", "__nil__" ] + - [ "natural", "coastline" ] + mapping: + boundary: + - administrative + type: linestring