【问题标题】:SQL Inserting new geometry into a new table that is calculated using spatial functions for intersections and differenceSQL将新几何插入到使用空间函数计算交叉点和差异的新表中
【发布时间】:2015-09-08 10:24:45
【问题描述】:

我正在尝试使用两个光标来查找 2 个不同的交点,然后使用这两个交点来查找它们之间的差异,并将其作为几何对象插入到新表中。我不确定我是否正确使用了这些游标,但我想以最有效的方式进行操作。

CREATE OR REPLACE PROCEDURE outputint
is
CURSOR findint1 IS
select sdo_geom.sdo_intersection 
    (a.geometry, b.geom, 0.05)
from  OTTAWACOLLECTOR_NAD a,
      OTTAWAPROVRDS_LRS b      
where a.road_name = 'KENT' 
AND b.rdnumber = '417';

CURSOR findint2 IS
select sdo_geom.sdo_intersection 
    (a.geometry, b.geom, 0.05)
from  OTTAWACOLLECTOR_NAD a,
      OTTAWAPROVRDS_LRS b      
where a.road_name = 'METCALFE' 
AND b.rdnumber = '417';

begin

UPDATE closedrds 
set GEOMETRY = SDO_GEOM.SDO_DIFFERENCE(
    findint1, findint2)
where rd_id = 1;

end outputint;

【问题讨论】:

    标签: sql function stored-procedures spatial oracle-spatial


    【解决方案1】:

    这种语法肯定是不正确的。你不能那样使用游标。 SDO_GEOM 中的函数是接受标量输入并产生标量结果的标准函数。换句话说,SDO_GEOM.SDO_DIFFERENCE() 将两个几何对象作为输入并返回一个几何对象(两个输入对象的几何差异)。它不需要光标作为输入。

    再一次,你到底想做什么?我假设两个表(OTTAWACOLLECTOR_NAD 和 OTTAWAPROVRDS_LRS)都是行(第二个包含 LRS 几何图形)。你对它们的交集有什么期望?线条?积分?您对计算这些结果之间的差异有何期望?

    顺便说一句,为您的数据模型添加一些一致性是个好主意。例如:为几何列使用相同的名称(GEOMETRY 与 GEOM)。更重要的是:对同一域中的属性使用相同的名称,即表示相同的信息:RD_ID 与 RDNUMBER - 假设是这种情况。

    【讨论】:

    • 我的目标是让每个光标返回一个几何对象,该对象将作为 Difference() 函数的输入。我应该改用函数吗?
    • 每个交点返回一个点,差值返回一个字符串
    • 我了解您想使用光标和操作几何图形。但要实现什么?您要解决的实际业务问题是什么?可能有直接的方法可以实现这一目标。
    • 两点之间的差异永远不会形成一条线。看起来您的行表之一包含 LRS 行 (OTTAWAPROVRDS_LRS)。您是否真的试图从两个交叉路口之间的道路上剪下一条线,即进行动态分割?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2013-11-16
    • 2021-11-27
    相关资源
    最近更新 更多