H2 is a fast and robust embedded Java database. The embeddable nature of H2 makes it ideal for shipping with GeoServer out of the box. Doing so would allow users to upload and create data without any additional configuration of an external database. With full support for atomic transactions, H2 is a nice alternative to file based formats like Shapefile and GML which are not ideal formats for data which must undergo frequent update.
This project involves getting H2 Spatial in good enough shape to ship with GeoServer, and to provide a REST interface for clients to create new tables/featureTypes against the database. This will allow any user to instantly start creating spatial data on GeoServer by just clicking on points on a map, instead of having to figure out what a shapefile is. All spatial functionality is provided via the JTS Topology Suite: an extremely stable and robust geometry library written in Java.
Beneficial (but not mandatory) skills for this project include past experience with spatial databases such as PostGIS, Oracle Spatial, or MySQL, and experience programming JDBC.
The strategy used to spatial extend H2 is taken from the Spatial Database in a Box project. This project defines the methods for creating the "bindings" to JTS for a variety of different databases.
The GeoTools H2 Driver makes use of this method. It currently provides support for a geometric objects, and a limited set of functions. Students will build from this.
A important bit of functionality a spatial database must provide is spatial indexing. Not only to store geometric objects, but to be able to perform queries against them based on location efficiently. One of the capabilities of H2 is the ability to build multi dimensional indexes: indexes on more than one column. Coupled with the idea of a space filling curve it provides a simple form of spatial indexing. Students will explore this idea and implement such an index for H2.