2016-12-08 2 views
1

Я изучаю пространственную базу данных оракула, но застрял на SDO_GEOMETRY. На самом деле этот объект имеет следующую структуру:Разница между GTYPE и SDO_ELEM_INFO_ARRAY

CREATE TYPE sdo_geometry AS OBJECT(
SDO_GTYPE NUMBER, 
SDO_SRID NUMBER, 
SDO_POINT SDO_POINT_TYPE, 
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY, 
SDO_ORDINATES SDO_ORDINATE_ARRAY); 

Я процитирую два атрибута SDO_GTYPE и SDO_ELEM_INFO из официальных оракула документов. SDO_GTYPE:

SDO_GTYPE указывает тип геометрии. Допустимые типы геометрии соответствуют тем, которые указаны в модели геометрии объекта для OGIS простых функций для спецификации SQL

SDO_ELEM_INFO_ARRAY (за исключением поверхностей.):

Этот атрибут позволяет узнать, как интерпретировать ординаты, хранящиеся в SDO_ORDINATES приписывать

Моя проблема в том, что я не был в состоянии отличить друг от друга. Разве это не тип геометрии Фактически, как мы интерпретируем координаты? Например, просмотрите следующий запрос insert. Это первое говорит геометрия является 2D многоугольника, и после нескольких строк он просит, чтобы интерпретировать координаты, как круг:

INSERT INTO cola_markets VALUES(
4, 
'cola_d', 
SDO_GEOMETRY(
    2003, -- 2-dimensional polygon 
    NULL, 
    NULL, 
    SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle 
    SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11) 
) 
); 

Пожалуйста, скажи мне, что случилось в моем восприятии. Спасибо за прочтение.

ответ

2

Посмотрите на следующий пример (2-7 из http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_objrelschema.htm#SPATL523)

SDO_GEOMETRY(
    2003, -- two-dimensional polygon 
    NULL, 
    NULL, 
    SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole 
    SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 
     7,5, 7,10, 10,10, 10,5, 7,5) 
) 

Это также является GType 2003, но отличается elem_info_array. Здесь информация elem сообщает нам, что многоугольник имеет внешнее кольцо и внутреннее кольцо. Он также сообщает нам, где в списке sdo_ordinates находятся координаты остановки внешнего кольца и где начинаются координаты внутреннего кольца.

И пока вы на нем, взгляните на следующий пример 2-8. Здесь представлена ​​линия, имеющая прямые сегменты и круглые дуги. Elem_info сообщает вам, где каждый из них начинается в массиве sdo_ordinate.

+0

Понятно, что _polygon с отверстием is_ является двумерным многоугольником. Но, как же _circle_ быть двумерным многоугольником? Я не понимаю эту концепцию. Отдых в порядке. Спасибо за ответ. –

+1

Документация Oracle говорит о 1003 и 2003 как полигоны, но на самом деле это любой закрытый элемент с внутренним и внешним пространством. – Rene

+0

Это то, что я предполагал. Спасибо за разъяснения. Я отмечу, что ваш ответ принят. –