代码之家  ›  专栏  ›  技术社区  ›  Buzz Moschetti

PostGIS:在包含多多边形的查询中标识匹配的多边形

  •  0
  • Buzz Moschetti  · 技术社区  · 6 年前

    假设一个表有一个geo列 myGeoColumn 包含 MultiPolygon

    MULTIPOLYGON( ((-99 56,-52 18,-88 -27,-99 56))),((-77 56, 90 30, 92 36, -77 56)) )') 
    

    如果我发出这样的查询:

    SELECT * from myTable where ST_Intersection(myGeoColumn, ST_GeomFromText('POINT (-77 56)') is not null
    

    然后查询成功并返回行——但返回整个 多面 我也是。我无法确定哪个多边形匹配。

    如何增强查询以仅返回 多面 GeometryCollection .

    1 回复  |  直到 6 年前
        1
  •  1
  •   ziggy    6 年前

    在执行st U交叉口之前,需要分解多多边形。

    with polygon 
       as(select (st_dump(geom)).geom geom from mytable
          )    
    select ST_Intersection(geom, ST_GeomFromText('POINT (-77 56)') from polygon
    

    您还将一个点和多边形相交…因此不应该像您提供的查询那样返回整个多多边形。这就是你的全部疑问吗?

    更新了我认为你在追求的东西

    with polygon 
       as(select (st_dump(geom)).geom geom from mytable
          )    
    select geom from polygon where st_intersects(geom, ST_GeomFromText('POINT (-77 56)')
    

    根据你的评论,这可能是另一种方法

    with 
      polygon_inter as(select (ST_Dump(geom)).geom geom 
                         from mytable 
                         where ST_Intersects(geom,ST_GeomFromText('POINT (-77 56)')
      )
    select geom from polygon_inter 
     where ST_Intersects(geom,ST_GeomFromText('POINT (-77 56)')
    

    第一个CTE将只选择并拆分与该点相交的多多边形(这将减轻对拆分所有多多边形的优化恐惧),然后在CTE之后选择将只选择与该点相交的单个多边形