当前位置: 首页 > 面试题库 >

st_intersects与st_overlaps

胡志
2023-03-14
问题内容

这两个查询有什么区别:

select a.gid, sum(length(b.the_geom)) 
  from polygons as a 
     , roads as b 
 where st_intersects(a.the_geom,b.the_geom) 
 group by a.gid ;

select a.gid, sum(length(b.the_geom)) 
  from polygons as a 
     , roads as b 
 where st_overlaps(a.the_geom,b.the_geom) 
 group by a.gid ;

第一个查询给出正确的输出,而第二个查询根本不检索任何行。与多边形相交的道路也重叠了,对吗?


问题答案:

从PostGIS的文档中

http://postgis.net/docs/ST_Intersects.html

如果几何或地理共享空间的任何部分,则它们相交。重叠,触摸,所有暗示空间相交。如果上述任何一项返回true,则几何形状也会在空间上相交。

http://postgis.net/docs/ST_Overlaps.html

如果几何“空间重叠”,则返回TRUE。我们的意思是它们相交,但是一个并不完全包含另一个。

区别是:如果两个几何重叠100%,则它们不再重叠。

这是一个POSTGIS示例:

SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(b, a) As b_contains_a
FROM (SELECT 
    ST_Polygon(ST_GeomFromText('LINESTRING(1 1,3 1,3 3,1 1)'), 4326)  As a,
    ST_Polygon(ST_GeomFromText('LINESTRING(1 1,3 1,3 3,1 1)'), 4326)  As b)
    As foo;
    -- INTERSECT is TRUE, OVERLAP is FALSE because B equals A

    SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(b, a) As b_contains_a
FROM (SELECT 
    ST_Polygon(ST_GeomFromText('LINESTRING(1 1,3 1,3 3,1 1)'), 4326)  As a,
    ST_Polygon(ST_GeomFromText('LINESTRING(1 1,4 1,4 4,1 1)'), 4326)  As b)
    As foo;
    -- INTERSECT is TRUE, OVERLAP is FALSE because B contains A

    SELECT ST_Overlaps(a,b) As a_overlap_b, ST_Intersects(a, b) As a_intersects_b, ST_Contains(b, a) As b_contains_a
FROM (SELECT 
    ST_Polygon(ST_GeomFromText('LINESTRING(0 0,2 0,2 2,0 0)'), 4326)  As a,
    ST_Polygon(ST_GeomFromText('LINESTRING(1 1,3 1,3 3,1 1)'), 4326)  As b)
    As foo;
    -- INTERSECT is TRUE, OVERLAP is TRUE because not all of A intersects B and not all of B intersects A


 类似资料:
  • 我在想办法,我在postgres 9.6上使用postgis 2.3 地理上的ST_intersects返回 false,尽管两个地理相交。为了调试,我使用几何尝试了相同的查询,两者相交。 有人能帮我解释一下吗? 示例: 我正在运行此查询: 我得到: 当我跑的时候: 我得到:

  • 我在 PostGIS 中有多边形几何几何,我想用一个点“POINT(77.2135569,28.6248447)”来检查它是否相交。 从 public.tablename 中选择 ST_Intersects('POINT(28.6248447 77.2135569)'::geometry, geom) 这里,geom是数据类型为Geometry的列名。 获取以下错误: 错误:ST_Intersec

  • 我在 PostGIS 中两个地理之间的相交有问题:我有一个带有地理列的表1,在 wgs84 中填充了多多边形(每行一个)。第二个表2还有一个地理列,其中填充了wgs84中的多多边形(每行一个)。然后我在两者之间做一个相交(选择 (..) 其中 ST_Intersects())。 在某些(非常罕见的)情况下,在我看来,它工作不正确,因为intersect返回false,而期望的是true:我有一个重

  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。

  • 连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。