Selaa lähdekoodia

Created separate rtree ctypes interface, so that the rtree
library can be accessed directly without the vector library.
This should also fix the dll rtree issue on windows systems.


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@57958 15284696-431f-4ddb-bdfa-cd5b030d7da7

Soeren Gebbert 11 vuotta sitten
vanhempi
commit
f88a2b1ba0

+ 4 - 2
lib/python/ctypes/Makefile

@@ -9,7 +9,7 @@ include $(MODULE_TOPDIR)/include/Make/Doxygen.make
 DOXNAME=
 DOXNAME=
 DOXINPUT=grasspython.dox
 DOXINPUT=grasspython.dox
 
 
-MODULES = date gis raster gmath proj imagery vector display stats \
+MODULES = date gis raster gmath proj imagery vector rtree display stats \
 	dbmi raster3d arraystats cluster vedit ogsf nviz segment rowio
 	dbmi raster3d arraystats cluster vedit ogsf nviz segment rowio
 
 
 date_LIBS       = $(DATETIMELIB)
 date_LIBS       = $(DATETIMELIB)
@@ -19,6 +19,7 @@ gmath_LIBS      = $(GMATHLIB)
 proj_LIBS       = $(GPROJLIB)
 proj_LIBS       = $(GPROJLIB)
 imagery_LIBS    = $(IMAGERYLIB)
 imagery_LIBS    = $(IMAGERYLIB)
 vector_LIBS     = $(VECTORLIB)
 vector_LIBS     = $(VECTORLIB)
+rtree_LIBS      = $(RTREELIB)
 display_LIBS    = $(DISPLAYLIB)
 display_LIBS    = $(DISPLAYLIB)
 stats_LIBS      = $(STATSLIB)
 stats_LIBS      = $(STATSLIB)
 dbmi_LIBS       = $(DBMILIB)
 dbmi_LIBS       = $(DBMILIB)
@@ -37,7 +38,8 @@ raster_HDRS     = raster.h defs/raster.h
 gmath_HDRS      = gmath.h defs/gmath.h
 gmath_HDRS      = gmath.h defs/gmath.h
 proj_HDRS       = gprojects.h defs/gprojects.h
 proj_HDRS       = gprojects.h defs/gprojects.h
 imagery_HDRS    = imagery.h defs/imagery.h
 imagery_HDRS    = imagery.h defs/imagery.h
-vector_HDRS     = vector.h defs/vector.h vect/dig_structs.h vect/dig_defines.h vect/dig_externs.h rtree.h
+vector_HDRS     = vector.h defs/vector.h vect/dig_structs.h vect/dig_defines.h vect/dig_externs.h 
+rtree_HDRS	= rtree.h
 display_HDRS    = display.h defs/display.h
 display_HDRS    = display.h defs/display.h
 stats_HDRS      = stats.h defs/stats.h
 stats_HDRS      = stats.h defs/stats.h
 dbmi_HDRS       = dbmi.h defs/dbmi.h
 dbmi_HDRS       = dbmi.h defs/dbmi.h

+ 1 - 0
lib/python/ctypes/__init__.py

