diff --git a/layers/highway/highway.sql b/layers/highway/highway.sql index 8297e6b..121a158 100644 --- a/layers/highway/highway.sql +++ b/layers/highway/highway.sql @@ -1,3 +1,16 @@ +CREATE OR REPLACE FUNCTION highway_class(highway TEXT) RETURNS TEXT AS $$ + SELECT CASE + WHEN highway IN ('unclassified', 'residential', 'living_street', 'road', 'track', 'service') THEN 'minor' + WHEN highway IN ('primary', 'primary_link') THEN 'primary' + WHEN highway IN ('secondary', 'secondary_link') THEN 'secondary' + WHEN highway IN ('tertiary', 'tertiary_link') THEN 'tertiary' + WHEN highway IN ('motorway', 'motorway_link') THEN 'motorway' + WHEN highway IN ('trunk', 'trunk_link') THEN 'trunk' + WHEN highway IN ('pedestrian', 'path', 'footway', 'cycleway', 'steps') THEN 'path' + ELSE NULL + END; +$$ LANGUAGE SQL IMMUTABLE; + CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$ SELECT CASE type WHEN 'Major Highway' THEN 'motorway' @@ -8,80 +21,80 @@ CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$ $$ LANGUAGE SQL IMMUTABLE; CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS ( - SELECT geom, scalerank, ne_highway(type) AS highway + SELECT geom AS geometry, scalerank, ne_highway(type) AS highway FROM ne_10m_roads WHERE continent <> 'North America' AND featurecla = 'Road' AND type IN ('Major Highway', 'Secondary Highway', 'Road') UNION ALL - SELECT geom, scalerank, ne_highway(type) AS highway + SELECT geom AS geometry, scalerank, ne_highway(type) AS highway FROM ne_10m_roads_north_america WHERE type IN ('Major Highway', 'Secondary Highway', 'Road') ); -CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geom_idx ON ne_10m_global_roads USING gist(geom); +CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geometry_idx ON ne_10m_global_roads USING gist(geometry); CREATE INDEX IF NOT EXISTS ne_10m_global_roads_scalerank_idx ON ne_10m_global_roads(scalerank); CREATE OR REPLACE VIEW highway_z4 AS ( - SELECT geom, highway + SELECT geometry, highway FROM ne_10m_global_roads WHERE scalerank <= 5 ); CREATE OR REPLACE VIEW highway_z5 AS ( - SELECT geom, highway + SELECT geometry, highway FROM ne_10m_global_roads WHERE scalerank <= 6 ); CREATE OR REPLACE VIEW highway_z6 AS ( - SELECT geom, highway + SELECT geometry, highway FROM ne_10m_global_roads WHERE scalerank <= 7 ); CREATE OR REPLACE VIEW highway_z7 AS ( - SELECT geom, highway + SELECT geometry, highway FROM ne_10m_global_roads WHERE scalerank <= 7 ); CREATE TABLE IF NOT EXISTS highway_z8 AS ( - SELECT ST_Simplify(geometry, 200) AS geom, highway + SELECT ST_Simplify(geometry, 200) AS geometry, highway FROM osm_highway_linestring WHERE highway IN ('motorway','trunk') ); -CREATE INDEX IF NOT EXISTS highway_z8_geom_idx ON highway_z8 USING gist(geom); +CREATE INDEX IF NOT EXISTS highway_z8_geometry_idx ON highway_z8 USING gist(geometry); CREATE TABLE IF NOT EXISTS highway_z9 AS ( - SELECT ST_Simplify(geometry, 120) AS geom, highway + SELECT ST_Simplify(geometry, 120) AS geometry, highway FROM osm_highway_linestring WHERE highway IN ('motorway','trunk', 'primary') ); -CREATE INDEX IF NOT EXISTS highway_z9_geom_idx ON highway_z9 USING gist(geom); +CREATE INDEX IF NOT EXISTS highway_z9_geometry_idx ON highway_z9 USING gist(geometry); CREATE TABLE IF NOT EXISTS highway_z10 AS ( - SELECT ST_Simplify(geometry, 50) AS geom, highway + SELECT ST_Simplify(geometry, 50) AS geometry, highway FROM osm_highway_linestring WHERE highway IN ('motorway','trunk', 'primary', 'secondary') ); -CREATE INDEX IF NOT EXISTS highway_z10_geom_idx ON highway_z10 USING gist(geom); +CREATE INDEX IF NOT EXISTS highway_z10_geometry_idx ON highway_z10 USING gist(geometry); CREATE TABLE IF NOT EXISTS highway_z11 AS ( - SELECT ST_Simplify(geometry, 20) AS geom, highway + SELECT ST_Simplify(geometry, 20) AS geometry, highway FROM osm_highway_linestring WHERE highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') ); -CREATE INDEX IF NOT EXISTS highway_z11_geom_idx ON highway_z11 USING gist(geom); +CREATE INDEX IF NOT EXISTS highway_z11_geometry_idx ON highway_z11 USING gist(geometry); CREATE OR REPLACE VIEW highway_z12 AS ( - SELECT geometry AS geom, highway + SELECT geometry, highway FROM osm_highway_linestring WHERE highway IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor') ); CREATE OR REPLACE VIEW highway_z13 AS ( - SELECT geometry AS geom, highway + SELECT geometry, highway FROM osm_highway_linestring WHERE highway IN ( 'motorway', @@ -101,15 +114,14 @@ CREATE OR REPLACE VIEW highway_z13 AS ( ) ); - CREATE OR REPLACE VIEW highway_z14 AS ( SELECT geometry AS geom, highway FROM osm_highway_linestring ); CREATE OR REPLACE FUNCTION layer_highway(bbox geometry, zoom_level int) -RETURNS TABLE(geom geometry, highway text) AS $$ - SELECT geom, highway FROM ( +RETURNS TABLE(geometry geometry, class text, subclass text) AS $$ + SELECT geometry, highway_class(highway) AS class, highway AS sublcass FROM ( SELECT * FROM highway_z4 WHERE zoom_level BETWEEN 4 AND 5 UNION ALL SELECT * FROM highway_z5 WHERE zoom_level = 5 @@ -132,5 +144,5 @@ RETURNS TABLE(geom geometry, highway text) AS $$ UNION ALL SELECT * FROM highway_z14 WHERE zoom_level >= 14 ) AS zoom_levels - WHERE geom && bbox; + WHERE geometry && bbox; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/highway/highway.yaml b/layers/highway/highway.yaml index 64f8705..036847c 100644 --- a/layers/highway/highway.yaml +++ b/layers/highway/highway.yaml @@ -8,6 +8,7 @@ layer: fields: class: String datasource: + geometry_field: geometry srid: 900913 query: (SELECT * FROM layer_highway(!bbox!, z(!scale_denominator!))) AS t schema: