/// <summary> /// Method to create an <see cref="SbnTree"/> from a collection of (id, geometry) tuples /// </summary> /// <param name="boxedFeatures">The (id, geometry) tuples</param> /// <param name="zRange">The z-ordinate extent</param> /// <param name="mRange">The m-ordinate extent</param> /// <returns>The newly created tree</returns> public static SbnTree Create(ICollection <Tuple <uint, IGeometry> > boxedFeatures, Interval?zRange = null, Interval?mRange = null) { Interval x, y, z, m; GetIntervals(boxedFeatures, out x, out y, out z, out m); if (zRange.HasValue) { z = z.ExpandedByInterval(zRange.Value); } if (mRange.HasValue) { m = m.ExpandedByInterval(mRange.Value); } var tree = new SbnTree(new SbnHeader(boxedFeatures.Count, x, y, z, m)); foreach (var boxedFeature in boxedFeatures) { tree.Insert(tree.ToSbnFeature(boxedFeature.Item1, boxedFeature.Item2)); } tree.CompactSeamFeatures(); return(tree); }
/// <summary> /// Creates an instance of this class /// </summary> /// <param name="tree">The tree this node belongs to</param> /// <param name="nid">The node's id</param> public SbnNode(SbnTree tree, int nid) { _tree = tree; Nid = nid; Full = nid == 1 || nid >= _tree.FirstLeafNodeId; }