From 237278eb842ce305e7d208eb4af4d6e57ed7558b Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Sun, 18 Jun 2017 10:16:57 -0400 Subject: [PATCH] Import street and associatedStreet to get the houses (#284) * Import street and associatedStreet to get the houses * Some artifcating on the associatedstreet and street member buildings --- layers/building/building.sql | 36 ++++++- layers/building/mapping.yaml | 176 +++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+), 5 deletions(-) diff --git a/layers/building/building.sql b/layers/building/building.sql index cd8ebf57..fc2f3a59 100644 --- a/layers/building/building.sql +++ b/layers/building/building.sql @@ -14,10 +14,13 @@ $$ STRICT LANGUAGE plpgsql IMMUTABLE; CREATE INDEX IF NOT EXISTS osm_building_relation_building_idx ON osm_building_relation(building); +--CREATE INDEX IF NOT EXISTS osm_building_associatedstreet_role_idx ON osm_building_associatedstreet(role); +--CREATE INDEX IF NOT EXISTS osm_building_street_role_idx ON osm_building_street(role); CREATE OR REPLACE VIEW osm_all_buildings AS ( - -- etldoc: osm_building_relation -> layer_building:z14_ - SELECT member AS osm_id,geometry, + -- etldoc: osm_building_relation -> layer_building:z14_ + -- Buildings built from relations + SELECT member AS 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, @@ -25,7 +28,30 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( FROM osm_building_relation WHERE building = '' UNION ALL - -- etldoc: osm_building_polygon -> layer_building:z14_ + + -- etldoc: osm_building_associatedstreet -> layer_building:z14_ + -- Buildings in associatedstreet relations + SELECT member AS 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 + FROM + osm_building_associatedstreet WHERE role = 'house' + UNION ALL + -- etldoc: osm_building_street -> layer_building:z14_ + -- Buildings in street relations + SELECT member AS 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 + FROM + osm_building_street WHERE role = 'house' + UNION ALL + + -- etldoc: osm_building_polygon -> layer_building:z14_ + -- Buildings that are inner/outer 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, @@ -34,9 +60,9 @@ CREATE OR REPLACE VIEW osm_all_buildings AS ( FROM osm_building_polygon obp WHERE EXISTS (SELECT 1 FROM osm_building_multipolygon obm WHERE obp.osm_id = obm.osm_id) UNION ALL - -- etldoc: osm_building_polygon -> layer_building:z14_ + -- etldoc: osm_building_polygon -> layer_building:z14_ + -- Standalone buildings 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, diff --git a/layers/building/mapping.yaml b/layers/building/mapping.yaml index 0534580e..298ae619 100644 --- a/layers/building/mapping.yaml +++ b/layers/building/mapping.yaml @@ -65,6 +65,182 @@ tables: building:part: ["no","none","No"] type: polygon + # etldoc: imposm3 -> osm_building_street + building_street: + fields: + - name: osm_id + type: id + - name: geometry + type: validated_geometry + - name: area + type: area + - name: webmerc_area + type: webmerc_area + - name: building + key: building + type: string + from_member: true + - name: buildingpart + key: building:part + type: string + from_member: true + - name: buildingheight + key: building:height + type: string + from_member: true + - name: height + key: height + type: string + from_member: true + - name: buildingmin_height + key: building:min_height + type: string + from_member: true + - name: min_height + key: min_height + type: string + from_member: true + - name: buildinglevels + key: building:levels + type: string + from_member: true + - name: levels + key: levels + type: string + from_member: true + - name: buildingmin_level + key: building:min_level + type: string + from_member: true + - name: min_level + key: min_level + type: string + from_member: true + - name: relbuildingheight + key: building:height + type: string + - name: relheight + key: height + type: string + - name: relbuildingmin_height + key: building:min_height + type: string + - name: relmin_height + key: min_height + type: string + - name: relbuildinglevels + key: building:levels + type: string + - name: rellevels + key: levels + type: string + - name: relbuildingmin_level + key: building:min_level + type: string + - name: relmin_level + key: min_level + type: string + - name: member + type: member_id + - name: index + type: member_index + - name: role + type: member_role + from_member: true + - name: type + type: member_type + mapping: + type: [street] + type: relation_member + + # etldoc: imposm3 -> osm_building_associatedstreet + building_associatedstreet: + fields: + - name: osm_id + type: id + - name: geometry + type: validated_geometry + - name: area + type: area + - name: webmerc_area + type: webmerc_area + - name: building + key: building + type: string + from_member: true + - name: buildingpart + key: building:part + type: string + from_member: true + - name: buildingheight + key: building:height + type: string + from_member: true + - name: height + key: height + type: string + from_member: true + - name: buildingmin_height + key: building:min_height + type: string + from_member: true + - name: min_height + key: min_height + type: string + from_member: true + - name: buildinglevels + key: building:levels + type: string + from_member: true + - name: levels + key: levels + type: string + from_member: true + - name: buildingmin_level + key: building:min_level + type: string + from_member: true + - name: min_level + key: min_level + type: string + from_member: true + - name: relbuildingheight + key: building:height + type: string + - name: relheight + key: height + type: string + - name: relbuildingmin_height + key: building:min_height + type: string + - name: relmin_height + key: min_height + type: string + - name: relbuildinglevels + key: building:levels + type: string + - name: rellevels + key: levels + type: string + - name: relbuildingmin_level + key: building:min_level + type: string + - name: relmin_level + key: min_level + type: string + - name: member + type: member_id + - name: index + type: member_index + - name: role + type: member_role + from_member: true + - name: type + type: member_type + mapping: + type: [associatedStreet] + type: relation_member + # etldoc: imposm3 -> osm_building_relation building_relation: fields: