在 Oracle 中裁剪多边形

Posted

技术标签:

【中文标题】在 Oracle 中裁剪多边形【英文标题】:Clipping a polygon in Oracle 【发布时间】:2013-11-25 05:58:20 【问题描述】:

我在表 2 中有一个多边形,它的 id、no 和几何形状。在表 1 中,我有具有相同字段的多边形。表 2 中的多边形与表 1 中的几个多边形相交。我要做的是剪辑与表 2 中的多边形重叠并在表 3 中插入​​相同字段和几何图形的多边形。因此,如果表 2 中的多边形有 2重叠我想摆脱这些重叠并将其余部分放入一个新表中。以下代码用于返回几何的裁剪部分。裁剪完成后如何获取多边形的几何形状。

insert into table 3  
select a.store_id,b.store_id,a.store_number,a.client_id,sdo_geom.sdo_intersection(b.geometry,a.geometry,0.005)  
from table_1 a, table_2 b  
where b.store_id=34746  
and sdo_anyinteract(b.geometry,a.geometry)='True';  

【问题讨论】:

【参考方案1】:

您可能想要使用sdo_geom.sdo_difference,而不是使用sdo_geom.sdo_intersection - 这相当于减号:

【讨论】:

【参考方案2】:

我认为您正在尝试使用多个几何图形来剪辑单个几何图形? sdo_difference 仅允许 1(单个)几何实体剪辑另一个(单个)几何实体。

我有类似的要求,并用 sdo_aggr_union 解决了它。这现在是 12c 中 Oracle Locator 的一部分。

    with minisegs as (
    SELECT seg.seg_cnn cnn,SDO_GEOM.SDO_DIFFERENCE(seg.shape,(
        select SDO_AGGR_UNION(SDOAGGRTYPE(node.geometry, 0.005))
        from node_poly node 
        where SDO_RELATE(node.geometry,seg.shape,  'mask = anyinteract') = 'TRUE')) geom
    from mv_act_segs seg) 
 select cnn,sdo_geom.sdo_length(geom,0.01) len, geom from minisegs
    where geom is not null 
    and sdo_geom.sdo_length(geom,0.01)>5

这是在两端剪裁线段节点(点)缓冲区。 在这种情况下,我需要从多个对象创建一个几何对象,以使 sdo_difference 起作用。对于后续过程,我需要过滤掉短/空段。

【讨论】:

以上是关于在 Oracle 中裁剪多边形的主要内容,如果未能解决你的问题,请参考以下文章

裁剪图像包含在 4 边(非矩形)多边形中

多边形裁剪与文字裁剪

使用 php 从图像中裁剪多边形

如何在c#中用多边形裁剪图像

如何在winforms c#中从图片框中裁剪和保存非矩形但多边形区域[重复]

裁剪算法——多边形裁剪/文字裁剪