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

◆ lwcollection_calculate_circ_tree()

static CIRC_NODE * lwcollection_calculate_circ_tree ( const LWCOLLECTION lwcol)
static

Definition at line 976 of file lwgeodetic_tree.c.

977{
978 uint32_t i = 0, j = 0;
979 CIRC_NODE** nodes;
980 CIRC_NODE* node;
981
982 /* One geometry? Done! */
983 if ( lwcol->ngeoms == 1 )
984 return lwgeom_calculate_circ_tree(lwcol->geoms[0]);
985
986 /* Calculate a tree for each sub-geometry*/
987 nodes = lwalloc(lwcol->ngeoms * sizeof(CIRC_NODE*));
988 for ( i = 0; i < lwcol->ngeoms; i++ )
989 {
990 node = lwgeom_calculate_circ_tree(lwcol->geoms[i]);
991 if ( node )
992 nodes[j++] = node;
993 }
994 /* Put the trees into a spatially correlated order */
995 circ_nodes_sort(nodes, j);
996 /* Merge the trees pairwise up to a parent node and return */
997 node = circ_nodes_merge(nodes, j);
998 /* Don't need the working list any more */
999 lwfree(nodes);
1000 node->geom_type = lwgeom_get_type((LWGEOM*)lwcol);
1001 return node;
1002}
void * lwalloc(size_t size)
Definition lwutil.c:227
void lwfree(void *mem)
Definition lwutil.c:242
CIRC_NODE * lwgeom_calculate_circ_tree(const LWGEOM *lwgeom)
static CIRC_NODE * circ_nodes_merge(CIRC_NODE **nodes, int num_nodes)
static void circ_nodes_sort(CIRC_NODE **nodes, int num_nodes)
Given a list of nodes, sort them into a spatially consistent order, then pairwise merge them up into ...
static uint32_t lwgeom_get_type(const LWGEOM *geom)
Return LWTYPE number.
Definition lwinline.h:135
uint32_t ngeoms
Definition liblwgeom.h:566
LWGEOM ** geoms
Definition liblwgeom.h:561
uint32_t geom_type
Note that p1 and p2 are pointers into an independent POINTARRAY, do not free them.

References circ_nodes_merge(), circ_nodes_sort(), sort_node::d, circ_node::geom_type, lwalloc(), lwfree(), lwgeom_calculate_circ_tree(), lwgeom_get_type(), and sort_node::node.

Referenced by lwgeom_calculate_circ_tree().

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