2015-08-03 20 views
10

Tôi đang sử dụng hình học jts jts đối tượng để lưu trữ đối tượng hình học của tôi dưới dạng Oracle SDO_Geometry. Tuy nhiên, khi tôi muốn sử dụng các phương thức SDO_GEOM.RELATE chúng không hoạt động đúng cách, tôi nhận thấy rằng mình cần tạo một chỉ mục không gian không gian nhưng không biết cách làm với hibernate. Bạn có biết bất kỳ chú thích nào cho vấn đề này không.Chú thích chỉ mục không gian Hibernate

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

Trả lời

3

Vâng, chỉ cần tạo chỉ mục trên bảng nơi bạn lưu trữ các hình dạng đó. Sử dụng SQL cho điều đó.

Bạn cũng cần (trước khi bạn tạo chỉ mục) để thêm siêu dữ liệu thích hợp để tạo chỉ mục có thông tin phù hợp cần thiết (hệ thống tọa độ, giới hạn, dung sai). Ví dụ, giả sử hình học của bạn là ở WGS84 phối:

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; 

Sau đó, tạo ra các chỉ số:

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

Vâng, tôi tạo ra chỉ số như bạn nói vẫn có một số vấn đề khi tôi cố gắng để xác nhận hình học của tôi với SDO_GEOM .VALIDATE_GEOMETRY Tôi nhận được lỗi 13349. –

+0

Trước hết hãy sử dụng SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(). Sau đó, lỗi 13349 có nghĩa là hình dạng của bạn (đa giác) bị "xoắn", tức là "tự qua". Bạn sẽ không thể sử dụng cho bất kỳ xử lý thực tế nào (tìm kiếm, đo lường, đệm, liên kết, v.v.). Tôi không có ý tưởng làm thế nào bạn xây dựng các đối tượng của bạn, hoặc nơi bạn nhận được chúng từ, nhưng đó là một sai và bạn phải sửa nó. –

Các vấn đề liên quan