Filter places by grid rank

This commit is contained in:
lukasmartinelli 2016-10-08 15:23:19 +02:00
parent 201defe496
commit 7a8e16ec8e
2 changed files with 56 additions and 10 deletions

View File

@ -302,7 +302,21 @@ Layer:
port: 5432 port: 5432
srid: '' srid: ''
table: |- 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 ( FROM (
SELECT * FROM place_z3 SELECT * FROM place_z3
WHERE z(!scale_denominator!) = 3 WHERE z(!scale_denominator!) = 3
@ -320,20 +334,37 @@ Layer:
WHERE z(!scale_denominator!) = 7 WHERE z(!scale_denominator!) = 7
UNION ALL UNION ALL
SELECT * FROM place_z8 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 ) AS place
WHERE geom && !bbox! 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 ) AS t
type: postgis type: postgis
user: osm user: osm
description: Buildings description: Buildings
fields: fields:
class: String class: String
gridrank: Number
name: String name: String
rank: String
scalerank: Number scalerank: Number
properties: 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 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 maxzoom: 14
minzoom: 0 minzoom: 0

View File

@ -1,32 +1,47 @@
CREATE OR REPLACE VIEW place_z3 AS ( 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 FROM ne_10m_populated_places
WHERE scalerank <= 2 WHERE scalerank <= 2
); );
CREATE OR REPLACE VIEW place_z4 AS ( 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 FROM ne_10m_populated_places
WHERE scalerank <= 5 WHERE scalerank <= 5
); );
CREATE OR REPLACE VIEW place_z5 AS ( 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 FROM ne_10m_populated_places
WHERE scalerank <= 6 WHERE scalerank <= 6
); );
CREATE OR REPLACE VIEW place_z6 AS ( 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 FROM ne_10m_populated_places
WHERE scalerank <= 7 WHERE scalerank <= 7
); );
CREATE OR REPLACE VIEW place_z7 AS ( 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 ( 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') 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
);