PostGIS  2.5.1dev-r@@SVN_REVISION@@

◆ lwt_GetNodeByPoint()

LWT_ELEMID lwt_GetNodeByPoint ( LWT_TOPOLOGY topo,
LWPOINT pt,
double  tol 
)

Retrieve the id of a node at a point location.

Parameters
topothe topology to operate on
pointthe point to use for query
tolmax distance around the given point to look for a node
Returns
a node identifier if one is found, 0 if none is found, -1 on error (multiple nodes within distance). The liblwgeom error handler will be invoked in case of error.

Definition at line 4627 of file lwgeom_topo.c.

References _lwt_release_nodes(), LWT_TOPOLOGY_T::be_iface, getPoint2d_p(), lwerror(), lwt_be_getNodeWithinDistance2D(), lwt_be_lastErrorMessage(), LWT_COL_NODE_GEOM, LWT_COL_NODE_NODE_ID, LWT_ISO_NODE::node_id, and LWPOINT::point.

4628 {
4629  LWT_ISO_NODE *elem;
4630  int num;
4631  int flds = LWT_COL_NODE_NODE_ID|LWT_COL_NODE_GEOM; /* geom not needed */
4632  LWT_ELEMID id = 0;
4633  POINT2D qp; /* query point */
4634 
4635  if ( ! getPoint2d_p(pt->point, 0, &qp) )
4636  {
4637  lwerror("Empty query point");
4638  return -1;
4639  }
4640  elem = lwt_be_getNodeWithinDistance2D(topo, pt, tol, &num, flds, 0);
4641  if ( num == -1 )
4642  {
4643  lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
4644  return -1;
4645  }
4646  else if ( num )
4647  {
4648  if ( num > 1 )
4649  {
4650  _lwt_release_nodes(elem, num);
4651  lwerror("Two or more nodes found");
4652  return -1;
4653  }
4654  id = elem[0].node_id;
4655  _lwt_release_nodes(elem, num);
4656  }
4657 
4658  return id;
4659 }
static void _lwt_release_nodes(LWT_ISO_NODE *nodes, int num_nodes)
Definition: lwgeom_topo.c:467
LWT_ISO_NODE * lwt_be_getNodeWithinDistance2D(LWT_TOPOLOGY *topo, LWPOINT *pt, double dist, int *numelems, int fields, int limit)
Definition: lwgeom_topo.c:163
POINTARRAY * point
Definition: liblwgeom.h:413
const LWT_BE_IFACE * be_iface
LWT_ELEMID node_id
#define LWT_COL_NODE_NODE_ID
Node fields.
int getPoint2d_p(const POINTARRAY *pa, uint32_t n, POINT2D *point)
Definition: lwgeom_api.c:338
#define LWT_COL_NODE_GEOM
LWT_INT64 LWT_ELEMID
Identifier of topology element.
const char * lwt_be_lastErrorMessage(const LWT_BE_IFACE *be)
Definition: lwgeom_topo.c:120
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: