public static void Main(String[] args) { Storage db = StorageFactory.Instance.CreateStorage(); SpatialObject so; Rectangle r; DateTime start = DateTime.Now; db.Open("testrtree.dbs"); TestRtree root = (TestRtree)db.Root; if (root == null) { root = new TestRtree(); root.index = db.CreateSpatialIndex(); db.Root = root; } Rectangle[] rectangles = new Rectangle[nObjectsInTree]; long key = 1999; for (int i = 0; i < nIterations; i++) { int j = i % nObjectsInTree; if (i >= nObjectsInTree) { r = rectangles[j]; IPersistent[] sos = root.index.Get(r); IPersistent po = null; int n = 0; for (int k = 0; k < sos.Length; k++) { so = (SpatialObject)sos[k]; if (r.Equals(so.rect)) { po = so; } else { Debug.Assert(r.Intersects(so.rect)); } } Debug.Assert(po != null); for (int k = 0; k < nObjectsInTree; k++) { if (r.Intersects(rectangles[k])) { n += 1; } } Debug.Assert(n == sos.Length); root.index.Remove(r, po); po.Deallocate(); } key = (3141592621L * key + 2718281829L) % 1000000007L; int top = (int)(key % 1000); int left = (int)(key / 1000 % 1000); key = (3141592621L * key + 2718281829L) % 1000000007L; int bottom = top + (int)(key % 100); int right = left + (int)(key / 100 % 100); so = new SpatialObject(); r = new Rectangle(top, left, bottom, right); so.rect = r; rectangles[j] = r; root.index.Put(r, so); if (i % 100 == 0) { Console.Write("Iteration " + i + "\r"); db.Commit(); } } root.index.Clear(); Console.WriteLine(); Console.WriteLine("Elapsed time " + (DateTime.Now - start)); db.Close(); }
public static void Main(string[] args) { Storage db = StorageFactory.Instance.CreateStorage(); long start = (DateTime.Now.Ticks - 621355968000000000) / 10000; db.Open("testrtree.dbs"); TestRtree root = (TestRtree) db.GetRoot(); if (root == null) { root = new TestRtree(); root.index = db.CreateSpatialIndex(); db.SetRoot(root); } Rectangle[] rectangles = new Rectangle[nObjectsInTree]; long key = 1999; for (int i = 0; i < nIterations; i++) { int j = i % nObjectsInTree; if (i >= nObjectsInTree) { Rectangle r = rectangles[j]; IPersistent[] sos = root.index.Get(r); IPersistent po = null; int n = 0; for (int k = 0; k < sos.Length; k++) { SpatialObject so = (SpatialObject) sos[k]; if (r.Equals(so.rect)) { po = so; } else { Assert.That(r.Intersects(so.rect)); } } Assert.That(po != null); for (int k = 0; k < nObjectsInTree; k++) { if (r.Intersects(rectangles[k])) n += 1; } Assert.That(n == sos.Length); root.index.Remove(r, po); po.Deallocate(); } key = (3141592621L * key + 2718281829L) % 1000000007L; int top = (int) (key % 1000); int left = (int) (key / 1000 % 1000); key = (3141592621L * key + 2718281829L) % 1000000007L; int bottom = top + (int) (key % 100); int right = left + (int) (key / 100 % 100); SpatialObject so2 = new SpatialObject(); Rectangle r2 = new Rectangle(top, left, bottom, right); so2.rect = r2; rectangles[j] = r2; root.index.Put(r2, so2); if (i % 100 == 0) { Console.Out.Write("Iteration " + i + "\r"); Console.Out.Flush(); db.Commit(); } } root.index.Clear(); Console.Out.WriteLine("\nElapsed time " + ((DateTime.Now.Ticks - 621355968000000000) / 10000 - start)); db.Close(); }
public static void Main(String[] args) { Storage db = StorageFactory.Instance.CreateStorage(); SpatialObject so; Rectangle r; DateTime start = DateTime.Now; db.Open("testrtree.dbs"); TestRtree root = (TestRtree)db.Root; if (root == null) { root = new TestRtree(); #if USE_GENERICS root.index = db.CreateSpatialIndex <SpatialObject>(); #else root.index = db.CreateSpatialIndex(); #endif db.Root = root; } Rectangle[] rectangles = new Rectangle[nObjectsInTree]; long key = 1999; for (int i = 0; i < nIterations; i++) { int j = i % nObjectsInTree; if (i >= nObjectsInTree) { r = rectangles[j]; #if USE_GENERICS SpatialObject[] sos = root.index.Get(r); SpatialObject po = null; #else object[] sos = root.index.Get(r); object po = null; #endif for (int k = 0; k < sos.Length; k++) { #if USE_GENERICS so = sos[k]; #else so = (SpatialObject)sos[k]; #endif if (r.Equals(so.rect)) { po = so; } else { Debug.Assert(r.Intersects(so.rect)); } } Debug.Assert(po != null); int n = 0; for (int k = 0; k < nObjectsInTree; k++) { if (r.Intersects(rectangles[k])) { n += 1; } } Debug.Assert(n == sos.Length); n = 0; foreach (SpatialObject o in root.index.Overlaps(r)) { Debug.Assert(o == sos[n++]); } Debug.Assert(n == sos.Length); root.index.Remove(r, po); db.Deallocate(po); } key = (3141592621L * key + 2718281829L) % 1000000007L; int top = (int)(key % 1000); int left = (int)(key / 1000 % 1000); key = (3141592621L * key + 2718281829L) % 1000000007L; int bottom = top + (int)(key % 100); int right = left + (int)(key / 100 % 100); so = new SpatialObject(); r = new Rectangle(top, left, bottom, right); so.rect = r; rectangles[j] = r; root.index.Put(r, so); if (i % 100 == 0) { double minDistance = 0; j = 0; foreach (SpatialObject obj in root.index.Neighbors(0, 0)) { double distance = Math.Sqrt(obj.rect.Left * obj.rect.Left + obj.rect.Top * obj.rect.Top); Debug.Assert(distance >= minDistance); minDistance = distance; j += 1; } Debug.Assert((i >= nObjectsInTree && j == nObjectsInTree) || (i < nObjectsInTree && j == i + 1)); Console.Write("Iteration " + i + "\r"); db.Commit(); } } root.index.Clear(); Console.WriteLine(); Console.WriteLine("Elapsed time " + (DateTime.Now - start)); db.Close(); }