mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-24 00:52:40 +00:00
cf #2318, add a optional additional version parameter in ST_ForceSFS, handle both 1.1 and 1.2. default is 1.1
git-svn-id: http://svn.osgeo.org/postgis/trunk@11409 b70326c6-7e19-0410-871a-916f4a2858ee
This commit is contained in:
parent
a17aee7596
commit
629551694f
|
@ -547,6 +547,11 @@ GEOMETRYCOLLECTION(
|
|||
<funcdef>geometry <function>ST_ForceSFS</function></funcdef>
|
||||
<paramdef><type>geometry </type> <parameter>geomA</parameter></paramdef>
|
||||
</funcprototype>
|
||||
<funcprototype>
|
||||
<funcdef>geometry <function>ST_ForceSFS</function></funcdef>
|
||||
<paramdef><type>geometry </type> <parameter>geomA</parameter></paramdef>
|
||||
<paramdef><type>text </type> <parameter>version</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ static void do_geom_test(char * in, char * out)
|
|||
char *tmp;
|
||||
|
||||
g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE);
|
||||
h = lwgeom_force_sfs(g);
|
||||
h = lwgeom_force_sfs(g, 110);
|
||||
tmp = lwgeom_to_ewkt(h);
|
||||
if (strcmp(tmp, out))
|
||||
fprintf(stderr, "\nIn: %s\nOut: %s\nExp: %s\n",
|
||||
|
@ -40,7 +40,7 @@ static void do_type_test(char * in, int type)
|
|||
LWGEOM *g, *h;
|
||||
|
||||
g = lwgeom_from_wkt(in, LW_PARSER_CHECK_NONE);
|
||||
h = lwgeom_force_sfs(g);
|
||||
h = lwgeom_force_sfs(g, 110);
|
||||
if(h->type != type)
|
||||
fprintf(stderr, "\nIn: %s\nOut: %s\nExp: %s\n",
|
||||
in, lwtype_name(h->type), lwtype_name(type));
|
||||
|
|
|
@ -877,7 +877,7 @@ extern LWGEOM* lwgeom_simplify(const LWGEOM *igeom, double dist);
|
|||
* Force to use SFS 1.1 geometry type
|
||||
* (rather than SFS 1.2 and/or SQL/MM)
|
||||
*/
|
||||
extern LWGEOM* lwgeom_force_sfs(LWGEOM *geom);
|
||||
extern LWGEOM* lwgeom_force_sfs(LWGEOM *geom, int version);
|
||||
|
||||
|
||||
/*--------------------------------------------------------
|
||||
|
|
|
@ -706,13 +706,39 @@ lwgeom_force_dims(const LWGEOM *geom, int hasz, int hasm)
|
|||
}
|
||||
|
||||
LWGEOM*
|
||||
lwgeom_force_sfs(LWGEOM *geom)
|
||||
lwgeom_force_sfs(LWGEOM *geom, int version)
|
||||
{
|
||||
LWCOLLECTION *col;
|
||||
int i;
|
||||
LWGEOM *g;
|
||||
|
||||
/* SFS 1.2 version */
|
||||
if (version == 120)
|
||||
{
|
||||
switch(geom->type)
|
||||
{
|
||||
/* SQL/MM types */
|
||||
case CIRCSTRINGTYPE:
|
||||
case COMPOUNDTYPE:
|
||||
case CURVEPOLYTYPE:
|
||||
case MULTICURVETYPE:
|
||||
case MULTISURFACETYPE:
|
||||
return lwgeom_segmentize(geom, 32);
|
||||
|
||||
case COLLECTIONTYPE:
|
||||
col = (LWCOLLECTION*)geom;
|
||||
for ( i = 0; i < col->ngeoms; i++ )
|
||||
col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
|
||||
|
||||
return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
|
||||
|
||||
default:
|
||||
return (LWGEOM *)geom;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* SFS 1.1 version */
|
||||
switch(geom->type)
|
||||
{
|
||||
/* SQL/MM types */
|
||||
|
@ -748,7 +774,7 @@ lwgeom_force_sfs(LWGEOM *geom)
|
|||
case COLLECTIONTYPE:
|
||||
col = (LWCOLLECTION*)geom;
|
||||
for ( i = 0; i < col->ngeoms; i++ )
|
||||
col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i]);
|
||||
col->geoms[i] = lwgeom_force_sfs((LWGEOM*)col->geoms[i], version);
|
||||
|
||||
return lwcollection_as_lwgeom((LWCOLLECTION*)geom);
|
||||
|
||||
|
|
|
@ -517,11 +517,24 @@ Datum LWGEOM_force_sfs(PG_FUNCTION_ARGS)
|
|||
GSERIALIZED *result;
|
||||
LWGEOM *lwgeom;
|
||||
LWGEOM *ogeom;
|
||||
text * ver;
|
||||
int version = 110; /* default version is SFS 1.1 */
|
||||
|
||||
POSTGIS_DEBUG(2, "LWGEOM_force_sfs called");
|
||||
|
||||
/* If user specified version, respect it */
|
||||
if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) )
|
||||
{
|
||||
ver = PG_GETARG_TEXT_P(1);
|
||||
|
||||
if ( ! strncmp(VARDATA(ver), "1.2", 3))
|
||||
{
|
||||
version = 120;
|
||||
}
|
||||
}
|
||||
|
||||
lwgeom = lwgeom_from_gserialized(geom);
|
||||
ogeom = lwgeom_force_sfs(lwgeom);
|
||||
ogeom = lwgeom_force_sfs(lwgeom, version);
|
||||
|
||||
result = geometry_serialize(ogeom);
|
||||
|
||||
|
|
|
@ -1283,6 +1283,12 @@ CREATE OR REPLACE FUNCTION ST_ForceSFS(geometry)
|
|||
AS 'MODULE_PATHNAME', 'LWGEOM_force_sfs'
|
||||
LANGUAGE 'c' IMMUTABLE STRICT;
|
||||
|
||||
-- Availability: 2.1.0
|
||||
CREATE OR REPLACE FUNCTION ST_ForceSFS(geometry, version text)
|
||||
RETURNS geometry
|
||||
AS 'MODULE_PATHNAME', 'LWGEOM_force_sfs'
|
||||
LANGUAGE 'c' IMMUTABLE STRICT;
|
||||
|
||||
-- Availability: 1.2.2
|
||||
CREATE OR REPLACE FUNCTION ST_Expand(box3d,float8)
|
||||
RETURNS box3d
|
||||
|
|
Loading…
Reference in a new issue