From 99f9336e5e493c9f6c7919ee0169d839a9cb0576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Rodrigo?= Date: Wed, 29 Apr 2020 16:03:22 +0200 Subject: [PATCH] Merge ways and relations fetch from table osm_building_polygon (#757) Build on top of PR #755, to be merged first. Since we want every thing from osm_building_polygon (osm_id >= 0 and osm_id < 0), we can merge the two queries. Note: the obp.osm_id >= 0 on the left join only apply to the left join part. --- layers/building/building.sql | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/layers/building/building.sql b/layers/building/building.sql index 3f63cac4..0e0685d2 100644 --- a/layers/building/building.sql +++ b/layers/building/building.sql @@ -46,22 +46,6 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( osm_building_associatedstreet WHERE role = 'house' AND ST_GeometryType(geometry) = 'ST_Polygon' UNION ALL - -- etldoc: osm_building_polygon -> layer_building:z14_ - -- Buildings that are from multipolygons - SELECT osm_id,geometry, - COALESCE(nullif(as_numeric(height),-1),nullif(as_numeric(buildingheight),-1)) as height, - COALESCE(nullif(as_numeric(min_height),-1),nullif(as_numeric(buildingmin_height),-1)) as min_height, - COALESCE(nullif(as_numeric(levels),-1),nullif(as_numeric(buildinglevels),-1)) as levels, - COALESCE(nullif(as_numeric(min_level),-1),nullif(as_numeric(buildingmin_level),-1)) as min_level, - nullif(material, '') AS material, - nullif(colour, '') AS colour, - FALSE as hide_3d - FROM - osm_building_polygon obp - -- OSM mulipolygons once imported can give unique postgis polygons with holes, or multi parts polygons - WHERE osm_id < 0 AND ST_GeometryType(geometry) IN ('ST_Polygon', 'ST_MultiPolygon') - - UNION ALL -- etldoc: osm_building_polygon -> layer_building:z14_ -- Standalone buildings SELECT obp.osm_id,obp.geometry, @@ -74,9 +58,11 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( obr.role IS NOT NULL AS hide_3d FROM osm_building_polygon obp - LEFT JOIN osm_building_relation obr ON obr.member = obp.osm_id AND obr.role = 'outline' - -- Only check for ST_Polygon as we exclude buildings from relations keeping only positive ids - WHERE obp.osm_id >= 0 AND ST_GeometryType(obp.geometry) = 'ST_Polygon' + LEFT JOIN osm_building_relation obr ON + obp.osm_id >= 0 AND + obr.member = obp.osm_id AND + obr.role = 'outline' + WHERE ST_GeometryType(obp.geometry) IN ('ST_Polygon', 'ST_MultiPolygon') ); CREATE OR REPLACE FUNCTION layer_building(bbox geometry, zoom_level int)