PostGIS 3.7.0dev-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 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.
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: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
#define MULTICURVETYPE
Definition liblwgeom.h:112
#define TRIANGLETYPE
Definition liblwgeom.h:115
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
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:199
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: