view schema/geoserver_views.sql @ 3302:ec6163c6687d

'Historicise' gauges on import Gauge data sets will be updated or a new version will be inserted depending on temporal validity and a timestamp marking the last update in the RIS-Index of a data set. The trigger on date_info is removed because the value is actually an attribut coming from the RIS-Index. Gauge measurements and predictions are associated to the version with matching temporal validity. Bottlenecks are always associated to the actual version of the gauge, although this might change as soon as bottlenecks are 'historicised', too.
author Tom Gottfried <tom@intevation.de>
date Thu, 16 May 2019 18:41:43 +0200
parents 831193935739
children b90b17d0b5a9
line wrap: on
line source

CREATE OR REPLACE VIEW waterway.gauges_geoserver AS
    SELECT
        g.location,
        isrs_asText(g.location) AS isrs_code,
        g.objname,
        g.geom,
        g.applicability_from_km,
        g.applicability_to_km,
        g.validity,
        g.zero_point,
        g.geodref,
        g.date_info,
        g.source_organization,
        json_strip_nulls(json_object_agg(coalesce(r.depth_reference,'empty'),
                                                  r.value))
            AS reference_water_levels
    FROM waterway.gauges g
        LEFT JOIN waterway.gauges_reference_water_levels r
            USING (location, validity)
    WHERE NOT g.erased
    GROUP BY g.location, g.validity;

CREATE OR REPLACE VIEW waterway.distance_marks_geoserver AS
    SELECT location_code,
       isrs_asText(location_code) AS location,
       geom::Geometry(POINT, 4326),
       related_enc,
       (location_code).hectometre
    FROM waterway.distance_marks_virtual;

CREATE OR REPLACE VIEW waterway.distance_marks_ashore_geoserver AS
    SELECT id,
       country,
       geom::Geometry(POINT, 4326),
       related_enc,
       hectom,
       catdis,
       position_code
    FROM waterway.distance_marks;

CREATE OR REPLACE VIEW waterway.bottlenecks_geoserver AS
    WITH
    fairway_availability_latest AS (
        SELECT DISTINCT ON (bottleneck_id) bottleneck_id, date_info, critical
            FROM waterway.fairway_availability
            ORDER BY bottleneck_id, date_info DESC),
    waterlevel_latest AS (
        SELECT DISTINCT ON (location) location, water_level
            FROM waterway.gauge_measurements
            ORDER BY location, measure_date DESC)
    SELECT
        b.id,
        b.bottleneck_id,
        b.objnam,
        b.nobjnm,
        b.stretch,
        b.area,
        b.rb,
        b.lb,
        b.responsible_country,
        b.revisiting_time,
        b.limiting,
        b.date_info,
        b.source_organization,
        g.location AS gauge_isrs_code,
        g.objname AS gauge_objname,
        json_strip_nulls(json_object_agg(coalesce(r.depth_reference,'empty'),
                                                  r.value))
            AS reference_water_levels,
        fal.date_info AS fa_date_info,
        fal.critical AS fa_critical,
        wl.water_level AS gm_waterlevel
    FROM waterway.bottlenecks b
        LEFT JOIN waterway.gauges g
            ON b.gauge_location = g.location AND b.gauge_validity = g.validity
        LEFT JOIN waterway.gauges_reference_water_levels r
            USING (location, validity)
        LEFT JOIN fairway_availability_latest fal
            ON b.id = fal.bottleneck_id
        LEFT JOIN waterlevel_latest wl
            USING (location)
    WHERE NOT g.erased
    GROUP BY b.id, g.location, g.validity,
        fal.date_info, fal.critical, wl.water_level;

CREATE OR REPLACE VIEW waterway.stretches_geoserver AS
    SELECT
        id,
        name,
        (stretch).lower::varchar as lower,
        (stretch).upper::varchar as upper,
        area::Geometry(MULTIPOLYGON, 4326),
        objnam,
        nobjnam,
        date_info,
        source_organization,
        (SELECT string_agg(country_code, ', ')
            FROM waterway.stretch_countries
            WHERE stretches_id = id) AS countries,
        staging_done
    FROM waterway.stretches;

CREATE OR REPLACE VIEW waterway.sounding_results_contour_lines_geoserver AS
    SELECT bottleneck_id,
        date_info,
        height,
        CAST(lines AS geometry(multilinestring, 4326)) AS lines
    FROM waterway.sounding_results_contour_lines cl
        JOIN waterway.sounding_results sr ON sr.id = cl.sounding_result_id;

CREATE OR REPLACE VIEW waterway.bottleneck_overview AS
    SELECT
        objnam AS name,
        ST_Centroid(area)::Geometry(POINT, 4326) AS point,
        (lower(stretch)).hectometre AS from,
        (upper(stretch)).hectometre AS to,
        sr.current::text,
        responsible_country
    FROM waterway.bottlenecks bn LEFT JOIN (
        SELECT bottleneck_id, max(date_info) AS current
            FROM waterway.sounding_results
            GROUP BY bottleneck_id) sr ON sr.bottleneck_id = bn.id
    ORDER BY objnam;

CREATE OR REPLACE VIEW waterway.sounding_differences AS
    SELECT
        sd.id           AS id,
        bn.objnam       AS objnam,
        srm.date_info   AS minuend,
        srs.date_info   AS subtrahend,
        sdcl.height     AS height,
        CAST(sdcl.lines AS geometry(multilinestring, 4326)) AS lines
    FROM caching.sounding_differences sd
        JOIN caching.sounding_differences_contour_lines sdcl
            ON sd.id = sdcl.sounding_differences_id
        JOIN waterway.sounding_results srm
            ON sd.minuend = srm.id
        JOIN waterway.sounding_results srs
            ON sd.subtrahend = srs.id
        JOIN waterway.bottlenecks bn
            ON srm.bottleneck_id = bn.id;