def setup_rtree(self, ndim, clusters=None): if self._rtree: return self._rtree self._ndim = ndim if not ndim: class k(object): def __init__(self, graph): self.graph = graph def insert(self, *args, **kwargs): pass def delete(self, *args, **kwargs): pass def intersection(self, *args, **kwargs): return xrange(len(self.graph.clusters)) self._rtree = k(self) return self._rtree p = RProp() p.dimension = max(2, ndim) p.dat_extension = 'data' p.idx_extension = 'index' if clusters: gen_func = ((i, self.bbox_rtree(c, enlarge=0.005), None) for i, c in enumerate(clusters)) self._rtree = RTree(gen_func, properties=p) else: self._rtree = RTree(properties=p) return self._rtree
def setup_rtree(self, ndim, clusters=None): if self._rtree: return self._rtree self._ndim = ndim if not ndim: class k(object): def __init__(self, graph): self.graph = graph def insert(self, *args, **kwargs): pass def delete(self, *args, **kwargs): pass def intersection(self, *args, **kwargs): return xrange(len(self.graph.clusters)) self._rtree = k(self) return self._rtree p = RProp() p.dimension = max(2, ndim) p.dat_extension = 'data' p.idx_extension = 'index' if clusters: gen_func = ((i, self.bbox_rtree(c, enlarge=0.005), None) for i, c in enumerate(clusters)) self._rtree = RTree(gen_func, properties=p) else: self._rtree = RTree(properties=p) return self._rtree
def create_rtree(self, clusters): if not len(clusters[0].bbox[0]): class k(object): def intersection(self, foo): return xrange(len(clusters)) return k() ndim = len(clusters[0].bbox[0]) + 1 p = RProp() p.dimension = ndim p.dat_extension = 'data' p.idx_extension = 'index' rtree = RTree(properties=p) for idx, c in enumerate(clusters): rtree.insert(idx, c.bbox[0] + (0,) + c.bbox[1] + (1,)) return rtree
def create_rtree(self, clusters): if not len(clusters[0].bbox[0]): class k(object): def intersection(self, foo): return xrange(len(clusters)) return k() ndim = len(clusters[0].bbox[0]) + 1 p = RProp() p.dimension = ndim p.dat_extension = 'data' p.idx_extension = 'index' rtree = RTree(properties=p) for idx, c in enumerate(clusters): rtree.insert(idx, c.bbox[0] + (0, ) + c.bbox[1] + (1, )) return rtree
def construct_rtree(self, clusters): if not len(clusters[0].bbox[0]): class k(object): def intersection(self, foo): return xrange(len(clusters)) return k() ndim = max(2, len(clusters[0].centroid)) p = RProp() p.dimension = ndim p.dat_extension = 'data' p.idx_extension = 'index' rtree = RTree(properties=p) for idx, c in enumerate(clusters): box = c.bbox #self.scale_box(c.bbox) if ndim == 1: rtree.insert(idx, box[0] + [0] + box[1] + [1]) else: rtree.insert(idx, box[0] + box[1]) return rtree
def make_index(shapes): """Creates an index for fast and efficient spatial queries. Args: shapes: shapely shapes to bulk-insert bounding boxes for into the spatial index. Returns: The spatial index created from the shape's bounding boxes. """ # Todo: benchmark these for our use-cases prop = Property() prop.dimension = 2 prop.leaf_capacity = 1000 prop.fill_factor = 0.9 def bounded(): for i, shape in enumerate(shapes): yield (i, shape.bounds, None) return Index(bounded(), properties=prop)
def make_index(shapes): '''Creates an index for fast and efficient spatial queries. Args: shapes: shapely shapes to bulk-insert bounding boxes for into the spatial index. Returns: The spatial index created from the shape's bounding boxes. ''' # Todo: benchmark these for our use-cases prop = Property() prop.dimension = 2 prop.leaf_capacity = 1000 prop.fill_factor = 0.9 def bounded(): for i, shape in enumerate(shapes): yield (i, shape.bounds, None) return Index(bounded(), properties=prop)
def build_rtree(self): ''' Construct an R-tree for the domain. This may reduce the computational complexity of the methods `intersection_count`, `contains`, `orient_simplices`, and `snap`. ''' # create a bounding box for each simplex and add those # bounding boxes to the R-tree if self.rtree is not None: # do nothing because the R-tree already exists logger.debug('R-tree already exists') return smp_min = self.vertices[self.simplices].min(axis=1) smp_max = self.vertices[self.simplices].max(axis=1) bounds = np.hstack((smp_min, smp_max)) p = Property() p.dimension = self.dim self.rtree = Index(properties=p) for i, bnd in enumerate(bounds): self.rtree.add(i, bnd)