Бесконечно большая геометрия, которая пересекается и содержит все в пространственной БД

У меня есть таблица базы данных областей, которые могут содержать друг друга, что приводит к структуре дерева/леса. Каждая область имеет родительский указатель, а области верхнего уровня имеют родителя null.

Я хотел бы изменить это, чтобы была единая область верхнего уровня, содержащая все для упрощения запросов. Тогда мне не нужны особые случаи для работы с областями верхнего уровня, потому что у областей всегда будет родитель.

Есть ли способ (в PostGIS и Oracle Spatial) вставить область с «бесконечно большой» геометрией, чтобы ее всегда можно было найти с запросами пересечений?

В частности, мне нужна геометрия, в которой независимо от G выполняются следующие утверждения:

ROOT contains G = true
ROOT intersects G = true
ROOT overlaps G = false

person takteek    schedule 15.01.2013    source источник


Ответы (1)


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

Вероятная проблема с этим (или любым подобным подходом) заключается в том, что ваша производительность не будет высокой; конечно, Oracle не справляется с манипулированием сложной геометрией, и вы потенциально искажаете индекс (ы) домена.

Вы также обнаружите, что в Oracle существует ограничение по ординате для объектов sdo_geometry. Из документации Oracle (http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#i1004087):

Поскольку максимальный размер SDO_ORDINATE_ARRAY составляет 1 048 576 чисел, максимальное количество вершин в объекте SDO_GEOMETRY зависит от количества измерений на вершину: 524 288 для двух измерений, 349 525 для трех измерений и 262 144 для четырех измерений.

Это не должно быть проблемой, если вы несколько упростите родительские фигуры.

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

person Ben    schedule 03.02.2013
comment
Спасибо за ответ. Я практически отказался от этой идеи через несколько дней после того, как задал этот вопрос. Вместо этого я сосредоточился на написании кода приложения, чтобы скрыть особые случаи. - person takteek; 04.02.2013