return 2 * FLAGS_GET_Z(gser->flags) + FLAGS_GET_M(gser->flags);
}
+int gserialized_ndims(const GSERIALIZED *gser)
+{
+ return FLAGS_NDIMS(gser->flags);
+}
+
uint32_t gserialized_get_type(const GSERIALIZED *s)
{
uint32_t *ptr;
*/
extern int gserialized_get_zm(const GSERIALIZED *gser);
+/**
+* Return the number of dimensions (2, 3, 4) in a geometry
+*/
+extern int gserialized_ndims(const GSERIALIZED *gser);
+
+
/**
* Call this function to drop BBOX and SRID
* from LWGEOM. If LWGEOM type is *not* flagged
extern double lwpoint_get_z(const LWPOINT *point);
extern double lwpoint_get_m(const LWPOINT *point);
-/* Some lwgeom info */
+/**
+* Return #LW_TRUE if geometry has Z ordinates
+*/
extern int lwgeom_has_z(const LWGEOM *geom);
+
+/**
+* Return #LW_TRUE if geometry has M ordinates.
+*/
extern int lwgeom_has_m(const LWGEOM *geom);
+/**
+* Return the number of dimensions (2, 3, 4) in a geometry
+*/
+extern int lwgeom_ndims(const LWGEOM *geom);
/*
* Given a point, returns the location of closest point on pointarray
return FLAGS_GET_M(geom->flags);
}
+int
+lwgeom_ndims(const LWGEOM *geom)
+{
+ if ( ! geom ) return 0;
+ return FLAGS_NDIMS(geom->flags);
+}
+
+
void
lwgeom_set_geodetic(LWGEOM *geom, int value)
{
return gser;
}
-int pglwgeom_ndims(const GSERIALIZED *geom)
-{
- return FLAGS_NDIMS(geom->flags);
-}
-
int pglwgeom_getbox2d_p(const GSERIALIZED *geom, GBOX *box)
{
LWGEOM *lwgeom;
/* Serialize/deserialize a GSERIALIZED (postgis datatype) */
extern GSERIALIZED *pglwgeom_serialize(LWGEOM *lwgeom);
-
-extern int pglwgeom_ndims(const GSERIALIZED *geom);
/*
* Get the 2d bounding box of the given geometry, in FLOAT4 format.
* Use a cached bbox if available, compute it otherwise.
/* Get our lwgeom form */
lwgeom = lwgeom_from_gserialized(g);
- if ( FLAGS_NDIMS(lwgeom->flags) > 2 )
+ if ( gserialized_ndims(g) > 2 )
{
/* Strip out the higher dimensions */
LWGEOM *tmp = lwgeom_force_2d(lwgeom);
LWGEOM *lwg_in, *lwg_out;
/* already 2d */
- if ( pglwgeom_ndims(pg_geom_in) == 2 ) PG_RETURN_POINTER(pg_geom_in);
+ if ( gserialized_ndims(pg_geom_in) == 2 ) PG_RETURN_POINTER(pg_geom_in);
lwg_in = lwgeom_from_gserialized(pg_geom_in);
lwg_out = lwgeom_force_2d(lwg_in);
LWGEOM *lwg_in, *lwg_out;
/* already 3d */
- if ( pglwgeom_ndims(pg_geom_in) == 3 && gserialized_has_z(pg_geom_in) )
+ if ( gserialized_ndims(pg_geom_in) == 3 && gserialized_has_z(pg_geom_in) )
PG_RETURN_POINTER(pg_geom_in);
lwg_in = lwgeom_from_gserialized(pg_geom_in);
LWGEOM *lwg_in, *lwg_out;
/* already 3d */
- if ( pglwgeom_ndims(pg_geom_in) == 3 && gserialized_has_m(pg_geom_in) )
+ if ( gserialized_ndims(pg_geom_in) == 3 && gserialized_has_m(pg_geom_in) )
PG_RETURN_POINTER(pg_geom_in);
lwg_in = lwgeom_from_gserialized(pg_geom_in);
LWGEOM *lwg_in, *lwg_out;
/* already 4d */
- if ( pglwgeom_ndims(pg_geom_in) == 4 )
+ if ( gserialized_ndims(pg_geom_in) == 4 )
PG_RETURN_POINTER(pg_geom_in);
lwg_in = lwgeom_from_gserialized(pg_geom_in);
int ret;
in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- ret = (pglwgeom_ndims(in));
+ ret = (gserialized_ndims(in));
PG_FREE_IF_COPY(in, 0);
PG_RETURN_INT16(ret);
}
lwgeom = lwgeom_from_gserialized(geom);
/* Get a 2D version of the geometry if necessary */
- if ( FLAGS_NDIMS(lwgeom->flags) > 2 )
+ if ( lwgeom_ndims(lwgeom) > 2 )
{
LWGEOM *lwgeom2d = lwgeom_force_2d(lwgeom);
lwgeom_free(lwgeom);
lwgeom = lwgeom_from_gserialized(geom);
/* Get a 2D version of the geometry if necessary */
- if ( FLAGS_NDIMS(lwgeom->flags) > 2 )
+ if ( lwgeom_ndims(lwgeom) > 2 )
{
LWGEOM *lwgeom2d = lwgeom_force_2d(lwgeom);
lwgeom_free(lwgeom);
geom = lwgeom_from_gserialized(pggeom);
/* Get a 2D version of the geometry if necessary */
- if (FLAGS_NDIMS(geom->flags) > 2) {
+ if (lwgeom_ndims(geom) > 2) {
LWGEOM *geom2d = lwgeom_force_2d(geom);
lwgeom_free(geom);
geom = geom2d;