2015-08-03 20 views
10

Ich verwende JTS Geometrie Objekt, um meine Geometrieobjekte als Oracle SDO_Geometry zu speichern. Aber wenn ich SDO_GEOM.RELATE Methoden verwenden sie nicht richtig arbeiten, realisierte ich, dass ich einen räumlichen Index erstellen muss aber nicht weiß, wie mit Hibernate zu arbeiten. Kennen Sie eine Anmerkung für dieses Problem?Hibernate Spatial Index Annotation

@Type(type="org.hibernate.spatial.GeometryType") 
private Geometry area; 

Antwort

3

Nun, erstellen Sie einfach den Index auf der Tabelle, wo Sie diese Geometrien speichern. Verwenden Sie SQL dafür.

Sie müssen auch (bevor Sie den Index erstellen) die richtigen Metadaten hinzufügen, damit die Indexerstellung die richtigen Informationen enthält (Koordinatensystem, Grenzen, Toleranz). Zum Beispiel, vorausgesetzt, Ihre Geometrien in WGS84 sind Koordinaten:

insert into user_sdo_geom_metadata (table_name, column_name, diminfo, srid) 
values (
    'US_CITIES', 
    'GEOMETRY', 
    sdo_dim_array (
    sdo_dim_element('long', -180.0, 180.0, 0.5), 
    sdo_dim_element('lat', -90.0, 90.0, 0.5) 
), 
    4326 
); 
commit; 

dann den Index erstellen:

create index us_cities_sx on us_cities (geometry) 
    indextype is mdsys.spatial_index; 
+0

Nun, ich erstellten Index, wie Sie noch einige Probleme hat mir gesagt, wenn ich versuche, meine Geometrie mit SDO_GEOM zu validieren .VALIDATE_GEOMETRY Ich habe 13349 Fehler. –

+0

Zuerst SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT() verwenden. Dann bedeutet Fehler 13349, dass Ihre Form (ein Polygon) "verdreht" ist, d.h. "sich selbst kreuzend". Sie können sie nicht für eine tatsächliche Verarbeitung verwenden (Suchen, Messungen, Pufferung, Vereinigung usw.). Ich habe keine Ahnung, wie du deine Objekte konstruierst oder woher du sie bekommst, aber das ist falsch und du musst es korrigieren. –

Verwandte Themen