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

◆ lwgeom_offsetcurve()

LWGEOM * lwgeom_offsetcurve ( const LWGEOM geom,
double  size,
int  quadsegs,
int  joinStyle,
double  mitreLimit 
)

Definition at line 1446 of file liblwgeom/lwgeom_geos.c.

1447{
1448 int32_t srid = RESULT_SRID(geom);
1449 LWGEOM *result = NULL;
1450 LWGEOM *noded = NULL;
1451 if (srid == SRID_INVALID) return NULL;
1452
1453 if (lwgeom_dimension(geom) != 1)
1454 {
1455 lwerror("%s: input is not linear", __func__, lwtype_name(geom->type));
1456 return NULL;
1457 }
1458
1459 while (!result)
1460 {
1461 switch (geom->type)
1462 {
1463 case LINETYPE:
1464 result = lwline_offsetcurve(lwgeom_as_lwline(geom), size, quadsegs, joinStyle, mitreLimit);
1465 break;
1466 case COLLECTIONTYPE:
1467 case MULTILINETYPE:
1468 result = lwcollection_offsetcurve(lwgeom_as_lwcollection(geom), size, quadsegs, joinStyle, mitreLimit);
1469 break;
1470 default:
1471 lwerror("%s: unsupported geometry type: %s", __func__, lwtype_name(geom->type));
1472 return NULL;
1473 }
1474
1475 if (result)
1476 {
1477 if (noded) lwgeom_free(noded);
1478 return result;
1479 }
1480 else if (!noded)
1481 {
1482 noded = lwgeom_node(geom);
1483 if (!noded)
1484 {
1485 lwerror("lwgeom_offsetcurve: cannot node input");
1486 return NULL;
1487 }
1488 geom = noded;
1489 }
1490 else
1491 {
1492 lwgeom_free(noded);
1493 lwerror("lwgeom_offsetcurve: noded geometry cannot be offset");
1494 return NULL;
1495 }
1496 }
1497
1498 return result;
1499}
static LWGEOM * lwcollection_offsetcurve(const LWCOLLECTION *col, double size, int quadsegs, int joinStyle, double mitreLimit)
#define RESULT_SRID(...)
static LWGEOM * lwline_offsetcurve(const LWLINE *lwline, double size, int quadsegs, int joinStyle, double mitreLimit)
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
LWGEOM * lwgeom_node(const LWGEOM *lwgeom_in)
#define SRID_INVALID
Definition liblwgeom.h:233
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1138
#define MULTILINETYPE
Definition liblwgeom.h:120
#define LINETYPE
Definition liblwgeom.h:117
LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom)
Definition lwgeom.c:215
int lwgeom_dimension(const LWGEOM *geom)
For an LWGEOM, returns 0 for points, 1 for lines, 2 for polygons, 3 for volume, and the max dimension...
Definition lwgeom.c:1281
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
Definition lwgeom.c:161
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition lwutil.c:190
uint8_t type
Definition liblwgeom.h:448

References COLLECTIONTYPE, LINETYPE, lwcollection_offsetcurve(), lwerror(), lwgeom_as_lwcollection(), lwgeom_as_lwline(), lwgeom_dimension(), lwgeom_free(), lwgeom_node(), lwline_offsetcurve(), lwtype_name(), MULTILINETYPE, RESULT_SRID, SRID_INVALID, and LWGEOM::type.

Referenced by lwcollection_offsetcurve(), lwgeom_clip_to_ordinate_range(), ST_OffsetCurve(), test_geos_offsetcurve(), and test_geos_offsetcurve_crash().

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