MCPcopy Index your code
hub / github.com/MapServer/MapServer / findBestCluster

Function findBestCluster

mapcluster.c:633–670  ·  view source on GitHub ↗

traverse the quadtree to find the best renking cluster */

Source from the content-addressed store, hash-verified

631
632/* traverse the quadtree to find the best renking cluster */
633static void findBestCluster(layerObj* layer, msClusterLayerInfo* layerinfo, clusterTreeNode *node)
634{
635 int i;
636 double rank;
637 clusterInfo* s = node->shapes;
638 while (s)
639 {
640 if (s->filter < 0 && layer->cluster.filter.string != NULL)
641 {
642 InitShapeAttributes(layer, s);
643 s->filter = msClusterEvaluateFilter(&layer->cluster.filter, &s->shape);
644 }
645
646 if (s->numsiblings == 0 || s->filter == 0)
647 {
648 /* individual or filtered shapes must be removed for sure */
649 layerinfo->current = s;
650 return;
651 }
652
653 /* calculating the rank */
654 rank = (s->x - s->avgx) * (s->x - s->avgx) + (s->y - s->avgy) * (s->y - s->avgy) /*+ s->varx + s->vary*/ + (double)1/ (1 + s->numsiblings);
655
656 if (rank < layerinfo->rank)
657 {
658 layerinfo->current = s;
659 layerinfo->rank = rank;
660 }
661 s = s->next;
662 }
663
664 /* Recurse to subnodes if they exist */
665 for (i = 0; i < 4; i++)
666 {
667 if (node->subnode[i])
668 findBestCluster(layer, layerinfo, node->subnode[i]);
669 }
670}
671
672/* adding the shape based on the shape bounds (point) */
673static int treeNodeAddShape(msClusterLayerInfo* layerinfo, clusterTreeNode* node, clusterInfo* shape, int depth)

Callers 1

RebuildClustersFunction · 0.85

Calls 2

InitShapeAttributesFunction · 0.85
msClusterEvaluateFilterFunction · 0.85

Tested by

no test coverage detected