using GeoAPI.Geometries;
using GisSharpBlog.NetTopologySuite.Geometries;
namespace GisSharpBlog.NetTopologySuite.Index.KdTree
{
///
/// A node of a , which represents one or more points in the same location.
///
/// The type of the object
/// dskea
public class KdNode
where T : class
{
private readonly Coordinate _p;
private readonly T _data;
private int _count;
///
/// Creates a new KdNode.
///
/// coordinate of point
/// coordinate of point
/// A data objects to associate with this node
public KdNode(double x, double y, T data)
{
_p = new Coordinate(x, y);
this.Left = null;
this.Right = null;
_count = 1;
_data = data;
}
///
/// Creates a new KdNode.
///
/// The point location of new node
/// A data objects to associate with this node
public KdNode(ICoordinate p, T data)
{
_p = new Coordinate(p);
this.Left = null;
this.Right = null;
_count = 1;
_data = data;
}
///
/// Gets x-ordinate of this node
///
public double X
{
get { return _p.X; }
}
///
/// Gets y-ordinate of this node
///
public double Y
{
get { return _p.Y; }
}
///
/// Gets the location of this node
///
public ICoordinate Coordinate
{
get { return _p; }
}
///
/// Gets the user data object associated with this node.
///
public T Data
{
get { return _data; }
}
///
/// Gets or sets the left node of the tree
///
public KdNode Left { get; set; }
///
/// Gets or sets the right node of the tree
///
public KdNode Right { get; set; }
// Increments counts of points at this location
internal void Increment()
{
_count = _count + 1;
}
///
/// Gets the number of inserted points that are coincident at this location.
///
public int Count
{
get{return _count;}
}
///
/// Gets whether more than one point with this value have been inserted (up to the tolerance)
///
///
public bool IsRepeated
{
get {return _count > 1;}
}
}
}