diff --git a/docker-compose.yml b/docker-compose.yml index b67e4839..8e3e8ed6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,9 @@ version: "2" -volumes: - pgdata: services: postgres: image: "openmaptiles/postgis:2.2" volumes: - - pgdata:/var/lib/postgresql/data + - ./pgdata:/var/lib/postgresql/data ports: - "5432" env_file: .env diff --git a/layers/poi/layer.sql b/layers/poi/layer.sql index b82dc419..78e61b3b 100644 --- a/layers/poi/layer.sql +++ b/layers/poi/layer.sql @@ -1,5 +1,5 @@ --- etldoc: layer_poi[shape=record fillcolor=lightpink, style="rounded,filled", +-- etldoc: layer_poi[shape=record fillcolor=lightpink, style="rounded,filled", -- etldoc: label="layer_poi | z14_" ] ; CREATE OR REPLACE FUNCTION layer_poi(bbox geometry, zoom_level integer, pixel_width numeric) @@ -7,12 +7,20 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, class t SELECT osm_id, geometry, name, NULLIF(name_en, ''), poi_class(subclass) AS class, subclass, row_number() OVER ( PARTITION BY LabelGrid(geometry, 100 * pixel_width) - ORDER BY poi_class_rank(poi_class(subclass)) ASC, length(name) DESC + ORDER BY poi_class_rank(poi_class(subclass)) ASC, + length(name) DESC NULLS LAST )::int AS "rank" - -- etldoc: osm_poi_point -> layer_poi:z14_ - FROM osm_poi_point - WHERE geometry && bbox - AND zoom_level >= 14 - AND name <> '' - ORDER BY "rank"; + FROM ( + -- etldoc: osm_poi_point -> layer_poi:z14 + SELECT * FROM osm_poi_point + WHERE geometry && bbox + AND zoom_level >= 14 + UNION ALL + -- etldoc: osm_poi_polygon -> layer_poi:z14 + SELECT * FROM osm_poi_polygon + WHERE geometry && bbox + AND zoom_level >= 14 + ) as poi_union + ORDER BY "rank" + ; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/poi/mapping.yaml b/layers/poi/mapping.yaml index 37c71938..75053131 100644 --- a/layers/poi/mapping.yaml +++ b/layers/poi/mapping.yaml @@ -1,3 +1,296 @@ + +# imposm3 mapping file for https://github.com/osm2vectortiles/imposm3 +# Warning: this is not the official imposm3 + +# aerialway values , see http://taginfo.openstreetmap.org/keys/aerialway#values +def_poi_mapping_aerialway: &poi_mapping_aerialway + - station + +# amenity values , see http://taginfo.openstreetmap.org/keys/amenity#values +def_poi_mapping_amenity: &poi_mapping_amenity + - arts_centre + - bank + - bar + - bbq + - bicycle_rental + - biergarten + - bus_station + - cafe + - cinema + - college + - community_centre + - courthouse + - dentist + - doctors + - embassy + - fast_food + - ferry_terminal + - fire_station + - food_court + - fuel + - grave_yard + - hospital + - ice_cream + - kindergarten + - library + - marketplace + - nightclub + - nursing_home + - pharmacy + - place_of_worship + - police + - post_box + - post_office + - prison + - pub + - public_building + - recycling + - restaurant + - school + - shelter + - swimming_pool + - taxi + - telephone + - theatre + - toilets + - townhall + - university + - veterinary + - waste_basket + +# barrier values , see http://taginfo.openstreetmap.org/keys/barrier#values +def_poi_mapping_barrier: &poi_mapping_barrier + - bollard + - border_control + - cycle_barrier + - gate + - lift_gate + - sally_port + - stile + - toll_booth + +# highway values , see http://taginfo.openstreetmap.org/keys/highway#values +def_poi_mapping_highway: &poi_mapping_highway + - bus_stop + +# historic values , see http://taginfo.openstreetmap.org/keys/historic#values +def_poi_mapping_historic: &poi_mapping_historic + - monument + +# landuse values , see http://taginfo.openstreetmap.org/keys/landuse#values +def_poi_mapping_landuse: &poi_mapping_landuse + - basin + - brownfield + - cemetery + - reservoir + +# leisure values , see http://taginfo.openstreetmap.org/keys/leisure#values +def_poi_mapping_leisure: &poi_mapping_leisure + - dog_park + - garden + - golf_course + - ice_rink + - marina + - miniature_golf + - park + - pitch + - playground + - sports_centre + - stadium + - swimming_area + - swimming_pool + - water_park + +# shop values , see http://taginfo.openstreetmap.org/keys/shop#values +def_poi_mapping_shop: &poi_mapping_shop + - accessories + - alcohol + - antiques + - art + - bag + - bakery + - beauty + - bed + - beverages + - bicycle + - books + - boutique + - butcher + - camera + - car + - car_repair + - carpet + - charity + - chemist + - chocolate + - clothes + - coffee + - computer + - confectionery + - convenience + - copyshop + - cosmetics + - deli + - delicatessen + - department_store + - doityourself + - dry_cleaning + - electronics + - erotic + - fabric + - florist + - furniture + - garden_centre + - general + - gift + - greengrocer + - hairdresser + - hardware + - hearing_aids + - hifi + - ice_cream + - interior_decoration + - jewelry + - kiosk + - lamps + - laundry + - mall + - massage + - mobile_phone + - motorcycle + - music + - musical_instrument + - newsagent + - optician + - outdoor + - perfume + - perfumery + - pet + - photo + - second_hand + - shoes + - sports + - stationery + - supermarket + - tailor + - tattoo + - ticket + - tobacco + - toys + - travel_agency + - video + - video_games + - watches + - weapons + - wholesale + - wine + +# sport values , see http://taginfo.openstreetmap.org/keys/sport#values +def_poi_mapping_sport: &poi_mapping_sport + - american_football + - archery + - athletics + - australian_football + - badminton + - baseball + - basketball + - beachvolleyball + - billiards + - bmx + - boules + - bowls + - boxing + - canadian_football + - canoe + - chess + - climbing + - climbing_adventure + - cricket + - cricket_nets + - croquet + - curling + - cycling + - disc_golf + - diving + - dog_racing + - equestrian + - fatsal + - field_hockey + - free_flying + - gaelic_games + - golf + - gymnastics + - handball + - hockey + - horse_racing + - horseshoes + - ice_hockey + - ice_stock + - judo + - karting + - korfball + - long_jump + - model_aerodrome + - motocross + - motor + - multi + - netball + - orienteering + - paddle_tennis + - paintball + - paragliding + - pelota + - racquet + - rc_car + - rowing + - rugby + - rugby_league + - rugby_union + - running + - sailing + - scuba_diving + - shooting + - shooting_range + - skateboard + - skating + - skiing + - soccer + - surfing + - swimming + - table_soccer + - table_tennis + - team_handball + - tennis + - toboggan + - volleyball + - water_ski + - yoga + +# tourism values , see http://taginfo.openstreetmap.org/keys/tourism#values +def_poi_mapping_tourism: &poi_mapping_tourism + - alpine_hut + - artwork + - attraction + - bed_and_breakfast + - camp_site + - caravan_site + - chalet + - gallery + - guest_house + - hostel + - hotel + - information + - motel + - museum + - picnic_site + - theme_park + - viewpoint + - zoo + +# waterway values , see http://taginfo.openstreetmap.org/keys/waterway#values +def_poi_mapping_waterway: &poi_mapping_waterway + - dock + tables: # etldoc: imposm3 -> osm_poi_point poi_point: @@ -16,269 +309,44 @@ tables: - name: subclass type: mapping_value mapping: - amenity: - - arts_centre - - police - - fire_station - - post_box - - post_office - - telephone - - library - - townhall - - courthouse - - prison - - place_of_worship - - embassy - - community_centre - - nursing_home - - university - - school - - kindergarten - - college - - public_building - - pharmacy - - hospital - - doctors - - dentist - - veterinary - - theatre - - nightclub - - cinema - - restaurant - - recycling - - fast_food - - cafe - - pub - - bar - - food_court - - biergarten - - swimming_pool - - shelter - - grave_yard - - bank - - ferry_terminal - - fuel - - waste_basket - - bicycle_rental - - bbq - - taxi - - bus_station - - marketplace - - toilets - leisure: - - park - - playground - - dog_park - - sports_centre - - pitch - - swimming_pool - - swimming_area - - water_park - - golf_course - - miniature_golf - - marina - - stadium - - ice_rink - - garden - landuse: - - cemetery - - basin - - reservoir - - brownfield - sport: - - swimming - - tennis - - soccer - - baseball - - basketball - - multi - - golf - - equestrian - - athletics - - volleyball - - climbing - - bowls - - american_football - - skateboard - - shooting - - skiing - - boules - - beachvolleyball - - cricket - - table_tennis - - hockey - - gymnastics - - running - - canoe - - rugby_union - - skating - - scuba_diving - - motor - - horse_racing - - handball - - team_handball - - karting - - cycling - - archery - - motocross - - pelota - - rugby - - gaelic_games - - model_aerodrome - - netball - - rugby_league - - free_flying - - rowing - - chess - - australian_football - - cricket_nets - - racquet - - bmx - - sailing - - ice_stock - - badminton - - paddle_tennis - - dog_racing - - fatsal - - billiards - - ice_hockey - - yoga - - disc_golf - - orienteering - - toboggan - - horseshoes - - paragliding - - korfball - - diving - - rc_car - - canadian_football - - field_hockey - - shooting_range - - boxing - - curling - - surfing - - water_ski - - judo - - croquet - - paintball - - climbing_adventure - - long_jump - - table_soccer - tourism: - - attraction - - artwork - - gallery - - hotel - - motel - - bed_and_breakfast - - guest_house - - hostel - - chalet - - camp_site - - alpine_hut - - caravan_site - - museum - - viewpoint - - zoo - - theme_park - - information - - picnic_site - shop: - - accessories - - alcohol - - antiques - - art - - bag - - bakery - - beauty - - bed - - beverages - - bicycle - - books - - boutique - - butcher - - camera - - car - - car_repair - - carpet - - charity - - chemist - - chocolate - - clothes - - coffee - - computer - - confectionery - - convenience - - copyshop - - cosmetics - - garden_centre - - deli - - delicatessen - - department_store - - doityourself - - dry_cleaning - - video - - electronics - - erotic - - fabric - - florist - - furniture - - video_games - - general - - gift - - greengrocer - - hairdresser - - hardware - - hearing_aids - - hifi - - ice_cream - - interior_decoration - - jewelry - - kiosk - - lamps - - laundry - - mall - - massage - - mobile_phone - - motorcycle - - music - - musical_instrument - - newsagent - - optician - - outdoor - - perfumery - - perfume - - pet - - photo - - second_hand - - shoes - - sports - - stationery - - supermarket - - tailor - - tattoo - - ticket - - tobacco - - toys - - travel_agency - - watches - - weapons - - wholesale - - wine - highway: - - bus_stop - barrier: - - sally_port - - lift_gate - - gate - - bollard - - stile - - cycle_barrier - - toll_booth - - border_control - historic: - - monument - waterway: - - dock - aerialway: - - station + aerialway: *poi_mapping_aerialway + amenity: *poi_mapping_amenity + barrier: *poi_mapping_barrier + highway: *poi_mapping_highway + historic: *poi_mapping_historic + landuse: *poi_mapping_landuse + leisure: *poi_mapping_leisure + shop: *poi_mapping_shop + sport: *poi_mapping_sport + tourism: *poi_mapping_tourism + waterway: *poi_mapping_waterway + + + # etldoc: imposm3 -> osm_poi_polygon + poi_polygon: + type: polygon + fields: + - name: osm_id + type: id + - name: geometry + type: geometry + - name: name + key: name + type: string + - name: name_en + key: name:en + type: string + - name: subclass + type: mapping_value + mapping: + aerialway: *poi_mapping_aerialway + amenity: *poi_mapping_amenity + barrier: *poi_mapping_barrier + highway: *poi_mapping_highway + historic: *poi_mapping_historic + landuse: *poi_mapping_landuse + leisure: *poi_mapping_leisure + shop: *poi_mapping_shop + sport: *poi_mapping_sport + tourism: *poi_mapping_tourism + waterway: *poi_mapping_waterway \ No newline at end of file diff --git a/layers/poi/poi.yaml b/layers/poi/poi.yaml index cc1716b1..9526228c 100644 --- a/layers/poi/poi.yaml +++ b/layers/poi/poi.yaml @@ -32,6 +32,7 @@ layer: srid: 900913 query: (SELECT geometry, name, name_en, class, subclass, rank FROM layer_poi(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: + - ./poi_polygon_update.sql - ./class.sql - ./layer.sql datasources: diff --git a/layers/poi/poi_polygon_update.sql b/layers/poi/poi_polygon_update.sql new file mode 100644 index 00000000..1e5073d7 --- /dev/null +++ b/layers/poi/poi_polygon_update.sql @@ -0,0 +1,5 @@ +-- etldoc: osm_poi_polygon -> osm_poi_polygon +UPDATE osm_poi_polygon SET geometry=topoint(geometry) +WHERE ST_GeometryType(geometry) <> 'ST_Point'; + +ANALYZE osm_poi_polygon;