Esempio n. 1
0
static void treeCollectShapeIds(treeNodeObj *node, rectObj aoi, ms_bitarray status)
{
  int i;

  /* -------------------------------------------------------------------- */
  /*      Does this node overlap the area of interest at all?  If not,    */
  /*      return without adding to the list at all.                       */
  /* -------------------------------------------------------------------- */
  if(!msRectOverlap(&node->rect, &aoi))
    return;

  /* -------------------------------------------------------------------- */
  /*      Add the local nodes shapeids to the list.                       */
  /* -------------------------------------------------------------------- */
  for(i=0; i<node->numshapes; i++)
    msSetBit(status, node->ids[i], 1);

  /* -------------------------------------------------------------------- */
  /*      Recurse to subnodes if they exist.                              */
  /* -------------------------------------------------------------------- */
  for(i=0; i<node->numsubnodes; i++) {
    if(node->subnode[i])
      treeCollectShapeIds(node->subnode[i], aoi, status);
  }
}
Esempio n. 2
0
ms_bitarray msSearchTree(treeObj *tree, rectObj aoi)
{
  ms_bitarray status=NULL;

  status = msAllocBitArray(tree->numshapes);
  if(!status) {
    msSetError(MS_MEMERR, NULL, "msSearchTree()");
    return(NULL);
  }

  treeCollectShapeIds(tree->root, aoi, status);

  return(status);
}
Esempio n. 3
0
char *msSearchTree(treeObj *tree, rectObj aoi)
{
    char *status=NULL;

    status = msAllocBitArray(tree->numshapes);
    if(!status) {
#if MAPSHAPEERROR
        msSetError(MS_MEMERR, NULL, "msSearchTree()");
#endif
        return(NULL);
    }

    treeCollectShapeIds(tree->root, aoi, status);

    return(status);
}