/// <summary> /// Generates a spatial index for a specified shape file. /// </summary> private QuadTree CreateSpatialIndex() { var objList = new List <QuadTree.BoxObjects>(); //Convert all the geometries to boundingboxes uint i = 0; foreach (var box in GetAllFeatureBoundingBoxes()) { if (!double.IsNaN(box.Left) && !double.IsNaN(box.Right) && !double.IsNaN(box.Bottom) && !double.IsNaN(box.Top)) { var g = new QuadTree.BoxObjects { box = box, ID = i }; objList.Add(g); i++; } } Heuristic heur; heur.maxdepth = (int)Math.Ceiling(Math.Log(GetFeatureCount(), 2)); heur.minerror = 10; heur.tartricnt = 5; heur.mintricnt = 2; return(new QuadTree(objList, 0, heur)); }
/// <summary> /// Generates a spatial index for a specified shape file. /// </summary> /// <param name="filename"></param> private QuadTree CreateSpatialIndex(string filename) { var objList = new List <QuadTree.BoxObjects>(); //Convert all the geometries to boundingboxes uint i = 0; foreach (IEnvelope box in GetAllFeatureBoundingBoxes()) { if (!double.IsNaN(box.MinX) && !double.IsNaN(box.MaxX) && !double.IsNaN(box.MaxY) && !double.IsNaN(box.MinY)) { var g = new QuadTree.BoxObjects(); g.box = box; g.ID = i; objList.Add(g); i++; } } Heuristic heur; heur.maxdepth = (int)Math.Ceiling(Math.Log(GetFeatureCount(), 2)); heur.minerror = 10; heur.tartricnt = 5; heur.mintricnt = 2; return(new QuadTree(objList, 0, heur)); }
private QuadTree CreateSpatialIndexRecursive(string filename) { var sw = new Stopwatch(); sw.Start(); var objList = new List <QuadTree.BoxObjects>(); uint i = 0; foreach (var box in GetAllFeatureBoundingBoxes()) { if (!box.IsValid) { continue; } var g = new QuadTree.BoxObjects { Box = box, ID = i }; objList.Add(g); i++; } Heuristic heur; heur.maxdepth = (int)Math.Ceiling(Math.Log(GetFeatureCount(), 2)); heur.minerror = 10; heur.tartricnt = 5; heur.mintricnt = 2; var root = new QuadTree(objList, 0, heur); sw.Stop(); Debug.WriteLine(string.Format("Linear creation of QuadTree took {0}ms", sw.ElapsedMilliseconds)); if (_fileBasedIndexWanted && !String.IsNullOrEmpty(filename)) { root.SaveIndex(filename + ".sidx"); } return(root); }
private QuadTree CreateSpatialIndexLinear(string filename) { var extent = _envelope; var sw = new Stopwatch(); sw.Start(); var root = QuadTree.CreateRootNode(extent); var h = new Heuristic { maxdepth = (int)Math.Ceiling(Math.Log(GetFeatureCount(), 2)), minerror = 10, tartricnt = 5, mintricnt = 2 }; uint i = 0; foreach (var box in GetAllFeatureBoundingBoxes()) { if (!box.IsValid) { continue; } var g = new QuadTree.BoxObjects { Box = box, ID = i }; root.AddNode(g, h); i++; } sw.Stop(); Debug.WriteLine(string.Format("Linear creation of QuadTree took {0}ms", sw.ElapsedMilliseconds)); if (_fileBasedIndexWanted && !string.IsNullOrEmpty(filename)) { root.SaveIndex(filename + ".sidx"); } return(root); }