PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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.
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition lwutil.c:216
#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
#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: