Example #1
0
        /// <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));
        }
Example #2
0
        /// <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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }