我的PostgreSQL数据库(9.3版)中有一个geom列表,其中包含一个多多边形。然后我有一个line对象,它建立了一个边界。我正在尝试建立一个视图,其中包含边界对象内的所有geom对象。
我试过里面的函数stu(不能处理多个多边形)和stu相交。。。
下面是我的SQL命令:

CREATE VIEW buildings_intersect_boundary AS
SELECT ROW_NUMBER() OVER (ORDER BY "buildings".gid ASC) AS ROW_NUMBER,
      "buildings".name,"buildings".type,
      "buildings".geom
FROM   "buildings" INNER JOIN "boundary" ON
      ST_Intersects("buildings".geom,"boundary".geom)

目前,我通过使用边界框来解决问题:
CREATE VIEW osm_buildings_intersect_project_boundary AS
SELECT  ROW_NUMBER() OVER (ORDER BY "buildings_fromOSMShape".gid ASC) AS ROW_NUMBER,
       "buildings_fromOSMShape".name,"buildings_fromOSMShape".type,
       "buildings_fromOSMShape".geom
FROM   "buildings_fromOSMShape" INNER JOIN "boundary_project_area" ON
       "buildings_fromOSMShape".geom @ "boundary_project_area".geom

但这会返回太多的对象。。。
操作系统:Ubuntu 14.04

最佳答案

你是不是在寻找STúu Contains,它类似于STúu Intersects,但不包括未完全包含的几何图形——你说你想要的是其他对象中的对象。内部的STúU给出的是与其他几何体保持一定距离的几何体,而不是它们内部的几何体。

CREATE VIEW osm_buildings_intersect_project_boundary AS
  SELECT  ROW_NUMBER() OVER (ORDER BY buildings.gid ASC) AS ROW_NUMBER,
     buildings.name, buildings.type, buildings.geom
  FROM  "buildings_fromOSMShape" buildings, "boundary_project_area" boundaries
      WHERE ST_Contains(boundaries.geom, buildings.geom)

就我个人而言,我更喜欢用这种方式编写ST嫒u Contains和ST嫒u Intersects查询,因为我认为当连接键实际上是一个空间条件而不是一个等式约束时,使用内部连接比使用内部连接更清楚,尽管查询将以相同的方式执行。出于可读性/简洁性的目的,我还为您的表名起了别名。请注意,与ST_Intersects不同,ST_包含几何体的顺序,而ST_Intersects不包含几何体的顺序。

关于postgresql - PostGIS:按边界过滤多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24581962/

10-15 20:48