PostGIS  2.4.9dev-r@@SVN_REVISION@@

◆ lwgeom_sharedpaths()

LWGEOM* lwgeom_sharedpaths ( const LWGEOM geom1,
const LWGEOM geom2 
)

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

References error_if_srid_mismatch(), LWGEOM::flags, FLAGS_GET_Z, GEOS2LWGEOM(), lwerror(), LWGEOM2GEOS(), lwgeom_geos_errmsg, lwgeom_geos_error(), lwnotice(), and LWGEOM::srid.

Referenced by ST_SharedPaths().

1584 {
1585  GEOSGeometry *g1, *g2, *g3;
1586  LWGEOM *out;
1587  int is3d, srid;
1588 
1589  srid = geom1->srid;
1590  error_if_srid_mismatch(srid, (int)(geom2->srid));
1591 
1592  is3d = (FLAGS_GET_Z(geom1->flags) || FLAGS_GET_Z(geom2->flags)) ;
1593 
1594  initGEOS(lwnotice, lwgeom_geos_error);
1595 
1596  g1 = (GEOSGeometry *)LWGEOM2GEOS(geom1, 0);
1597  if ( 0 == g1 ) /* exception thrown at construction */
1598  {
1599  lwerror("First argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg);
1600  return NULL;
1601  }
1602 
1603  g2 = (GEOSGeometry *)LWGEOM2GEOS(geom2, 0);
1604  if ( 0 == g2 ) /* exception thrown at construction */
1605  {
1606  lwerror("Second argument geometry could not be converted to GEOS: %s", lwgeom_geos_errmsg);
1607  GEOSGeom_destroy(g1);
1608  return NULL;
1609  }
1610 
1611  g3 = GEOSSharedPaths(g1,g2);
1612 
1613  GEOSGeom_destroy(g1);
1614  GEOSGeom_destroy(g2);
1615 
1616  if (g3 == NULL)
1617  {
1618  lwerror("GEOSSharedPaths: %s", lwgeom_geos_errmsg);
1619  return NULL;
1620  }
1621 
1622  GEOSSetSRID(g3, srid);
1623  out = GEOS2LWGEOM(g3, is3d);
1624  GEOSGeom_destroy(g3);
1625 
1626  if (out == NULL)
1627  {
1628  lwerror("GEOS2LWGEOM threw an error");
1629  return NULL;
1630  }
1631 
1632  return out;
1633 }
void lwnotice(const char *fmt,...)
Write a notice out to the notice handler.
Definition: lwutil.c:177
uint8_t flags
Definition: liblwgeom.h:397
char lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE]
void error_if_srid_mismatch(int srid1, int srid2)
Definition: lwutil.c:371
int32_t srid
Definition: liblwgeom.h:399
void lwgeom_geos_error(const char *fmt,...)
#define FLAGS_GET_Z(flags)
Macros for manipulating the 'flags' byte.
Definition: liblwgeom.h:140
GEOSGeometry * LWGEOM2GEOS(const LWGEOM *lwgeom, int autofix)
LWGEOM * GEOS2LWGEOM(const GEOSGeometry *geom, char want3d)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
Here is the call graph for this function:
Here is the caller graph for this function: