소스 검색

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 년 전
부모
커밋
f88a2b1ba0
4개의 변경된 파일49개의 추가작업 그리고 44개의 파일을 삭제
  1. 4 2
      lib/python/ctypes/Makefile
  2. 1 0
      lib/python/ctypes/__init__.py
  3. 9 8
      lib/python/temporal/spatio_temporal_relationships.py
  4. 35 34
      lib/python/temporal/unit_tests.py

+ 4 - 2
lib/python/ctypes/Makefile

@@ -9,7 +9,7 @@ include $(MODULE_TOPDIR)/include/Make/Doxygen.make
 DOXNAME=
 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
 
 date_LIBS       = $(DATETIMELIB)
@@ -19,6 +19,7 @@ gmath_LIBS      = $(GMATHLIB)
 proj_LIBS       = $(GPROJLIB)
 imagery_LIBS    = $(IMAGERYLIB)
 vector_LIBS     = $(VECTORLIB)
+rtree_LIBS      = $(RTREELIB)
 display_LIBS    = $(DISPLAYLIB)
 stats_LIBS      = $(STATSLIB)
 dbmi_LIBS       = $(DBMILIB)
@@ -37,7 +38,8 @@ raster_HDRS     = raster.h defs/raster.h
 gmath_HDRS      = gmath.h defs/gmath.h
 proj_HDRS       = gprojects.h defs/gprojects.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
 stats_HDRS      = stats.h defs/stats.h
 dbmi_HDRS       = dbmi.h defs/dbmi.h

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

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

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

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

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

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