PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ lwgeom_transform()

int lwgeom_transform ( LWGEOM geom,
LWPROJ pj 
)

Transform given LWGEOM geometry from inpj projection to outpj projection.

Transform (reproject) a geometry in-place.

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

357 {
358  uint32_t i;
359 
360  /* No points to transform in an empty! */
361  if ( lwgeom_is_empty(geom) )
362  return LW_SUCCESS;
363 
364  switch(geom->type)
365  {
366  case POINTTYPE:
367  case LINETYPE:
368  case CIRCSTRINGTYPE:
369  case TRIANGLETYPE:
370  {
371  LWLINE *g = (LWLINE*)geom;
372  if ( ! ptarray_transform(g->points, pj) ) return LW_FAILURE;
373  break;
374  }
375  case POLYGONTYPE:
376  {
377  LWPOLY *g = (LWPOLY*)geom;
378  for ( i = 0; i < g->nrings; i++ )
379  {
380  if ( ! ptarray_transform(g->rings[i], pj) ) return LW_FAILURE;
381  }
382  break;
383  }
384  case MULTIPOINTTYPE:
385  case MULTILINETYPE:
386  case MULTIPOLYGONTYPE:
387  case COLLECTIONTYPE:
388  case COMPOUNDTYPE:
389  case CURVEPOLYTYPE:
390  case MULTICURVETYPE:
391  case MULTISURFACETYPE:
393  case TINTYPE:
394  {
395  LWCOLLECTION *g = (LWCOLLECTION*)geom;
396  for ( i = 0; i < g->ngeoms; i++ )
397  {
398  if ( ! lwgeom_transform(g->geoms[i], pj) ) return LW_FAILURE;
399  }
400  break;
401  }
402  default:
403  {
404  lwerror("lwgeom_transform: Cannot handle type '%s'",
405  lwtype_name(geom->type));
406  return LW_FAILURE;
407  }
408  }
409  return LW_SUCCESS;
410 }
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:123
#define COMPOUNDTYPE
Definition: liblwgeom.h:125
#define LW_FAILURE
Definition: liblwgeom.h:111
#define CURVEPOLYTYPE
Definition: liblwgeom.h:126
#define MULTILINETYPE
Definition: liblwgeom.h:121
#define MULTISURFACETYPE
Definition: liblwgeom.h:128
#define LINETYPE
Definition: liblwgeom.h:118
#define LW_SUCCESS
Definition: liblwgeom.h:112
#define MULTIPOINTTYPE
Definition: liblwgeom.h:120
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:117
#define TINTYPE
Definition: liblwgeom.h:131
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:122
#define POLYGONTYPE
Definition: liblwgeom.h:119
#define POLYHEDRALSURFACETYPE
Definition: liblwgeom.h:129
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:124
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:127
#define TRIANGLETYPE
Definition: liblwgeom.h:130
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:595
LWGEOM ** geoms
Definition: liblwgeom.h:590
uint8_t type
Definition: liblwgeom.h:477
POINTARRAY * points
Definition: liblwgeom.h:498
POINTARRAY ** rings
Definition: liblwgeom.h:534
uint32_t nrings
Definition: liblwgeom.h:539

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(), and transform().

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