Opened 10 years ago
Closed 9 years ago
#2869 closed enhancement (fixed)
St_Centroid doesn't work on curved geom
Reported by: | remic | Owned by: | pramsey |
---|---|---|---|
Priority: | medium | Milestone: | PostGIS 2.2.0 |
Component: | postgis | Version: | 2.1.x |
Keywords: | Cc: |
Description
When trying SELECT ST_AsText(ST_centroid(geom)) FROM st_geomfromtext('circularstring(0 0 , 1 1, 2 0)') as geom
Error is: ERROR: Exception in LWGEOM2GEOS: curved geometry not supported.
Centroid of such a curve would only be centroid(ST_DumpPoints(circularstring)) , so maybe easy to add?
Change History (4)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Here is a wrapper , totally non optimal
DROP FUNCTION IF EXISTS public.rc_centroid( igeom GEOMETRY); CREATE OR REPLACE FUNCTION public.rc_centroid(
igeom GEOMETRY ) RETURNS GEOMETRY AS
$BODY$
--@brief : this function is a thin wrapper around st_centroid than enable to use it with circularstring --@param : a geom whose centroid we want --@return : teh centroid
DECLARE BEGIN
--RAISE EXCEPTION 'hello, % , %', st_astext(igeom), st_geometrytype(igeom) ;
IF ST_GeometryType(igeom) ILIKE '%CircularString%' THEN
--special case, we cast the circularstring to multipoint
RETURN ST_Centroid(ST_Collect(dmp.geom)) FROM ST_DumpPoints(igeom) as dmp WHERE dmp.path =ARRAY[1] OR dmp.path =ARRAY[3];
END IF ; --cicular string
RETURN ST_Centroid(igeom) ;
END ;
--test --SELECT ST_AsText(rc_centroid(geom )) --FROM st_geomfromtext('circularstring(0 0 , 1 1, 2 0)') as geom ;
$BODY$
LANGUAGE plpgsql IMMUTABLE STRICT;
comment:3 by , 10 years ago
Milestone: | → PostGIS 2.2.0 |
---|
After some thinking : better define the centroid as the centroid of (point1, point3). Cheers, Rémi-C