PostGIS  3.2.2dev-r@@SVN_REVISION@@

◆ _lwt_InitEdgeEndByLine()

static int _lwt_InitEdgeEndByLine ( edgeend fee,
edgeend lee,
LWLINE edge,
POINT2D fp,
POINT2D lp 
)
static

Definition at line 1472 of file lwgeom_topo.c.

1474 {
1475  POINTARRAY *pa = edge->points;
1476  POINT2D pt;
1477 
1478  fee->nextCW = fee->nextCCW =
1479  lee->nextCW = lee->nextCCW = 0;
1480  fee->cwFace = fee->ccwFace =
1481  lee->cwFace = lee->ccwFace = -1;
1482 
1483  /* Compute azimuth of first edge end */
1484  LWDEBUG(1, "computing azimuth of first edge end");
1485  if ( ! _lwt_FirstDistinctVertex2D(pa, fp, 0, 1, &pt) )
1486  {
1487  lwerror("Invalid edge (no two distinct vertices exist)");
1488  return -1;
1489  }
1490  if ( ! azimuth_pt_pt(fp, &pt, &(fee->myaz)) ) {
1491  lwerror("error computing azimuth of first edgeend [%.15g %.15g,%.15g %.15g]",
1492  fp->x, fp->y, pt.x, pt.y);
1493  return -2;
1494  }
1495  LWDEBUGF(1, "azimuth of first edge end [%.15g %.15g,%.15g %.15g] is %g",
1496  fp->x, fp->y, pt.x, pt.y, fee->myaz);
1497 
1498  /* Compute azimuth of second edge end */
1499  LWDEBUG(1, "computing azimuth of second edge end");
1500  if ( ! _lwt_FirstDistinctVertex2D(pa, lp, pa->npoints-1, -1, &pt) )
1501  {
1502  lwerror("Invalid edge (no two distinct vertices exist)");
1503  return -1;
1504  }
1505  if ( ! azimuth_pt_pt(lp, &pt, &(lee->myaz)) ) {
1506  lwerror("error computing azimuth of last edgeend [%.15g %.15g,%.15g %.15g]",
1507  lp->x, lp->y, pt.x, pt.y);
1508  return -2;
1509  }
1510  LWDEBUGF(1, "azimuth of last edge end [%.15g %.15g,%.15g %.15g] is %g",
1511  lp->x, lp->y, pt.x, pt.y, lee->myaz);
1512 
1513  return 0;
1514 }
int azimuth_pt_pt(const POINT2D *p1, const POINT2D *p2, double *ret)
Compute the azimuth of segment AB in radians.
Definition: measures.c:2461
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:83
#define LWDEBUGF(level, msg,...)
Definition: lwgeom_log.h:88
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
static int _lwt_FirstDistinctVertex2D(const POINTARRAY *pa, POINT2D *ref, int from, int dir, POINT2D *op)
Definition: lwgeom_topo.c:1433
POINTARRAY * points
Definition: liblwgeom.h:497
double y
Definition: liblwgeom.h:404
double x
Definition: liblwgeom.h:404
uint32_t npoints
Definition: liblwgeom.h:441
double myaz
Definition: lwgeom_topo.c:1420
LWT_ELEMID nextCCW
Definition: lwgeom_topo.c:1416
LWT_ELEMID ccwFace
Definition: lwgeom_topo.c:1418
LWT_ELEMID cwFace
Definition: lwgeom_topo.c:1414
LWT_ELEMID nextCW
Definition: lwgeom_topo.c:1412

References _lwt_FirstDistinctVertex2D(), azimuth_pt_pt(), edgeend_t::ccwFace, edgeend_t::cwFace, LWDEBUG, LWDEBUGF, lwerror(), edgeend_t::myaz, edgeend_t::nextCCW, edgeend_t::nextCW, POINTARRAY::npoints, LWLINE::points, POINT2D::x, and POINT2D::y.

Referenced by lwt_ChangeEdgeGeom().

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