2013-12-24 4 views
2

Я пытаюсь выполнить следующий запрос на 11g Oracle Database Enterprise Edition (11.1.0.6.0):Пространственный запрос ж/о пространственных данных

SELECT "__ItemId" 
FROM "Cities" 
WHERE "Longitude" IS NOT NULL AND "Latitude" IS NOT NULL 
    AND SDO_ANYINTERACT(SDO_GEOMETRY('POINT(' || "Longitude" || ' ' || "Latitude" || ')'), 
    SDO_UTIL.FROM_WKTGEOMETRY('POLYGON ((-100 80, 100 80, 100 -80, -100 -80, -100 80))')) = 'TRUE' 

Где "Долгота" и "Широта" - числовое [НОМЕР (28,5)] столбцов в таблице «Города».

UPD: Следующий запрос (с той же ошибкой) может быть использован для испытаний:

SELECT 'Solved!' 
FROM DUAL 
WHERE SDO_ANYINTERACT(SDO_GEOMETRY('POINT(' || 100 || ' ' || 100 || ')'), 
    SDO_UTIL.FROM_WKTGEOMETRY('POLYGON ((-150.0 82.0, 150.0 82.0, 150.0 -67.0, -150.0 -67.0, -150.0 82.0))')) = 'TRUE'; 

Я получаю сообщение об ошибке:

Error report - 
SQL Error: ORA-13226: interface not supported without a spatial index 
ORA-06512: at "MDSYS.MD", line 1723 
ORA-06512: at "MDSYS.MDERR", line 8 
ORA-06512: at "MDSYS.SDO_3GL", line 71 
ORA-06512: at "MDSYS.SDO_3GL", line 239 
13226. 00000 - "interface not supported without a spatial index" 
    *Cause: The geometry table does not have a spatial index. 
    *Action: Verify that the geometry table referenced in the spatial operator 
      has a spatial index on it. 

Вопросы:

  1. Как могу ли я проверить этот пункт с заданной «долготой» и «широтой» в указанном полигоне? Многоугольник не всегда прост, он может быть любым.
  2. Как создать пространственный индекс таблицы без какого-либо пространственного столбца?
  3. Действительно, я не могу просто назвать пространственный оператор?

ответ

1

Как указано в сообщениях об ошибках, для использования пространственных операторов необходим пространственно индексированный столбец.

Вы можете получить эквивалентную функциональность от функции RELATE в SDO_GEOM пакете с использованием маски "ANYINTERACT":

SELECT sdo_geom.relate(a, 'ANYINTERACT', b, 0.05) 
FROM dual 

http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_objgeom.htm#BGHCDIDG

+0

Спасибо! Меня устраивает! –

+0

Извините, еще один вопрос: будут ли использоваться пространственные индексы, когда они существуют? Когда «a» или «b» является пространственным столбцом в таблице с пространственным индексом в этом столбце? –

+0

В моих тестах не используются индексы (для индекса SDO_ANYINTERACT используется), но это нормально - вопрос о таблице без пространственного индекса. Спасибо за ответ! Я буду использовать разные способы. –

0

первого, вы не можете создать пространственный индекс на стол без какого-либо пространственного колонке, и sdo_anyinteract использует пространственный индекс, существует много пространственного оператора в оракуле, вы можете попробовать еще один,

Я не уверен, но вы можете попробовать sdo_relate(obj1,obj2,'querytype=window mask=anyintereact')

надеюсь, что это сработает.

+0

Спасибо! Тот же запрос с WHERE ... SDO_RELATE (SDO_GEOMETRY ('POINT (' || "Longitude" || '' || "Широта" || ')'), SDO_UTIL.FROM_WKTGEOMETRY ('POLYGON ((-100 80, 100 80, 100 -80, -100 -80, -100 80)) '), querytype = window mask = anyintereact') = 'TRUE'; Создает ту же ошибку. –

Смежные вопросы