/// <summary> /// Finds the two nearest items from this tree /// and another tree, /// using <see cref="IItemDistance{Envelope, TItem}"/> as the distance metric. /// A Branch-and-Bound tree traversal algorithm is used /// to provide an efficient search. /// The result value is a pair of items, /// the first from this tree and the second /// from the argument tree. /// </summary> /// <param name="tree">Another tree</param> /// <param name="itemDist">A distance metric applicable to the items in the trees</param> /// <returns>The pair of the nearest items, one from each tree or <c>null</c> if no pair of distinct items can be found.</returns> public TItem[] NearestNeighbour(STRtree <TItem> tree, IItemDistance <Envelope, TItem> itemDist) { if (IsEmpty || tree.IsEmpty) { return(null); } var bp = new BoundablePair <TItem>(Root, tree.Root, itemDist); return(NearestNeighbour(bp)); }
/** * Tests whether some two items from this tree and another tree * lie within a given distance. * {@link ItemDistance} is used as the distance metric. * A Branch-and-Bound tree traversal algorithm is used * to provide an efficient search. * * @param tree another tree * @param itemDist a distance metric applicable to the items in the trees * @param maxDistance the distance limit for the search * @return true if there are items within the distance */ public bool IsWithinDistance(STRtree <TItem> tree, IItemDistance <Envelope, TItem> itemDist, double maxDistance) { var bp = new BoundablePair <TItem>(Root, tree.Root, itemDist); return(IsWithinDistance(bp, maxDistance)); }