<div dir="ltr">Hey Paul there are many problems with the clean geometry functions, so this contribution is very useful.  <div><br></div><div>I'm trying it now, I notice it returns a GeometryCollection sometimes, so I had to use<div>ST_CollectionExtract(cleangeometry(geom),3)</div><div>to get my multipolygons back.</div><div><br></div><div>The old function wasn't returning "null", but it was returning geometries where st_area() = null.  Whatever that means. Yours seems to have fixed the problem in general, thank you.</div><div><br></div><div>However comparing the ST_Area of the original and the cleaned, I see a few of my multi polygons have lost considerable area.  In one case, a tiny infinitesimally narrow "finger" stuck out from the polygon, and a tiny section of the finger was retained but the bulk of the polygon was lost.  In another case, it looks like the corner was twisted around itself, and so the twisted corner was retained and the bulk of the polygon was lost.  I can manually make these edits, I think, and your algorithm is better than the original, but it's not perfect yet :)</div><div><br></div><div>--</div><div>John Abraham</div><div><a href="mailto:jea@hbaspecto.com">jea@hbaspecto.com</a><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 16, 2014 at 1:00 PM,  <span dir="ltr"><<a href="mailto:postgis-users-request@lists.osgeo.org" target="_blank">postgis-users-request@lists.osgeo.org</a>></span> wrote:<span style="font-family:arial,sans-serif;font-size:13px">Message: 3</span></div><span style="font-family:arial,sans-serif;font-size:13px">Date: Thu, 16 Jan 2014 14:42:29 +1000</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">From: Paul Pfeiffer <</span><a href="mailto:nightdrift@gmail.com" style="font-family:arial,sans-serif;font-size:13px">nightdrift@gmail.com</a><span style="font-family:arial,sans-serif;font-size:13px">></span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">To: </span><a href="mailto:postgis-users@lists.osgeo.org" style="font-family:arial,sans-serif;font-size:13px">postgis-users@lists.osgeo.org</a><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">Subject: [postgis-users] Updated </span><span class="" style="font-family:arial,sans-serif;font-size:13px">cleangeometry</span><span style="font-family:arial,sans-serif;font-size:13px"> function</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">Message-ID:</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        <CABfX3NcT=</span><a href="mailto:qMaw42WtZ-PUD6ZUnr7o8BMR11JB8zeFOke4Nrhmg@mail.gmail.com" style="font-family:arial,sans-serif;font-size:13px">qMaw42WtZ-PUD6ZUnr7o8BMR11JB8zeFOke4Nrhmg@mail.gmail.com</a><span style="font-family:arial,sans-serif;font-size:13px">></span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">Content-Type: text/plain; charset="iso-8859-1"</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">I have been having problems with the </span><span class="" style="font-family:arial,sans-serif;font-size:13px">clean</span><span style="font-family:arial,sans-serif;font-size:13px"> </span><span class="" style="font-family:arial,sans-serif;font-size:13px">geometry</span><span style="font-family:arial,sans-serif;font-size:13px"> function referenced at</span><br style="font-family:arial,sans-serif;font-size:13px"><a href="http://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons" target="_blank" style="font-family:arial,sans-serif;font-size:13px">http://trac.osgeo.org/postgis/wiki/UsersWikiCleanPolygons</a><span style="font-family:arial,sans-serif;font-size:13px"> returning null</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">geometries. So I have fixed the script and I'm providing it below if anyone</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">else wants to test it and let me know I could update the wiki.</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">(Requires Postgres v9 +)</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- $Id: </span><span class="" style="font-family:arial,sans-serif;font-size:13px">cleanGeometry</span><span style="font-family:arial,sans-serif;font-size:13px">.sql 2014-01-16 Paul Pfeiffer</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- </span><span class="" style="font-family:arial,sans-serif;font-size:13px">cleanGeometry</span><span style="font-family:arial,sans-serif;font-size:13px"> - remove self- and ring-selfintersections from</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--                 input Polygon geometries</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- Copyright 2014 Paul Pfeiffer</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- Version 2.0</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- contact: nightdrift at gmail dot com</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- modified from </span><span class="" style="font-family:arial,sans-serif;font-size:13px">cleanGeometry</span><span style="font-family:arial,sans-serif;font-size:13px">.sql 2008-04-24 from </span><a href="http://www.kappasys.ch/" target="_blank" style="font-family:arial,sans-serif;font-size:13px">http://www.kappasys.ch</a><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- This is free software; you can redistribute and/or modify it under</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- the terms of the GNU General Public Licence. See the COPYING file.</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- This software is without any warrenty and you use it at your own risk</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">--</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">CREATE OR REPLACE FUNCTION </span><span class="" style="font-family:arial,sans-serif;font-size:13px">cleangeometry</span><span style="font-family:arial,sans-serif;font-size:13px">(geom "public"."</span><span class="" style="font-family:arial,sans-serif;font-size:13px">geometry</span><span style="font-family:arial,sans-serif;font-size:13px">")</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    RETURNS "public"."</span><span class="" style="font-family:arial,sans-serif;font-size:13px">geometry</span><span style="font-family:arial,sans-serif;font-size:13px">" AS</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">$BODY$</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    DECLARE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    inGeom ALIAS for $1;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    outGeom </span><span class="" style="font-family:arial,sans-serif;font-size:13px">geometry</span><span style="font-family:arial,sans-serif;font-size:13px">;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    tmpLinestring </span><span class="" style="font-family:arial,sans-serif;font-size:13px">geometry</span><span style="font-family:arial,sans-serif;font-size:13px">;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    sqlString text;</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">BEGIN</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    outGeom := NULL;</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    -- </span><span class="" style="font-family:arial,sans-serif;font-size:13px">Clean</span><span style="font-family:arial,sans-serif;font-size:13px"> Polygons --</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    IF (ST_GeometryType(inGeom) = 'ST_Polygon' OR ST_GeometryType(inGeom) =</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">'ST_MultiPolygon') THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        -- Check if it needs fixing</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        IF NOT ST_IsValid(inGeom) THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            sqlString := '</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                -- separate multipolygon into 1 polygon per row</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                WITH split_multi (geom, poly) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        (ST_Dump($1)).geom,</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        (ST_Dump($1)).path[1] -- polygon number</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                -- break each polygon into linestrings</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                split_line (geom, poly, line) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        ST_Boundary((ST_DumpRings(</span><span style="font-family:arial,sans-serif;font-size:13px">geom)).geom),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        poly,</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        (ST_DumpRings(geom)).path[1] -- line number</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM split_multi</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                -- get the linestrings that make up the exterior of each</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">polygon</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                line_exterior (geom, poly) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        geom,</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        poly</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM split_line</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    WHERE line = 0</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                -- get an array of all the linestrings that make up the</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">interior of each polygon</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                line_interior (geom, poly) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        array_agg(geom ORDER BY line),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        poly</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM split_line</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    WHERE line > 0</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    GROUP BY poly</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ),</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                -- use MakePolygon to rebuild the polygons</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                poly_geom (geom, poly) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        CASE WHEN line_interior.geom IS NULL</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                            THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">ST_Buffer(ST_MakePolygon(line_</span><span style="font-family:arial,sans-serif;font-size:13px">exterior.geom), 0)</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                            ELSE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">ST_Buffer(ST_MakePolygon(line_</span><span style="font-family:arial,sans-serif;font-size:13px">exterior.geom, line_interior.geom), 0)</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        END,</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        line_exterior.poly</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM line_exterior</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    LEFT JOIN line_interior USING (poly)</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                )</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            ';</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            IF (ST_GeometryType(inGeom) = 'ST_Polygon') THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                sqlString := sqlString || '</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT geom</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM poly_geom</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ';</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            ELSE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                sqlString := sqlString || '</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    , -- if its a multipolygon combine the polygons back</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">together</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    multi_geom (geom) AS (</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        SELECT</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                            ST_Multi(ST_Collect(geom ORDER BY poly))</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                        FROM poly_geom</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    )</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    SELECT geom</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                    FROM multi_geom</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">                ';</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            END IF;</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            EXECUTE sqlString INTO outGeom USING inGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            RETURN outGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        ELSE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">            RETURN inGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        END IF;</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    -- </span><span class="" style="font-family:arial,sans-serif;font-size:13px">Clean</span><span style="font-family:arial,sans-serif;font-size:13px"> Lines --</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    ELSIF (ST_GeometryType(inGeom) = 'ST_Linestring') THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        outGeom := ST_Union(ST_Multi(inGeom), ST_PointN(inGeom, 1));</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        RETURN outGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    ELSIF (ST_GeometryType(inGeom) = 'ST_MultiLinestring') THEN</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        outGeom := ST_Multi(ST_Union(ST_Multi(</span><span style="font-family:arial,sans-serif;font-size:13px">inGeom), ST_PointN(inGeom,</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">1)));</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        RETURN outGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    ELSE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        RAISE NOTICE 'The input type % is not</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">supported',ST_GeometryType(</span><span style="font-family:arial,sans-serif;font-size:13px">inGeom);</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">        RETURN inGeom;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    END IF;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">END;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">$BODY$</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">LANGUAGE 'plpgsql' VOLATILE COST 100</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">;</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">-------------- next part --------------</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">An HTML attachment was scrubbed...</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">URL: <</span><a href="http://lists.osgeo.org/pipermail/postgis-users/attachments/20140116/659a4495/attachment-0001.html" target="_blank" style="font-family:arial,sans-serif;font-size:13px">http://lists.osgeo.org/pipermail/postgis-users/attachments/20140116/659a4495/attachment-0001.html</a><span style="font-family:arial,sans-serif;font-size:13px">></span><br style="font-family:arial,sans-serif;font-size:13px"><br></div><div class="gmail_extra">--<br>John Abraham<br><a href="mailto:jea@hbaspecto.com" target="_blank">jea@hbaspecto.com</a><br>403-232-1060<br>
</div></div></div></div>