]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-sql/functions/utils.sql
use line interpolation to create centroid for lines
[nominatim.git] / lib-sql / functions / utils.sql
index 50116566b99c738c37f391cf476da6481ceec491..d15ebe43f660464b87ec916155b3c3725c09abce 100644 (file)
@@ -7,6 +7,26 @@
 
 -- Assorted helper functions for the triggers.
 
 
 -- Assorted helper functions for the triggers.
 
+CREATE OR REPLACE FUNCTION get_center_point(place GEOMETRY)
+  RETURNS GEOMETRY
+  AS $$
+DECLARE
+  geom_type TEXT;
+BEGIN
+  geom_type := ST_GeometryType(place);
+  IF geom_type = ' ST_Point' THEN
+    RETURN place;
+  END IF;
+  IF geom_type = 'ST_LineString' THEN
+    RETURN ST_LineInterpolatePoint(place, 0.5);
+  END IF;
+
+  RETURN ST_PointOnSurface(place);
+END;
+$$
+LANGUAGE plpgsql IMMUTABLE;
+
+
 CREATE OR REPLACE FUNCTION geometry_sector(partition INTEGER, place geometry)
   RETURNS INTEGER
   AS $$
 CREATE OR REPLACE FUNCTION geometry_sector(partition INTEGER, place geometry)
   RETURNS INTEGER
   AS $$
@@ -21,6 +41,7 @@ $$
 LANGUAGE plpgsql IMMUTABLE;
 
 
 LANGUAGE plpgsql IMMUTABLE;
 
 
+
 CREATE OR REPLACE FUNCTION array_merge(a INTEGER[], b INTEGER[])
   RETURNS INTEGER[]
   AS $$
 CREATE OR REPLACE FUNCTION array_merge(a INTEGER[], b INTEGER[])
   RETURNS INTEGER[]
   AS $$