forked from geocompass/pg-coordtransform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeoc_bd09towgs84_polygon.sql
29 lines (25 loc) · 1.01 KB
/
geoc_bd09towgs84_polygon.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CREATE OR REPLACE FUNCTION "public"."geoc_bd09towgs84_polygon"("source_geom" "public"."geometry")
RETURNS "public"."geometry" AS $BODY$
DECLARE
target_parts geometry[];
source_npoints integer;
single_line geometry;
single_line_trans geometry;
single_polygon geometry;
final_geom geometry;
BEGIN
IF ST_GeometryType(source_geom) != 'ST_Polygon' THEN
RETURN null;
END IF;
FOR single_polygon IN SELECT ST_ExteriorRing ((st_dumprings($1)).geom) as geom LOOP
source_npoints := ST_NPoints(single_polygon);
single_line := ST_RemovePoint(single_polygon, source_npoints - 1);
single_line_trans := geoc_bd09towgs84_line(single_line);
target_parts := array_append(target_parts, ST_AddPoint(single_line_trans, ST_PointN(single_line_trans, 1)));
END LOOP;
SELECT ST_MakePolygon(target_parts[1], target_parts[2:array_upper(target_parts, 1)]) INTO final_geom;
RETURN final_geom;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;