diff schema/geo_functions.sql @ 1832:661597546ed9

Move not only authentication related functions to own file
author Tom Gottfried <tom@intevation.de>
date Wed, 16 Jan 2019 17:30:13 +0100
parents
children 1b6840093eac
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schema/geo_functions.sql	Wed Jan 16 17:30:13 2019 +0100
@@ -0,0 +1,46 @@
+-- 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 by via donau
+--   – Österreichische Wasserstraßen-Gesellschaft mbH
+-- Software engineering by Intevation GmbH
+
+-- Author(s):
+--  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+CREATE OR REPLACE FUNCTION best_utm(g geometry) RETURNS integer AS
+$$
+DECLARE
+  center geometry;
+BEGIN
+  SELECT ST_Centroid(g) 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;
+
+CREATE OR REPLACE FUNCTION utm_covers(g geography) RETURNS boolean AS
+$$
+DECLARE
+  user_area geometry;
+  utm integer;
+BEGIN
+    SELECT area::geometry FROM users.responsibility_areas INTO user_area
+    WHERE country = users.current_user_country();
+    SELECT best_utm(user_area) INTO utm;
+    RETURN ST_Covers(
+      ST_Transform(user_area, utm),
+      ST_Transform(g::geometry, utm));
+END;
+$$
+LANGUAGE plpgsql
+STABLE;