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 нужно выбирать геометрию объекта из таблицы, а у меня это просто точки, которые я нашла и занесла в переменные? как поступить? не могу сообразить.
Заранее спасибо.