Refactor road into table function

This commit is contained in:
lukasmartinelli 2016-10-08 16:39:12 +02:00
parent c3aa9ae0a8
commit 7cb3b4a43a
2 changed files with 36 additions and 33 deletions

View File

@ -68,34 +68,8 @@ Layer:
max_size: 512 max_size: 512
password: osm password: osm
port: 5432 port: 5432
srid: '' srid: 900913
table: |- table: (SELECT * FROM layer_road(!bbox!, z(!scale_denominator!))) AS t
( SELECT *
FROM (
SELECT * FROM road_z4 WHERE z(!scale_denominator!) BETWEEN 4 AND 5
UNION ALL
SELECT * FROM road_z5 WHERE z(!scale_denominator!) = 5
UNION ALL
SELECT * FROM road_z6 WHERE z(!scale_denominator!) = 6
UNION ALL
SELECT * FROM road_z7 WHERE z(!scale_denominator!) = 7
UNION ALL
SELECT * FROM road_z8 WHERE z(!scale_denominator!) = 8
UNION ALL
SELECT ST_Simplify(geom, 200), class FROM road_z9 WHERE z(!scale_denominator!) = 9
UNION ALL
SELECT ST_Simplify(geom, 120), class FROM road_z10 WHERE z(!scale_denominator!) = 10
UNION ALL
SELECT ST_Simplify(geom, 50), class FROM road_z11 WHERE z(!scale_denominator!) = 11
UNION ALL
SELECT ST_Simplify(geom, 20), class FROM road_z12 WHERE z(!scale_denominator!) = 12
UNION ALL
SELECT * FROM road_z13 WHERE z(!scale_denominator!) = 13
UNION ALL
SELECT * FROM road_z14 WHERE z(!scale_denominator!) >= 14
) AS road
WHERE geom && !bbox!
) AS data
type: postgis type: postgis
user: osm user: osm
description: Buildings description: Buildings

View File

@ -1,8 +1,8 @@
CREATE OR REPLACE FUNCTION ne_road_class(type VARCHAR) RETURNS VARCHAR AS $$ CREATE OR REPLACE FUNCTION ne_road_class(type VARCHAR) RETURNS VARCHAR AS $$
SELECT CASE type SELECT CASE type
WHEN 'Major Highway' THEN 'motorway' WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk' WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary' WHEN 'Road' THEN 'primary'
ELSE type ELSE type
END; END;
$$ LANGUAGE SQL IMMUTABLE; $$ LANGUAGE SQL IMMUTABLE;
@ -10,13 +10,13 @@ $$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE VIEW ne_10m_global_roads AS ( CREATE OR REPLACE VIEW ne_10m_global_roads AS (
SELECT geom, scalerank, ne_road_class(type) AS class SELECT geom, scalerank, ne_road_class(type) AS class
FROM ne_10m_roads FROM ne_10m_roads
WHERE continent <> 'North America' WHERE continent <> 'North America'
AND featurecla = 'Road' AND featurecla = 'Road'
AND type IN ('Major Highway', 'Secondary Highway', 'Road') AND type IN ('Major Highway', 'Secondary Highway', 'Road')
UNION ALL UNION ALL
SELECT geom, scalerank, ne_road_class(type) AS class SELECT geom, scalerank, ne_road_class(type) AS class
FROM ne_10m_roads_north_america FROM ne_10m_roads_north_america
WHERE type IN ('Major Highway', 'Secondary Highway', 'Road') WHERE type IN ('Major Highway', 'Secondary Highway', 'Road')
); );
CREATE OR REPLACE VIEW road_z4 AS ( CREATE OR REPLACE VIEW road_z4 AS (
@ -92,3 +92,32 @@ CREATE OR REPLACE VIEW road_z14 AS (
SELECT way AS geom, class::text SELECT way AS geom, class::text
FROM road_areas FROM road_areas
); );
CREATE OR REPLACE FUNCTION layer_road(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, class text) AS $$
WITH zoom_levels AS (
SELECT * FROM road_z4 WHERE zoom_level BETWEEN 4 AND 5
UNION ALL
SELECT * FROM road_z5 WHERE zoom_level = 5
UNION ALL
SELECT * FROM road_z6 WHERE zoom_level = 6
UNION ALL
SELECT * FROM road_z7 WHERE zoom_level = 7
UNION ALL
SELECT * FROM road_z8 WHERE zoom_level = 8
UNION ALL
SELECT ST_Simplify(geom, 200), class FROM road_z9 WHERE zoom_level = 9
UNION ALL
SELECT ST_Simplify(geom, 120), class FROM road_z10 WHERE zoom_level = 10
UNION ALL
SELECT ST_Simplify(geom, 50), class FROM road_z11 WHERE zoom_level = 11
UNION ALL
SELECT ST_Simplify(geom, 20), class FROM road_z12 WHERE zoom_level = 12
UNION ALL
SELECT * FROM road_z13 WHERE zoom_level = 13
UNION ALL
SELECT * FROM road_z14 WHERE zoom_level >= 14
)
SELECT geom, class::text FROM zoom_levels
WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE;