Oracle Spatial 12C MD.HHENCODE для геохэша не работает

Я пытаюсь использовать пространственную функцию MD.HHENCODE (или MDSYS.HHENCODE) в Oracle Spatial 12C. Я не могу получить функцию для компиляции на основе единственных документов, которые я смог найти. Вот мой код функции:

CREATE OR REPLACE FUNCTION linear_key (  p_shape   in mdsys.sdo_geometry,
                                         p_diminfo in mdsys.sdo_dim_array ,  v_lvl  number)
RETURN RAW DETERMINISTIC
IS
  v_ctr   MDSYS.SDO_GEOMETRY;  
  rval   RAW(200);
BEGIN
    v_ctr := MDSYS.SDO_GEOM.SDO_CENTROID(p_shape,p_diminfo);
    select MDSYS.HHENCODE( v_ctr.sdo_point.x, p_diminfo(1).sdo_lb, p_diminfo(1).sdo_ub, v_lvl, 
                          v_ctr.sdo_point.y, p_diminfo(2).sdo_lb, p_diminfo(2).sdo_ub, v_lvl) 
                          into rval from dual;
  return rval;
 END;

Я получаю ошибки компиляции - ORA 00904, недопустимый идентификатор MDSYS.HHENCODE. В некоторых примерах, которые я видел, используется MD.HHENCODE, и я все равно получаю ту же ошибку. Я также читал, что я должен включить пакет, но я тоже не могу понять, как это сделать. Целый день возился, помогите. Спасибо


person markgiaconia    schedule 14.11.2016    source источник
comment
У вас действительно установлена ​​пространственная опция? Видите ли вы пакет MDSYS.MD и/или функцию MDSYS.HHENCODE в словаре данных? Если да, предоставили ли вы привилегии пользователю, которого вы пытаетесь скомпилировать, и предоставили напрямую, а не через роль? (Почему заголовок и первая строка относятся к CCENCODE?)   -  person Alex Poole    schedule 14.11.2016
comment
спасибо @AlexPoole пространственное определенно установлено. Что касается предоставления, я не знаю, но спасибо, что упомянули об этом. CCENCODE упоминается, потому что это была точка входа в эту проблему (что может быть плохой меткой на данный момент)   -  person markgiaconia    schedule 14.11.2016


Ответы (1)


Спасибо за вклад, но я думаю, что через неясную ссылку я обнаружил, как добиться того, чего я хочу, с помощью SDO_UTIL.linear_key(args), который, по-видимому, заменяет старый HHENCODE в 12C. В моей таблице есть столбец, называемый геометрией, и это проекционная геометрия 8307, поэтому мой bbox - это то, что ниже по этой причине. Похоже, что это выполняет функцию, подобную геохешу, и в настоящее время я просматриваю функциональность DECODE для строки.

Вот код

select substr(SDO_UTIL.linear_key(A.geometry,-180,-90,180,90, 10),0,3)  as encoded
from mytable A

Я все еще пытаюсь понять, что на самом деле делает для меня последний аргумент в функции, но я получаю от этого то, что хочу.

person markgiaconia    schedule 14.11.2016