Oracle - 找到最近的点

时间:2015-10-05 13:01:53

标签: sql ruby-on-rails oracle11g

有一个表有结构 -

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);

0 个答案:

没有答案