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

◆ 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 4828 of file lwgeom_topo.c.

4829{
4830 LWT_ISO_NODE *elem;
4831 uint64_t num;
4832 int flds = LWT_COL_NODE_NODE_ID|LWT_COL_NODE_GEOM; /* geom not needed */
4833 LWT_ELEMID id = 0;
4834 POINT2D qp; /* query point */
4835
4836 if ( ! getPoint2d_p(pt->point, 0, &qp) )
4837 {
4838 lwerror("Empty query point");
4839 return -1;
4840 }
4841 elem = lwt_be_getNodeWithinDistance2D(topo, pt, tol, &num, flds, 0);
4842 if (num == UINT64_MAX)
4843 {
4845 return -1;
4846 }
4847 else if ( num )
4848 {
4849 if ( num > 1 )
4850 {
4851 _lwt_release_nodes(elem, num);
4852 lwerror("Two or more nodes found");
4853 return -1;
4854 }
4855 id = elem[0].node_id;
4856 _lwt_release_nodes(elem, num);
4857 }
4858
4859 return id;
4860}
int getPoint2d_p(const POINTARRAY *pa, uint32_t n, POINT2D *point)
Definition lwgeom_api.c:342
LWT_INT64 LWT_ELEMID
Identifier of topology element.
#define LWT_COL_NODE_GEOM
#define LWT_COL_NODE_NODE_ID
Node fields.
#define PGTOPO_BE_ERROR()
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
LWT_ISO_NODE * lwt_be_getNodeWithinDistance2D(LWT_TOPOLOGY *topo, const LWPOINT *pt, double dist, uint64_t *numelems, int fields, int64_t limit)
static void _lwt_release_nodes(LWT_ISO_NODE *nodes, int num_nodes)
POINTARRAY * point
Definition liblwgeom.h:471
LWT_ELEMID node_id

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

Here is the call graph for this function: