From 7a8e16ec8eceaa532dc45769902db17ede91baea Mon Sep 17 00:00:00 2001 From: lukasmartinelli Date: Sat, 8 Oct 2016 15:23:19 +0200 Subject: [PATCH] Filter places by grid rank --- data.yml | 39 +++++++++++++++++++++++++++++++++++---- schema/layers/place.sql | 27 +++++++++++++++++++++------ 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/data.yml b/data.yml index 83be3cb5..d16635a9 100644 --- a/data.yml +++ b/data.yml @@ -302,7 +302,21 @@ Layer: port: 5432 srid: '' table: |- - ( SELECT * + ( + SELECT * FROM ( + SELECT geom, name, class, rank, scalerank, + row_number() OVER ( + PARTITION BY LabelGrid(geom, 150 * !pixel_width!) + ORDER BY scalerank ASC NULLS LAST, + CASE class + WHEN 'settlement' THEN 10 + WHEN 'subregion' THEN 5 + WHEN 'locality' THEN 2 ELSE 1 + END DESC, + rank DESC, + population DESC NULLS LAST, + length(name) DESC + ) AS gridrank FROM ( SELECT * FROM place_z3 WHERE z(!scale_denominator!) = 3 @@ -320,20 +334,37 @@ Layer: WHERE z(!scale_denominator!) = 7 UNION ALL SELECT * FROM place_z8 - WHERE z(!scale_denominator!) = 8 + WHERE z(!scale_denominator!) BETWEEN 8 AND 9 + UNION ALL + SELECT * FROM place_z10 + WHERE z(!scale_denominator!) = 10 + UNION ALL + SELECT * FROM place_z12 + WHERE z(!scale_denominator!) BETWEEN 11 AND 12 + UNION ALL + SELECT * FROM place_z13 + WHERE z(!scale_denominator!) >= 13 ) AS place WHERE geom && !bbox! + ) AS ranked_place + WHERE z(!scale_denominator!) <= 7 OR + (z(!scale_denominator!) = 8 AND gridrank <= 4) OR + (z(!scale_denominator!) = 9 AND gridrank <= 9) OR + (z(!scale_denominator!) = 10 AND gridrank <= 9) OR + (z(!scale_denominator!) = 11 AND gridrank <= 9) OR + (z(!scale_denominator!) = 12 AND gridrank <= 9) OR + z(!scale_denominator!) >= 13 ) AS t type: postgis user: osm description: Buildings fields: class: String + gridrank: Number name: String - rank: String scalerank: Number properties: - "buffer-size": 4 + "buffer-size": 64 srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over maxzoom: 14 minzoom: 0 diff --git a/schema/layers/place.sql b/schema/layers/place.sql index 5029a664..8be71aad 100644 --- a/schema/layers/place.sql +++ b/schema/layers/place.sql @@ -1,32 +1,47 @@ CREATE OR REPLACE VIEW place_z3 AS ( - SELECT geom, name, 'settlement' AS class, 'city' AS rank, scalerank + SELECT geom, name, 'settlement' AS class, 'city'::place AS rank, scalerank, pop_min AS population FROM ne_10m_populated_places WHERE scalerank <= 2 ); CREATE OR REPLACE VIEW place_z4 AS ( - SELECT geom, name, 'settlement' AS class, 'city' AS rank, scalerank + SELECT geom, name, 'settlement' AS class, 'city'::place AS rank, scalerank, pop_min AS population FROM ne_10m_populated_places WHERE scalerank <= 5 ); CREATE OR REPLACE VIEW place_z5 AS ( - SELECT geom, name, 'settlement' AS class, 'city' AS rank, scalerank + SELECT geom, name, 'settlement' AS class, 'city'::place AS rank, scalerank, pop_min AS population FROM ne_10m_populated_places WHERE scalerank <= 6 ); CREATE OR REPLACE VIEW place_z6 AS ( - SELECT geom, name, 'settlement' AS class, 'city' AS rank, scalerank + SELECT geom, name, 'settlement' AS class, 'city'::place AS rank, scalerank, pop_min AS population FROM ne_10m_populated_places WHERE scalerank <= 7 ); CREATE OR REPLACE VIEW place_z7 AS ( - SELECT geom, name, 'settlement' AS class, 'city' AS rank, scalerank FROM ne_10m_populated_places + SELECT geom, name, 'settlement' AS class, 'city'::place AS rank, scalerank, pop_min AS population + FROM ne_10m_populated_places ); CREATE OR REPLACE VIEW place_z8 AS ( - SELECT way AS geom, name, class::text, rank::text, NULL::integer AS scalerank FROM place_point + SELECT way AS geom, name, class::text, rank, NULL::integer AS scalerank, population FROM place_point WHERE rank IN ('city', 'town') ); + +CREATE OR REPLACE VIEW place_z10 AS ( + SELECT way AS geom, name, class::text, rank, NULL::integer AS scalerank, population FROM place_point + WHERE rank IN ('city', 'town', 'village') OR class='subregion' +); + +CREATE OR REPLACE VIEW place_z11 AS ( + SELECT way AS geom, name, class::text, rank, NULL::integer AS scalerank, population FROM place_point + WHERE class IN ('subregion', 'settlement') +); + +CREATE OR REPLACE VIEW place_z13 AS ( + SELECT way AS geom, name, class::text, rank, NULL::integer AS scalerank, population FROM place_point +);