Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ API Reference
proj
feature/index
filter
spatial_index
function
process
layer/index
Expand Down
13 changes: 13 additions & 0 deletions doc/api/spatial_index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.. module:: spatial_index
:synopsis: Spatial index.

spatial index
=============

.. automodule:: geoscript.index

.. autoclass:: QuadTree
:members: size, insert, query, queryAll, remove

.. autoclass:: STRtree
:members: size, insert, query
2 changes: 2 additions & 0 deletions geoscript/index/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from quadtree import QuadTree
from strtree import STRtree
14 changes: 14 additions & 0 deletions geoscript/index/quadtree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

from geoscript.index.spatialindex import SpatialIndex
from org.locationtech.jts.index.quadtree import Quadtree as JtsQuadtree

class QuadTree(SpatialIndex):

def __init__(self):
SpatialIndex.__init__(self, JtsQuadtree())

def queryAll(self):
return self.index.queryAll()

def remove(self, bounds, item):
return self.index.remove(bounds, item)
13 changes: 13 additions & 0 deletions geoscript/index/spatialindex.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class SpatialIndex:

def __init__(self, index):
self.index = index

def size(self):
return self.index.size()

def insert(self, bounds, item):
self.index.insert(bounds, item)

def query(self, bounds):
return self.index.query(bounds)
7 changes: 7 additions & 0 deletions geoscript/index/strtree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from geoscript.index.spatialindex import SpatialIndex
from org.locationtech.jts.index.strtree import STRtree as JtsSTRtree

class STRtree(SpatialIndex):

def __init__(self):
SpatialIndex.__init__(self, JtsSTRtree())
37 changes: 37 additions & 0 deletions tests/test_index.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import unittest
from geoscript.index import STRtree, QuadTree
from geoscript.geom import Bounds, Point

class IndexTest(unittest.TestCase):

def testQuadTree(self):
index = QuadTree()
index.insert(Bounds(0,0,10,10), Point(5,5))
index.insert(Bounds(2,2,6,6), Point(4,4))
index.insert(Bounds(20,20,60,60), Point(30,30))
index.insert(Bounds(22,22,44,44), Point(32,32))
self.assertEqual(4, index.size())

results = index.query(Bounds(1,1,5,5))
self.assertEquals(4, len(results))

allResults = index.queryAll()
self.assertEquals(4, len(allResults))

isRemoved = index.remove(Bounds(22,22,44,44), Point(32,32))
self.assertTrue(isRemoved)

allResults = index.queryAll()
self.assertEquals(3, len(allResults))

def testSTRtree(self):
index = STRtree()
index.insert(Bounds(0,0,10,10), Point(5,5))
index.insert(Bounds(2,2,6,6), Point(4,4))
index.insert(Bounds(20,20,60,60), Point(30,30))
index.insert(Bounds(22,22,44,44), Point(32,32))
self.assertEqual(4, index.size())

results = index.query(Bounds(1,1,5,5))
self.assertEquals(2, len(results))