PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ lwgeom_transform()

int lwgeom_transform ( LWGEOM geom,
LWPROJ pj 
)

Transform (reproject) a geometry in-place.

Parameters
geomthe geometry to transform
pjthe transformation

Transform (reproject) a geometry in-place.

Definition at line 331 of file liblwgeom/lwgeom_transform.c.

332 {
333  uint32_t i;
334 
335  /* No points to transform in an empty! */
336  if ( lwgeom_is_empty(geom) )
337  return LW_SUCCESS;
338 
339  switch(geom->type)
340  {
341  case POINTTYPE:
342  case LINETYPE:
343  case CIRCSTRINGTYPE:
344  case TRIANGLETYPE:
345  {
346  LWLINE *g = (LWLINE*)geom;
347  if ( ! ptarray_transform(g->points, pj) ) return LW_FAILURE;
348  break;
349  }
350  case POLYGONTYPE:
351  {
352  LWPOLY *g = (LWPOLY*)geom;
353  for ( i = 0; i < g->nrings; i++ )
354  {
355  if ( ! ptarray_transform(g->rings[i], pj) ) return LW_FAILURE;
356  }
357  break;
358  }
359  case MULTIPOINTTYPE:
360  case MULTILINETYPE:
361  case MULTIPOLYGONTYPE:
362  case COLLECTIONTYPE:
363  case COMPOUNDTYPE:
364  case CURVEPOLYTYPE:
365  case MULTICURVETYPE:
366  case MULTISURFACETYPE:
368  case TINTYPE:
369  {
370  LWCOLLECTION *g = (LWCOLLECTION*)geom;
371  for ( i = 0; i < g->ngeoms; i++ )
372  {
373  if ( ! lwgeom_transform(g->geoms[i], pj) ) return LW_FAILURE;
374  }
375  break;
376  }
377  default:
378  {
379  lwerror("lwgeom_transform: Cannot handle type '%s'",
380  lwtype_name(geom->type));
381  return LW_FAILURE;
382  }
383  }
384  return LW_SUCCESS;
385 }
int ptarray_transform(POINTARRAY *pa, LWPROJ *pj)
int lwgeom_transform(LWGEOM *geom, LWPROJ *pj)
Transform given LWGEOM geometry from inpj projection to outpj projection.
#define COLLECTIONTYPE
Definition: liblwgeom.h:108
#define COMPOUNDTYPE
Definition: liblwgeom.h:110
#define LW_FAILURE
Definition: liblwgeom.h:96
#define CURVEPOLYTYPE
Definition: liblwgeom.h:111
#define MULTILINETYPE
Definition: liblwgeom.h:106
#define MULTISURFACETYPE
Definition: liblwgeom.h:113
#define LINETYPE
Definition: liblwgeom.h:103
#define LW_SUCCESS
Definition: liblwgeom.h:97
#define MULTIPOINTTYPE
Definition: liblwgeom.h:105
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:102
#define TINTYPE
Definition: liblwgeom.h:116
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:107
#define POLYGONTYPE
Definition: liblwgeom.h:104
#define POLYHEDRALSURFACETYPE
Definition: liblwgeom.h:114
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:109
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
#define MULTICURVETYPE
Definition: liblwgeom.h:112
#define TRIANGLETYPE
Definition: liblwgeom.h:115
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
static int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members)
Definition: lwinline.h:203
uint32_t ngeoms
Definition: liblwgeom.h:580
LWGEOM ** geoms
Definition: liblwgeom.h:575
uint8_t type
Definition: liblwgeom.h:462
POINTARRAY * points
Definition: liblwgeom.h:483
POINTARRAY ** rings
Definition: liblwgeom.h:519
uint32_t nrings
Definition: liblwgeom.h:524

References CIRCSTRINGTYPE, COLLECTIONTYPE, COMPOUNDTYPE, CURVEPOLYTYPE, LWCOLLECTION::geoms, LINETYPE, LW_FAILURE, LW_SUCCESS, lwerror(), lwgeom_is_empty(), lwgeom_transform(), lwtype_name(), MULTICURVETYPE, MULTILINETYPE, MULTIPOINTTYPE, MULTIPOLYGONTYPE, MULTISURFACETYPE, LWCOLLECTION::ngeoms, LWPOLY::nrings, LWLINE::points, POINTTYPE, POLYGONTYPE, POLYHEDRALSURFACETYPE, ptarray_transform(), LWPOLY::rings, TINTYPE, TRIANGLETYPE, and LWGEOM::type.

Referenced by LWGEOM_asKML(), lwgeom_transform(), lwgeom_transform_from_str(), lwgeom_transform_pipeline(), and transform().

Here is the call graph for this function:
Here is the caller graph for this function: