sdo_buffer, sdo_relate

Antam
Дата: 29.11.2012 07:34:56
Здравствуйте, возможно кто-то может дать совет, не могу сообразить, впервые пытаюсь писать функции и процедуры на pl/sql. Передо мной стоит задача: найти координаты точки. В автокаде пользователь начинает рисовать новую линию рядом, к примеру, с точкой пересечения 2х прямых и мне необходимо найти координаты этой точки и привязать начало новой линии к этим координатам, то есть начало нового отрезка должно совпасть с точкой пересечения, что-то похожее на snap.
в моей функции 2 параметра на входе: координаты начала нового отрезка и радиус в котором, нужно искать попадающие в него прямые. Прямые находятся на определенном слое (слойА) в автокаде, соответственно геометрия линий занесена в таблицу.
1) назначаю переменную типа sdo_geometry как буфер:
buffer:=SDO_GEOM.SDO_BUFFER( точка,радиус поиска,0,001);

2) в цикле: для всех линий, попадающих в диаметр нахожу точку начала и конца отрезка

for item in (select geom from слойА where sdo_relate(geom, buffer, "msk=anyinteract "= 'TRUE')
loop
geom_line:=item.geom;
A:=item.lbr_start_point(geom_line); // если не точное написание функции извините, не помню на память
B:=item.lbr_end_point(geom_line);

if --и вот здесь загвоздка
как мне проверить , что точка A попадает или не попадает в радиус проверки с помощью функции sdo_relate?

затем, если попадает

new start:=A;
exit

else
проверить , что точка B попадает или не попадает в радиус проверки
если попадает, то
new start:=B;
exit
end if;
end loop;

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

Возможно у кого-то есть идеи?
ведь для того, чтоб использовать sdo_relate нужно выбирать геометрию объекта из таблицы, а у меня это просто точки, которые я нашла и занесла в переменные? как поступить? не могу сообразить.
Заранее спасибо.
Antam
Дата: 29.11.2012 16:27:58
не у кого нет идеи? хоть какoй-то?
PL99
Дата: 29.11.2012 16:56:39