Пред шаг RTree: Разделите ряд точек на прямоугольные регионы каждый содержащий одну точку

    CREATE VIEW [DBO].[BOM1]
AS
SELECT P.ID,P.CODE,PR.PRICES FROM DBO.PGOODS P
LEFT JOIN DBO.SUBGOODS   S ON P.ID = S.ITEM
INNER JOIN DBO.PRICES PR ON PR.PGOODSID = P.ID

enter image description here

6
задан John Lane 15 February 2009 в 21:31
поделиться

3 ответа

Править: Ниже работ подхода, но игнорирует критическую функцию R-деревьев - что поведение разделения узлов R-дерева четко определено, и поддерживает сбалансированное дерево (через B-tree-like свойства). Таким образом, на самом деле все, что необходимо сделать:

  1. Выберите максимальное количество прямоугольников на страницу
  2. Создайте прямоугольники семени (используйте точки дальше всего далеко друг от друга, центроидов, безотносительно).
  3. Для каждой точки выберите прямоугольник для помещения его в
    1. Если это уже попадает в единственный прямоугольник, поместите его там
    2. Если это не делает, расширяет прямоугольник, который должен быть расширен наименьшее количество (различные способы измерить "наименьшее количество" выходы - работы области)
    3. Если несколько прямоугольников применяются - выбирают один на основе того, насколько полный это, или некоторая другая эвристика
  4. Если переполнение происходит - используют квадратичное разделение для перемещения вещей...
  5. И так далее, с помощью алгоритмов R-дерева прямо из учебника.

Я думаю, что метод ниже хорошо для нахождения Ваших начальных прямоугольников семени; но Вы не хотите заполнять свое целое R-дерево тот путь. Садиться на шпагат и изменение баланса все время могут быть немного дорогими, таким образом, Вы, вероятно, захотите сделать достойный блок работы с подходом KD ниже; просто не вся работа.


Подход KD: включите все в прямоугольник.

Если число очков в прямоугольнике> порог, развертка в направлении D, пока Вы не покрываете половину точек.

Разделитесь на левые и правые прямоугольники (или выше и ниже) точка разделения).

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

Преимущество, которое это имеет по подходу деления на квадраты, предлагаемому другим плакатом, состоит в том, что он размещает скошенные дистрибутивы точки лучше.

2
ответ дан 17 December 2019 в 07:09
поделиться

Пространственная документация Картриджа Oracle описывает алгоритм составления мозаики, который может сделать то, что Вы хотите. Короче говоря:

  • включите все свои точки в квадрат
  • если квадрат содержит 1 точку - индексный квадрат
  • если квадрат не содержит точки - игнорируют его
  • если квадрат содержит более затем 1 точку
    • квадрат разделения в 4 равных квадрата и повторный анализ для каждого нового квадрата

Результат должен быть чем-то вроде этого:
сопроводительный текст http://download-uk.oracle.com/docs/cd/A64702_01/doc/cartridg.805/a53264/sdo_ina5.gif

2
ответ дан 17 December 2019 в 07:09
поделиться

Я думаю Вы отсутствие чего-то в проблемном операторе. Предположите, что у Вас есть точки N (x, y) таким образом, что каждая точка имеет уникальный x-и y-координату. Можно разделить область на прямоугольники N затем, просто деля его на вертикальные столбцы N. Но это не помогает Вам решить ближайшую проблему ПОИ легко, не так ли? Таким образом, я думаю, что Вы думаете о чем-то о прямоугольной структуре, которую Вы еще не ясно сформулировали.

Иллюстрация:

| | | | |5| | |
|1| | | | |6| |
| | |3| | | | |
| | | | | | | |
| |2| | | | | |
| | | | | | |7|
| | | |4| | | |

Числами являются ПОИ, и вертикальные строки показывают подразделение в 7 прямоугольных областей. Но ясно в подразделении нет большой "интересной" информации. Есть ли некоторый дополнительный критерий на подразделении, которое Вы не упомянули?

0
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: