Hibernate Spatial

Daniel Künne

Hibernate Spatial bietet eine generische Erweiterung für das Datenbank-Framework Hibernate für die Arbeit mit geographischen Daten. Es unterstützt dabei die meisten Funktionen der OpenGIS Simple Feature Specification for SQL und kann mit allen großen Datenbank-Managementsystemen verwendet werden.

Um Hibernate Spatial verwenden zu können, muss die entsprechende Bibliothek in das Projekt eingebunden werden. Zusätzlich wird auch noch eine Bibliothek mit den PostGIS-Klassen benötigt, damit Hibernate ein korrektes Mapping vornehmen kann. Ist dies geschehen, stehen zusätzlich zu den normalen Restrictions noch die SpatialRestrictions für Datenbankanfragen zur Verfügung.

Polygon boundingBox = calculateBoundingbox(msg.getCenter(), msg.getWidth(), msg.getHeight());
...
List<OSMNode> list = (List<OSMNode>)s
     .createCriteria(OSMNode.class)
     .add(SpatialRestrictions.within("coordinate", boundingBox))
     .list();

In obigen Code-Beispiel werden alle Einträge aus der Tabelle osmnodes ermittelt, die innerhalb eines Polygons liegen. Die Klasse Polygon ist dabei Bestandteil der bereits erwähnten PostGIS-Bibliothek.

Neben der Möglichkeit Abfragen um geographische Funktionen zu ergänzen bietet Hibernate Spatial auch die Möglichkeit in Java-Klassen Attribute zu verwenden, die auf eine Spalte mit geographischen Objekten in der Datenbank gemappt sind. Das folgende Beispiel ist Teil eines solchen Mappings und zeigt ein Attribut mit dem Bezeichner coordinate welches vom Typ org.hibernatespatial.GeometryUserType ist. Wird einer Datenbank-Spalte dieser Typ zugewiesen, so kann sie alle Formen von geographischen Objekten im Well-Known Binary Format speichern.

<property name="coordinate" type="org.hibernatespatial.GeometryUserType" not-null="true" />


Page last modified on March 21, 2011, at 05:20 PM