data-r-tree-0.0.3.0: R-Tree is a spatial data structure similar to Quadtrees or B-Trees.

Portabilitynot portable
Stabilityexperimental
MaintainerBirte Wagner, Sebastian Philipp (sebastian@spawnhost.de)
Safe HaskellNone

Data.RTree

Contents

Description

R-Tree is a spatial data structure similar to Quadtrees or B-Trees.

An R-Tree is a balanced tree and optimized for lookups. This implemetation useses an R-Tree to privide a map to arbitrary values.

Some function names clash with Prelude names, therefore this module is usually imported qualified, e.g.

 import           Data.RTree (RTree)
 import qualified Data.RTree as RT

this implemetation is incomplete at the moment. Feel free to send comments, patches or merge requests.

Synopsis

MBB

data MBB Source

Minimal bounding box

Instances

mbbSource

Arguments

:: Double

x - coordinate of first point

-> Double

y - coordinate of first point

-> Double

x - coordinate of second point

-> Double

x - coordinate of second point

-> MBB 

created a minimal bounding box (or a rectangle) The first point must be smaller, than the second one. This is unchecked.

Data Type

data RTree a Source

Instances

Functor RTree 
Typeable1 RTree 
Eq a => Eq (RTree a) 
Show a => Show (RTree a) 
Generic (RTree a) 
Monoid a => Monoid (RTree a) 
Binary a => Binary (RTree a) 
NFData a => NFData (RTree a) 

Constructors

empty :: RTree aSource

creates an empty tree

singleton :: MBB -> a -> RTree aSource

creates a single element tree

Modification

insert :: MBB -> a -> RTree a -> RTree aSource

Inserts an element whith the given MBB and a value in a tree. An existing value will be overwritten with the given one.

insert = insertWith const

insertWith :: (a -> a -> a) -> MBB -> a -> RTree a -> RTree aSource

Inserts an element whith the given MBB and a value in a tree. The combining function will be used if the value already exists.

delete :: MBB -> RTree a -> RTree aSource

Delete a key and its value from the RTree. When the key is not a member of the tree, the original tree is returned.

mapMaybe :: (a -> Maybe b) -> RTree a -> RTree bSource

map, which also filters Nothing values

Merging

union :: RTree a -> RTree a -> RTree aSource

Unifies the first and the second tree into one. If an MBB is a key in both trees, the value from the left tree is chosen.

union = unionWith const

unionWith :: (a -> a -> a) -> RTree a -> RTree a -> RTree aSource

Unifies the first and the second tree into one. The combining function is used for elemets which exists in both trees.

Searching and Properties

lookup :: MBB -> RTree a -> Maybe aSource

returns the value if it exists in the tree

lookupRange :: MBB -> RTree a -> [a]Source

returns all values, which are located in the given bounding box.

lookupRangeWithKey :: MBB -> RTree a -> [(MBB, a)]Source

returns all keys and values, which are located in the given bounding box.

length :: RTree a -> IntSource

returns the number of elements in a tree

null :: RTree a -> BoolSource

returns True, if empty

null empty = True

keys :: RTree a -> [MBB]Source

returns all keys in this tree

toList t = zip (keys t) (values t)

values :: RTree a -> [a]Source

returns all values in this tree

toList t = zip (keys t) (values t)

Lists

fromList :: [(MBB, a)] -> RTree aSource

creates a tree out of pairs

toList :: RTree a -> [(MBB, a)]Source

creates a list of pairs out of a tree

toList t = zip (keys t) (values t)