@@ -12,6 +12,7 @@ __all__ = [
     'proj',
     'proj',
     'raster3d',
     'raster3d',
     'raster',
     'raster',
+    'rtree',
     'stats',
     'stats',
     'vector',
     'vector',
     'vedit'
     'vedit'

+ 9 - 8
lib/python/temporal/spatio_temporal_relationships.py

@@ -23,6 +23,7 @@ for details.
 from abstract_dataset import *
 from abstract_dataset import *
 from datetime_math import *
 from datetime_math import *
 import grass.lib.vector as vector
 import grass.lib.vector as vector
+import grass.lib.rtree as rtree
 import grass.lib.gis as gis
 import grass.lib.gis as gis
 from ctypes import *
 from ctypes import *
 
 
@@ -450,7 +451,7 @@ class SpatioTemporalTopologyBuilder(object):
                           spatial can be None (no spatial topology), "2D" using west, east,
                           spatial can be None (no spatial topology), "2D" using west, east,
                           #south, north or "3D" using west, east, south, north, bottom, top
                           #south, north or "3D" using west, east, south, north, bottom, top
         """
         """
-        rect = vector.RTreeAllocRect(tree)
+        rect = rtree.RTreeAllocRect(tree)
 
 
         start, end = map_.get_temporal_extent_as_tuple()
         start, end = map_.get_temporal_extent_as_tuple()
 
 
@@ -462,14 +463,14 @@ class SpatioTemporalTopologyBuilder(object):
             end = time_delta_to_relative_time_seconds(end - self._timeref)
             end = time_delta_to_relative_time_seconds(end - self._timeref)
 
 
         if spatial is None:
         if spatial is None:
-            vector.RTreeSetRect1D(rect, tree, float(start), float(end))
+            rtree.RTreeSetRect1D(rect, tree, float(start), float(end))
         elif spatial == "2D":
         elif spatial == "2D":
             north, south, east, west, top, bottom = map_.get_spatial_extent_as_tuple()
             north, south, east, west, top, bottom = map_.get_spatial_extent_as_tuple()
-            vector.RTreeSetRect3D(rect, tree, west, east, south, north,
+            rtree.RTreeSetRect3D(rect, tree, west, east, south, north,
                                   float(start), float(end))
                                   float(start), float(end))
         elif spatial == "3D":
         elif spatial == "3D":
             north, south, east, west, top, bottom = map_.get_spatial_extent_as_tuple()
             north, south, east, west, top, bottom = map_.get_spatial_extent_as_tuple()
-            vector.RTreeSetRect4D(rect, tree, west, east, south, north,
+            rtree.RTreeSetRect4D(rect, tree, west, east, south, north,
                                   bottom, top, float(start), float(end))
                                   bottom, top, float(start), float(end))
 
 
         return rect
         return rect
@@ -488,12 +489,12 @@ class SpatioTemporalTopologyBuilder(object):
         if spatial == "3D":
         if spatial == "3D":
             dim = 4
             dim = 4
 
 
-        tree = vector.RTreeCreateTree(-1, 0, dim)
+        tree = rtree.RTreeCreateTree(-1, 0, dim)
 
 
         for i in xrange(len(maps)):
         for i in xrange(len(maps)):
 
 
             rect = self._map_to_rect(tree, maps[i], spatial)
             rect = self._map_to_rect(tree, maps[i], spatial)
-            vector.RTreeInsertRect(rect, i + 1, tree)
+            rtree.RTreeInsertRect(rect, i + 1, tree)
 
 
         return tree
         return tree
 
 
@@ -543,7 +544,7 @@ class SpatioTemporalTopologyBuilder(object):
 
 
             rect = self._map_to_rect(tree, mapsB[j], spatial)
             rect = self._map_to_rect(tree, mapsB[j], spatial)
             vector.RTreeSearch2(tree, rect, list_)
             vector.RTreeSearch2(tree, rect, list_)
-            vector.RTreeFreeRect(rect)
+            rtree.RTreeFreeRect(rect)
 
 
             for k in xrange(list_.contents.n_values):
             for k in xrange(list_.contents.n_values):
                 i = list_.contents.value[k] - 1
                 i = list_.contents.value[k] - 1
@@ -565,7 +566,7 @@ class SpatioTemporalTopologyBuilder(object):
 
 
         gis.G_free_ilist(list_)
         gis.G_free_ilist(list_)
 
 
-        vector.RTreeDestroyTree(tree)
+        rtree.RTreeDestroyTree(tree)
 
 
     def __iter__(self):
     def __iter__(self):
         start_ = self._first
         start_ = self._first

+ 35 - 34
lib/python/temporal/unit_tests.py

@@ -28,6 +28,7 @@ from datetime_math import *
 from space_time_datasets import *
 from space_time_datasets import *
 
 
 import grass.lib.vector as vector
 import grass.lib.vector as vector
+import grass.lib.rtree as rtree
 import grass.lib.gis as gis
 import grass.lib.gis as gis
 from ctypes import *
 from ctypes import *
 
 
@@ -1525,131 +1526,131 @@ def test_map_list_sorting():
 def test_1d_rtree():
 def test_1d_rtree():
     """Testing the rtree ctypes wrapper"""
     """Testing the rtree ctypes wrapper"""
 
 
-    tree = vector.RTreeCreateTree(-1, 0, 1)
+    tree = rtree.RTreeCreateTree(-1, 0, 1)
 
 
     for i in xrange(10):
     for i in xrange(10):
         
         
-        rect = vector.RTreeAllocRect(tree)
-        vector.RTreeSetRect1D(rect, tree, float(i - 2), float(i + 2))
-        vector.RTreeInsertRect(rect, i + 1, tree)
+        rect = rtree.RTreeAllocRect(tree)
+        rtree.RTreeSetRect1D(rect, tree, float(i - 2), float(i + 2))
+        rtree.RTreeInsertRect(rect, i + 1, tree)
 
 
-    rect = vector.RTreeAllocRect(tree)
-    vector.RTreeSetRect1D(rect, tree, 2.0, 7.0)
+    rect = rtree.RTreeAllocRect(tree)
+    rtree.RTreeSetRect1D(rect, tree, 2.0, 7.0)
 
 
     list_ = gis.ilist()
     list_ = gis.ilist()
 
 
     num = vector.RTreeSearch2(tree, rect, byref(list_))
     num = vector.RTreeSearch2(tree, rect, byref(list_))
     
     
-    vector.RTreeFreeRect(rect)
+    rtree.RTreeFreeRect(rect)
 
 
     # print rectangle ids
     # print rectangle ids
     print "Number of overlapping rectangles", num
     print "Number of overlapping rectangles", num
     for i in xrange(list_.n_values):
     for i in xrange(list_.n_values):
         print "id", list_.value[i]
         print "id", list_.value[i]
 
 
-    vector.RTreeDestroyTree(tree)
+    rtree.RTreeDestroyTree(tree)
     
     
 ###############################################################################
 ###############################################################################
 
 
 def test_2d_rtree():
 def test_2d_rtree():
     """Testing the rtree ctypes wrapper"""
     """Testing the rtree ctypes wrapper"""
 
 
-    tree = vector.RTreeCreateTree(-1, 0, 2)
+    tree = rtree.RTreeCreateTree(-1, 0, 2)
 
 
     for i in xrange(10):
     for i in xrange(10):
         
         
         
         
-        rect = vector.RTreeAllocRect(tree)
+        rect = rtree.RTreeAllocRect(tree)
 
 
-        vector.RTreeSetRect2D(rect, tree, 
+        rtree.RTreeSetRect2D(rect, tree, 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2))
                               float(i - 2), float(i + 2))
