PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ lwgeom_transform()

int lwgeom_transform ( LWGEOM geom,
LWPROJ pj 
)

Transform (reproject) a geometry in-place.

Parameters
geomthe geometry to transform
PJthe input and output

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

436 {
437  uint32_t i;
438 
439  /* No points to transform in an empty! */
440  if (lwgeom_is_empty(geom))
441  return LW_SUCCESS;
442 
443  switch(geom->type)
444  {
445  case POINTTYPE:
446  case LINETYPE:
447  case CIRCSTRINGTYPE:
448  case TRIANGLETYPE:
449  {
450  LWLINE *g = (LWLINE*)geom;
451  if (!ptarray_transform(g->points, pj))
452  return LW_FAILURE;
453  break;
454  }
455  case POLYGONTYPE:
456  {
457  LWPOLY *g = (LWPOLY*)geom;
458  for (i = 0; i < g->nrings; i++)
459  {
460  if (!ptarray_transform(g->rings[i], pj))
461  return LW_FAILURE;
462  }
463  break;
464  }
465  case MULTIPOINTTYPE:
466  case MULTILINETYPE:
467  case MULTIPOLYGONTYPE:
468  case COLLECTIONTYPE:
469  case COMPOUNDTYPE:
470  case CURVEPOLYTYPE:
471  case MULTICURVETYPE:
472  case MULTISURFACETYPE:
474  case TINTYPE:
475  {
476  LWCOLLECTION *g = (LWCOLLECTION*)geom;
477  for (i = 0; i < g->ngeoms; i++)
478  {
479  if (!lwgeom_transform(g->geoms[i], pj))
480  return LW_FAILURE;
481  }
482  break;
483  }
484  default:
485  {
486  lwerror("lwgeom_transform: Cannot handle type '%s'",
487  lwtype_name(geom->type));
488  return LW_FAILURE;
489  }
490  }
491  return LW_SUCCESS;
492 }
int ptarray_transform(POINTARRAY *pa, LWPROJ *pj)
int lwgeom_transform(LWGEOM *geom, LWPROJ *pj)
Transform (reproject) a geometry in-place.
#define COLLECTIONTYPE
Definition: liblwgeom.h:122
#define COMPOUNDTYPE
Definition: liblwgeom.h:124
#define LW_FAILURE
Definition: liblwgeom.h:110
#define CURVEPOLYTYPE
Definition: liblwgeom.h:125
#define MULTILINETYPE
Definition: liblwgeom.h:120
#define MULTISURFACETYPE
Definition: liblwgeom.h:127
#define LINETYPE
Definition: liblwgeom.h:117
#define LW_SUCCESS
Definition: liblwgeom.h:111
#define MULTIPOINTTYPE
Definition: liblwgeom.h:119
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:116
#define TINTYPE
Definition: liblwgeom.h:130
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:121
#define POLYGONTYPE
Definition: liblwgeom.h:118
#define POLYHEDRALSURFACETYPE
Definition: liblwgeom.h:128
#define CIRCSTRINGTYPE
Definition: liblwgeom.h:123
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:126
#define TRIANGLETYPE
Definition: liblwgeom.h:129
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:193
uint32_t ngeoms
Definition: liblwgeom.h:566
LWGEOM ** geoms
Definition: liblwgeom.h:561
uint8_t type
Definition: liblwgeom.h:448
POINTARRAY * points
Definition: liblwgeom.h:469
POINTARRAY ** rings
Definition: liblwgeom.h:505
uint32_t nrings
Definition: liblwgeom.h:510

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: