diff --git a/layers/building/building.sql b/layers/building/building.sql index db3c6aad..41a8dc46 100644 --- a/layers/building/building.sql +++ b/layers/building/building.sql @@ -1,22 +1,22 @@ CREATE OR REPLACE VIEW building_z13 AS ( - SELECT osm_id, way, height, levels FROM buildings WHERE way_area > 1400 + SELECT osm_id, geometry, height, levels FROM osm_building_polygon_gen1 WHERE area > 1400 ); CREATE OR REPLACE VIEW building_z14 AS ( - SELECT osm_id, way, height, levels FROM buildings + SELECT osm_id, geometry, height, levels FROM osm_building_polygon ); CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int) -RETURNS TABLE(geom geometry, osm_id bigint, render_height float) AS $$ - SELECT way, osm_id, +RETURNS TABLE(geom geometry, osm_id bigint, render_height numeric) AS $$ + SELECT geometry, osm_id, least(greatest(3, COALESCE(height, levels*3.66,5)),400)^.7 AS render_height FROM ( - SELECT osm_id, ST_Simplify(way, 10) AS way, height, levels FROM building_z13 - WHERE zoom_level = 13 AND way && bbox + SELECT osm_id, ST_Simplify(geometry, 10) AS geometry, height, levels FROM building_z13 + WHERE zoom_level = 13 AND geometry && bbox UNION ALL SELECT * FROM building_z14 - WHERE zoom_level >= 14 AND way && bbox + WHERE zoom_level >= 14 AND geometry && bbox ) AS zoom_levels - ORDER BY render_height, ST_YMin(way) DESC; + ORDER BY render_height, ST_YMin(geometry) DESC; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/building/building.yaml b/layers/building/building.yaml index af9d9f96..42bebf58 100644 --- a/layers/building/building.yaml +++ b/layers/building/building.yaml @@ -1,12 +1,15 @@ layer: id: "building" - description: Roads + description: | + All [OSM Buildings](http://wiki.openstreetmap.org/wiki/Buildings). buffer_size: 4 datasource: query: (SELECT * FROM layer_building(!bbox!, z(!scale_denominator!))) AS t fields: - admin_level: Number - class: String - scalerank: Number + render_height: | + An approximated height from levels and height of building after the method of Paul Norman in [OSM Clear](https://github.com/ClearTables/osm-clear) schema: - ./building.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/layers/building/mapping.yaml b/layers/building/mapping.yaml new file mode 100644 index 00000000..3743f803 --- /dev/null +++ b/layers/building/mapping.yaml @@ -0,0 +1,24 @@ +generalized_tables: + building_polygon_gen1: + source: building_polygon + sql_filter: area>1400.0 + tolerance: 10.0 +tables: + building_polygon: + fields: + - name: osm_id + type: id + - name: geometry + type: validated_geometry + - name: area + type: pseudoarea + - name: height + key: height + type: integer + - name: levels + key: levels + type: integer + mapping: + building: + - __any__ + type: polygon