-        vector.RTreeInsertRect(rect, i + 1, tree)
+        rtree.RTreeInsertRect(rect, i + 1, tree)
     
     
-    rect = vector.RTreeAllocRect(tree)
-    vector.RTreeSetRect2D(rect, tree, 2.0, 7.0, 2.0, 7.0)
+    rect = rtree.RTreeAllocRect(tree)
+    rtree.RTreeSetRect2D(rect, tree, 2.0, 7.0, 2.0, 7.0)
 
 
     list_ = gis.ilist()
     list_ = gis.ilist()
 
 
     num = vector.RTreeSearch2(tree, rect, byref(list_))
     num = vector.RTreeSearch2(tree, rect, byref(list_))
-    vector.RTreeFreeRect(rect)
+    rtree.RTreeFreeRect(rect)
 
 
     # print rectangle ids
     # print rectangle ids
     print "Number of overlapping rectangles", num
     print "Number of overlapping rectangles", num
     for i in xrange(list_.n_values):
     for i in xrange(list_.n_values):
         print "id", list_.value[i]
         print "id", list_.value[i]
 
 
-    vector.RTreeDestroyTree(tree)
+    rtree.RTreeDestroyTree(tree)
     
     
 ###############################################################################
 ###############################################################################
 
 
 def test_3d_rtree():
 def test_3d_rtree():
     """Testing the rtree ctypes wrapper"""
     """Testing the rtree ctypes wrapper"""
 
 
