view schema/geo_functions.sql @ 3458:aa3c83fb7018

Validate temporal validity of gauges on import Since we need the time range to identify gauge versions in the WHERE-clause of the first statement, validate before it touches the database to avoid a quite unspecific error due to invalid range input.
author Tom Gottfried <tom@intevation.de>
date Fri, 24 May 2019 17:45:17 +0200
parents 69292eb68984
children 033366f94abf
line wrap: on
line source

-- This is Free Software under GNU Affero General Public License v >= 3.0
-- without warranty, see README.md and license for details.

-- SPDX-License-Identifier: AGPL-3.0-or-later
-- License-Filename: LICENSES/AGPL-3.0.txt

-- Copyright (C) 2018, 2019 by via donau
--   – Österreichische Wasserstraßen-Gesellschaft mbH
-- Software engineering by Intevation GmbH

-- Author(s):
--  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
--  * Tom Gottfried <tom@intevation.de>

CREATE OR REPLACE FUNCTION best_utm(g geography) RETURNS integer AS
$$
DECLARE
  center geometry;
BEGIN
  -- Centroid should be calculated on geography to get accurate results
  -- from lon/lat coordinates, but the respective PostGIS function returns
  -- POINT(-NaN NaN) for some invalid polygons, while the calculation on
  -- geometry seems to give reasonable approximations in this context.
  SELECT ST_Centroid(CAST(g AS geometry)) INTO center;

  RETURN
    CASE WHEN ST_Y(center) > 0 THEN
    32600
  ELSE
    32700
  END + floor((ST_X(center)+180)/6)::int + 1;
END;
$$
LANGUAGE plpgsql
IMMUTABLE;