首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对多边形和点使用sdo_relate covers

如何对多边形和点使用sdo_relate covers
EN

Stack Overflow用户
提问于 2021-10-11 12:21:33
回答 1查看 63关注 0票数 0

我正在尝试查找oracle11g服务器上的多边形覆盖的所有点。在内部和包含返回逻辑值,但covers和covered总是false。我误解了这一点吗?当点在矩形多边形的中间时,如果包含为真,那么覆盖不应该是真的吗?

创建表

代码语言:javascript
复制
CREATE TABLE geo
(
    name varchar(255),
    geo  MDSYS.SDO_GEOMETRY NOT NULL
);

设置元数据

代码语言:javascript
复制
insert into user_sdo_geom_metadata(table_name, column_name, diminfo, srid)
VALUES (
       'GEO',
       'GEO',
       SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('LONGITUDE',-180, 180, 0.25),
                     MDSYS.SDO_DIM_ELEMENT('LATITUDE',-90, 90, 0.25)),
       4326);

创建空间索引

代码语言:javascript
复制
CREATE INDEX blabla ON geo (geo) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

在0/0和2/2之间做一个矩形

代码语言:javascript
复制
INSERT INTO geo (name, geo)
VALUES ('SimplePolygon',
        sdo_geometry(2003, 4326, null,
                     sdo_elem_info_array(1, 1003, 1),
                     sdo_ordinate_array(0, 0,
                                        2, 0,
                                        2, 2,
                                        0, 2,
                                        0, 0)));

在1/1上加分

代码语言:javascript
复制
INSERT INTO geo(name, geo)
VALUES ('SimplePoint',
        sdo_geometry(2001, 4326, null,
                     sdo_elem_info_array(1, 1, 1),
                     sdo_ordinate_array(1, 1)));

将所有数据与所有数据相关联,并查看掩码返回true/false。

代码语言:javascript
复制
select
  g1.name, 
  g2.name,
  sdo_relate(g1.geo, g2.geo, 'mask=COVEREDBY') as COVEREDBY,
  sdo_relate(g1.geo, g2.geo, 'mask=COVERS') as COVERS,
  sdo_relate(g1.geo, g2.geo, 'mask=COVERS+INSIDE') as COVERSINSIDE,
  sdo_relate(g1.geo, g2.geo, 'mask=INSIDE') as INSIDE,
  sdo_relate(g1.geo, g2.geo, 'mask=CONTAINS') as CONTAINS,
  sdo_relate(g1.geo, g2.geo, 'mask=ANYINTERACT') as ANYINTERACT,
  -- turn around geometry
  sdo_relate(g2.geo, g1.geo, 'mask=COVEREDBY') as COVEREDBY2,
  sdo_relate(g2.geo, g1.geo, 'mask=COVERS') as COVERS2,
  sdo_relate(g2.geo, g1.geo, 'mask=INSIDE') as INSIDE2,
  sdo_relate(g2.geo, g1.geo, 'mask=CONTAINS') as CONTAINS2,
  sdo_relate(g2.geo, g1.geo, 'mask=ANYINTERACT') as ANYINTERACT2
from geo g1, geo g2

EN

回答 1

Stack Overflow用户

发布于 2021-10-11 13:01:19

Spatial Relationships and Filtering documentation

COVERS相反,一个对象的边界和内部完全包含在另一个对象的内部或边界中,它们的内部相交,并且一个对象的边界或内部与另一个对象的边界相反。A COVEREDBY B暗示B COVERS A.

关系为假的原因是“一个对象的边界或内部与另一个对象的边界相交”的最终条件。因为你的点和矩形没有相交的边界,所以它们既不是COVER,也不是COVEREDBY

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69526111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档