-    tree = vector.RTreeCreateTree(-1, 0, 3)
+    tree = rtree.RTreeCreateTree(-1, 0, 3)
 
 
     for i in xrange(10):
     for i in xrange(10):
         
         
-        rect = vector.RTreeAllocRect(tree)
-        vector.RTreeSetRect3D(rect, tree, 
+        rect = rtree.RTreeAllocRect(tree)
+        rtree.RTreeSetRect3D(rect, tree, 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2))
                               float(i - 2), float(i + 2))
-        vector.RTreeInsertRect(rect, i + 1, tree)
+        rtree.RTreeInsertRect(rect, i + 1, tree)
         print i + 1
         print i + 1
-        vector.RTreePrintRect(rect, 1, tree)
+        rtree.RTreePrintRect(rect, 1, tree)
 
 
-    rect = vector.RTreeAllocRect(tree)
-    vector.RTreeSetRect3D(rect, tree, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0)
+    rect = rtree.RTreeAllocRect(tree)
+    rtree.RTreeSetRect3D(rect, tree, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0)
     print "Select"
     print "Select"
-    vector.RTreePrintRect(rect, 1, tree)
+    rtree.RTreePrintRect(rect, 1, tree)
         
         
     list_ = gis.ilist()
     list_ = gis.ilist()
 
 
     num = vector.RTreeSearch2(tree, rect, byref(list_))
     num = vector.RTreeSearch2(tree, rect, byref(list_))
-    vector.RTreeFreeRect(rect)
+    rtree.RTreeFreeRect(rect)
 
 
     # print rectangle ids
     # print rectangle ids
     print "Number of overlapping rectangles", num
     print "Number of overlapping rectangles", num
     for i in xrange(list_.n_values):
     for i in xrange(list_.n_values):
         print "id", list_.value[i]
         print "id", list_.value[i]
         
         
-    vector.RTreeDestroyTree(tree)
+    rtree.RTreeDestroyTree(tree)
 
 
 ###############################################################################
 ###############################################################################
 
 
 def test_4d_rtree():
 def test_4d_rtree():
     """Testing the rtree ctypes wrapper"""
     """Testing the rtree ctypes wrapper"""
 
 
-    tree = vector.RTreeCreateTree(-1, 0, 4)
+    tree = rtree.RTreeCreateTree(-1, 0, 4)
 
 
     for i in xrange(10):
     for i in xrange(10):
         
         
         # Allocate the boundary
         # Allocate the boundary
-        rect = vector.RTreeAllocRect(tree)
-        vector.RTreeSetRect4D(rect, tree, 
+        rect = rtree.RTreeAllocRect(tree)
+        rtree.RTreeSetRect4D(rect, tree, 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2), 
                               float(i - 2), float(i + 2))
                               float(i - 2), float(i + 2))
-        vector.RTreeInsertRect(rect, i + 1, tree)
+        rtree.RTreeInsertRect(rect, i + 1, tree)
 
 
-    rect = vector.RTreeAllocRect(tree)
-    vector.RTreeSetRect4D(rect, tree, 2.0, 7.0, 2.0, 
+    rect = rtree.RTreeAllocRect(tree)
+    rtree.RTreeSetRect4D(rect, tree, 2.0, 7.0, 2.0, 
                           7.0, 2.0, 7.0, 2.0, 7.0)
                           7.0, 2.0, 7.0, 2.0, 7.0)
     
     
     list_ = gis.ilist()
     list_ = gis.ilist()
 
 
     num = vector.RTreeSearch2(tree, rect, byref(list_))
     num = vector.RTreeSearch2(tree, rect, byref(list_))
 
 
-    vector.RTreeFreeRect(rect)
+    rtree.RTreeFreeRect(rect)
 
 
     # print rectangle ids
     # print rectangle ids
     print "Number of overlapping rectangles", num
     print "Number of overlapping rectangles", num
     for i in xrange(list_.n_values):
     for i in xrange(list_.n_values):
         print "id", list_.value[i]
         print "id", list_.value[i]
         
         
-    vector.RTreeDestroyTree(tree)
+    rtree.RTreeDestroyTree(tree)
 
 
 ###############################################################################
 ###############################################################################