有一个表有结构 -
table rt_lines {
line SDO_Geometry,
start_point SDO_Geometry,
end_point SDO_Geometry,
};
让我们说我的路线是A-B-C-D-E-F
在表格中,记录将以下列方式存储。
line start_point end_point
A-B A B
B-C B C
C-D C D
D-E D E
E-F E F
鉴于 - 我有一个位置点让我们说L1。 然后我需要使用Oracle函数SDO_NN找出距离L1最近的点。让我们说最近的点是B然后我想要获取两个记录,即 A-B& B-C。
如何在Oracle中使用内置函数实现此目的?
得到解决方案!!
解决方案 -
我使用以下查询来查找行。例如,线A-B& B-C如果我们在这里考虑,B最接近点L1。
SELECT l.* FROM rt_lines l WHERE
SDO_NN(l.start_point,MDSYS.SDO_GEOMETRY(2001,8307,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(L1.x, L1.y)), 'sdo_batch_size=0 ', 1) = 'TRUE' AND ROWNUM=1
UNION ALL
SELECT l.* FROM rt_lines l WHERE
SDO_NN(l.end_point,MDSYS.SDO_GEOMETRY(2001,8307,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(L1.x, L1.y)),'sdo_batch_size=0 ', 1) = 'TRUE' AND ROWNUM=1);