Simplify some of the OSM->OMT field value mappings using declarative syntax. This approach is not for all cases, but in many it removes the need of storing the same field in both the .yaml and .sql files. TODO: support more complex AND/OR cases
133 lines
5.4 KiB
PL/PgSQL
133 lines
5.4 KiB
PL/PgSQL
--TODO: Find a way to nicely generalize landcover
|
|
--CREATE TABLE IF NOT EXISTS landcover_grouped_gen2 AS (
|
|
-- SELECT osm_id, ST_Simplify((ST_Dump(geometry)).geom, 600) AS geometry, landuse, "natural", wetland
|
|
-- FROM (
|
|
-- SELECT max(osm_id) AS osm_id, ST_Union(ST_Buffer(geometry, 600)) AS geometry, landuse, "natural", wetland
|
|
-- FROM osm_landcover_polygon_gen1
|
|
-- GROUP BY LabelGrid(geometry, 15000000), landuse, "natural", wetland
|
|
-- ) AS grouped_measurements
|
|
--);
|
|
--CREATE INDEX IF NOT EXISTS landcover_grouped_gen2_geometry_idx ON landcover_grouped_gen2 USING gist(geometry);
|
|
|
|
CREATE OR REPLACE FUNCTION landcover_class(subclass VARCHAR) RETURNS TEXT AS $$
|
|
SELECT CASE
|
|
%%FIELD_MAPPING: class %%
|
|
ELSE NULL
|
|
END;
|
|
$$ LANGUAGE SQL IMMUTABLE;
|
|
|
|
-- etldoc: ne_110m_glaciated_areas -> landcover_z0
|
|
CREATE OR REPLACE VIEW landcover_z0 AS (
|
|
SELECT NULL::bigint AS osm_id, geometry, 'glacier'::text AS subclass FROM ne_110m_glaciated_areas
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z2 AS (
|
|
-- etldoc: ne_50m_glaciated_areas -> landcover_z2
|
|
SELECT NULL::bigint AS osm_id, geometry, 'glacier'::text AS subclass FROM ne_50m_glaciated_areas
|
|
UNION ALL
|
|
-- etldoc: ne_50m_antarctic_ice_shelves_polys -> landcover_z2
|
|
SELECT NULL::bigint AS osm_id, geometry, 'ice_shelf'::text AS subclass FROM ne_50m_antarctic_ice_shelves_polys
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z5 AS (
|
|
-- etldoc: ne_10m_glaciated_areas -> landcover_z5
|
|
SELECT NULL::bigint AS osm_id, geometry, 'glacier'::text AS subclass FROM ne_10m_glaciated_areas
|
|
UNION ALL
|
|
-- etldoc: ne_10m_antarctic_ice_shelves_polys -> landcover_z5
|
|
SELECT NULL::bigint AS osm_id, geometry, 'ice_shelf'::text AS subclass FROM ne_10m_antarctic_ice_shelves_polys
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z7 AS (
|
|
-- etldoc: osm_landcover_polygon_gen7 -> landcover_z7
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen7
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z8 AS (
|
|
-- etldoc: osm_landcover_polygon_gen6 -> landcover_z8
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen6
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z9 AS (
|
|
-- etldoc: osm_landcover_polygon_gen5 -> landcover_z9
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen5
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z10 AS (
|
|
-- etldoc: osm_landcover_polygon_gen4 -> landcover_z10
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen4
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z11 AS (
|
|
-- etldoc: osm_landcover_polygon_gen3 -> landcover_z11
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen3
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z12 AS (
|
|
-- etldoc: osm_landcover_polygon_gen2 -> landcover_z12
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen2
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z13 AS (
|
|
-- etldoc: osm_landcover_polygon_gen1 -> landcover_z13
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon_gen1
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW landcover_z14 AS (
|
|
-- etldoc: osm_landcover_polygon -> landcover_z14
|
|
SELECT osm_id, geometry, subclass FROM osm_landcover_polygon
|
|
);
|
|
|
|
-- etldoc: layer_landcover[shape=record fillcolor=lightpink, style="rounded, filled", label="layer_landcover | <z0_1> z0-z1 | <z2_4> z2-z4 | <z5_6> z5-z6 |<z7> z7 |<z8> z8 |<z9> z9 |<z10> z10 |<z11> z11 |<z12> z12|<z13> z13|<z14_> z14+" ] ;
|
|
|
|
CREATE OR REPLACE FUNCTION layer_landcover(bbox geometry, zoom_level int)
|
|
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$
|
|
SELECT osm_id, geometry,
|
|
landcover_class(subclass) AS class,
|
|
subclass
|
|
FROM (
|
|
-- etldoc: landcover_z0 -> layer_landcover:z0_1
|
|
SELECT * FROM landcover_z0
|
|
WHERE zoom_level BETWEEN 0 AND 1 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z2 -> layer_landcover:z2_4
|
|
SELECT * FROM landcover_z2
|
|
WHERE zoom_level BETWEEN 2 AND 4 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z5 -> layer_landcover:z5_6
|
|
SELECT * FROM landcover_z5
|
|
WHERE zoom_level BETWEEN 5 AND 6 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z7 -> layer_landcover:z7
|
|
SELECT *
|
|
FROM landcover_z7 WHERE zoom_level = 7 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z8 -> layer_landcover:z8
|
|
SELECT *
|
|
FROM landcover_z8 WHERE zoom_level = 8 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z9 -> layer_landcover:z9
|
|
SELECT *
|
|
FROM landcover_z9 WHERE zoom_level = 9 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z10 -> layer_landcover:z10
|
|
SELECT *
|
|
FROM landcover_z10 WHERE zoom_level = 10 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z11 -> layer_landcover:z11
|
|
SELECT *
|
|
FROM landcover_z11 WHERE zoom_level = 11 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z12 -> layer_landcover:z12
|
|
SELECT *
|
|
FROM landcover_z12 WHERE zoom_level = 12 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z13 -> layer_landcover:z13
|
|
SELECT *
|
|
FROM landcover_z13 WHERE zoom_level = 13 AND geometry && bbox
|
|
UNION ALL
|
|
-- etldoc: landcover_z14 -> layer_landcover:z14_
|
|
SELECT *
|
|
FROM landcover_z14 WHERE zoom_level >= 14 AND geometry && bbox
|
|
) AS zoom_levels;
|
|
$$ LANGUAGE SQL IMMUTABLE;
|