Refactor road into table function

pull/24/head
lukasmartinelli 2016-10-08 16:39:12 +02:00
rodzic c3aa9ae0a8
commit 7cb3b4a43a
2 zmienionych plików z 36 dodań i 33 usunięć

Wyświetl plik

@ -68,34 +68,8 @@ Layer:
max_size: 512
password: osm
port: 5432
srid: ''
table: |-
( 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
srid: 900913
table: (SELECT * FROM layer_road(!bbox!, z(!scale_denominator!))) AS t
type: postgis
user: osm
description: Buildings

Wyświetl plik

@ -1,8 +1,8 @@
CREATE OR REPLACE FUNCTION ne_road_class(type VARCHAR) RETURNS VARCHAR AS $$
SELECT CASE type
WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary'
WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary'
ELSE type
END;
$$ LANGUAGE SQL IMMUTABLE;
@ -10,13 +10,13 @@ $$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE VIEW ne_10m_global_roads AS (
SELECT geom, scalerank, ne_road_class(type) AS class
FROM ne_10m_roads
WHERE continent <> 'North America'
WHERE continent <> 'North America'
AND featurecla = 'Road'
AND type IN ('Major Highway', 'Secondary Highway', 'Road')
UNION ALL
SELECT geom, scalerank, ne_road_class(type) AS class
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 (
@ -92,3 +92,32 @@ CREATE OR REPLACE VIEW road_z14 AS (
SELECT way AS geom, class::text
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;