.. _history:

History of Rtree
------------------------------------------------------------------------------

`Rtree`_ was started by `Sean Gillies`_ as a port of the `libspatialindex`_
linkages that `QGIS`_ maintained to provide on-the-fly indexing support for
GUI operations. A notable feature of `R-trees`_ is the ability to insert data
into the structure without the need for a global partitioning bounds, and this
drove Sean's adoption of this code. `Howard Butler`_ later picked up `Rtree`_
and added a number of features that `libspatialindex`_ provided including disk
serialization and bulk loading by writing a C API for `libspatialindex`_ and
re-writing `Rtree`_ as a `ctypes`_ wrapper to utilize this C API. `Brent
Pedersen`_ came along and added features to support alternative coordinate
ordering, augmentation of the pickle storage, and lots of documentation.
Mattias (http://dr-code.org) added support for custom storage backends to
support using `Rtree`_ as an indexing type in `ZODB`_.

`Rtree`_ has gone through a number of iterations, and at
0.5.0, it was completely refactored to use a new internal architecture (ctypes
+ a C API over `libspatialindex`_). This refactoring has resulted in a number
of new features and much more flexibility. See :ref:`changes` for more detail.

.. note::
    A significant bug in the 1.6.1+ `libspatialindex`_ C API was found where
    it was using unsigned integers for index entry IDs instead of signed
    integers. Because `Rtree`_ appeared to be the only significant user of the 
    C API at this time, it was corrected immediately.  You should update 
    immediately and re-insert data into new indexes if this is an important 
    consideration for your application.
    
Rtree 0.5.0 included a C library that is now the C API for libspatialindex and
is part of that source tree. The code bases are independent from each other
and can now evolve separately. Rtree is pure Python as of 0.6.0+.


.. _`Sean Gillies`: http://sgillies.net/blog/
.. _`Howard Butler`: http://hobu.biz
.. _`Brent Pedersen`: http://hackmap.blogspot.com/
.. _`QGIS`: http://qgis.org


.. _`ZODB`: http://www.zodb.org/
.. _`R-trees`: http://en.wikipedia.org/wiki/R-tree
.. _`ctypes`: http://docs.python.org/library/ctypes.html
.. _`libspatialindex`: http://libspatialindex.github.com
.. _`Rtree`: http://rtree.github.com