2014-09-12 1 views
1

Фон: Мое приложение должно отображать MBR пространственных данных (геометрии), хранящихся в Oracle. Для этого в настоящее время я использую функцию SDO_AGGR_MBR() Oracle, но она очень медленная. При небольшом исследовании я нашел функцию SDO_TUNE.EXTENT_OF(), которая также вычисляет MBR и намного быстрее, чем SDO_AGGR_MBR. У этого есть 2 проблемы, хотя. Он работает только с 2D-данными в координатах проецирования. Чтобы воспользоваться преимуществами EXTENT_OF, я решил использовать его для прогнозируемых данных и вернуться к SDO_AGGR_MBR для географических данных.Географические или прогнозируемые данные на основе SRID в Oracle

Проблема: Я начал с предположением, что все данные с SRID от 4000 до 5000 географические, но это не совсем верно. Я нашел таблицу/представление с именем MDSYS.CS_SRS, в котором хранится информация о системе координат.

Я планирую найти SRID с помощью запроса:

select a.COLUMN_NAME.SDO_SRID from TABLE_NAME a where rownum = 1; 

, а затем с помощью этого SRID для запроса MDSYS.CS_SRS, чтобы выяснить, является ли географическим или прогнозируемым данные. В нем есть столбец WKTEXT, строки которого начинаются с PROJCS или GEOGCS.

Я мог бы прототип этого, и он, похоже, работает, но полностью уверен, что это правильный подход. Вышеприведенный запрос извлекает SRID первой строки данных. Я не знаю, может ли SRID отличаться в одном столбце. Другое предположение, которое я делаю, это текст в столбце WKTEXT. У меня будет много проблем, если во всех случаях это не PROJCS/GEOGCS, и если значения меняются между различными версиями Oracle. На самом деле, прямо сейчас, я просто предполагаю, что PROJCS означает, что проекция CS и GEOGCS означает географическую CS, и я не уверен, что это правильно.

Интересно, есть ли более простой способ выяснить, существуют ли пространственные данные в БД Oracle является проекционным или географическим.

ответ

1

Вы не указали, к какой версии базы данных вы смотрите. Я предполагаю 10gR2 или позже.

Проще всего проверить таблицу SDO_COORD_REF_SYS:

SQL> select srid, coord_ref_sys_kind from sdo_coord_ref_sys where srid in (4326, 4327, 27700, 7405); 

     SRID COORD_REF_SYS_KIND 
---------- -------------------- 
     4326 GEOGRAPHIC2D 
     4327 GEOGRAPHIC3D 
     7405 COMPOUND 
    27700 PROJECTED 

4 rows selected. 
+0

Это именно то, что я искал. Хотя мне нужно будет немного поработать над пониманием того, что означает COMPOUND, GEOCENTRIC, VERTICAL и ENGINEERING и как они отличаются от PROJECTED/GEOGRAPHIC. –

+0

VERTICAL определяет одномерную вертикальную систему. Например, 5701 - вертикальная система для Великобритании. Система COMPOUND объединяет горизонтальный компонент (PROJECTED) с VERTICAL. Например, 7405 объединяет 27700 (британская национальная сетка) с 5701. –

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