postgresql 两个面的交集内的点属性之和

rwqw0loc  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(251)

I have a three different tables:

  1. Polygons1
    | Name1 | Geom |
    | ------------ | ------------ |
    | Name... | POLYGON.. |
    | Cell 3 | Cell 4 |
  2. Polygons2
    | Name2 | Geom |
    | ------------ | ------------ |
    | Name... | POLYGON.. |
    | Cell 3 | Cell 4 |
  3. Points
    | ID | Num | Geom |
    | ------------ | ------------ | ------------ |
    | ID... | 54 | POINT... |
    | Cell 3 | 33 | |

I want to find where are polygons interesected and inside that area of intersection to sum points attribute - Num.

I tried this query:

SELECT sum(Num) as total, Polygons1.Name1
from Points, 
     Polygons1, 
     Polygons2 
where ST_intersects(Polygons1.geom , Polygons2.geom)
GROUP BY Polygons1.Name1

This query returns some really big sum numbers that are not correct. Please help.

bmp9r5qi

bmp9r5qi1#

1.除非在创建关系名时用双引号引起来,否则它们实际上是小写的。Make sure you know how you name things.有些工具会自动引用,有些工具不会。
1.你指定了如何配对多边形,但没有指定如何将点与这些多边形对匹配--在这种情况下,postgres假设你想将所有点与每对多边形连接起来,你可能会看到在Polygons2中找到匹配几何体的每个Polygons1.Name1旁边列出的所有Points.Num的重复总和,参见this demo
1.您使用了隐式联接。join your tables explicitly可能更容易。

SELECT sum(p.Num) as total, 
       Polygons1.Name1
from      Polygons1 as plg1 
     join Polygons2 as plg2
     on ST_Intersects(plg1.geom, plg2.geom)
     join Points    as p
     on ST_Within(p.geom, ST_Intersection(plg1.geom, plg2.geom) )
GROUP BY Polygons1.Name1;

确保您是clear on what you mean by inside and intersection

  • 如果多边形重叠共享一个较小多边形的形状区域,并且点在其中,则很明显点在它们的交点内。
  • 如果多边形只有一条边是公共的,那么它们的交点就是一条线。根据你的标准,这条线上的一个点是否在它的 * 内部 *?
  • 如果两个正方形只接触它们的角,共享一个点,那么它们的交点就是这个点。如果你有一个点在这个位置,你认为你的点在另一个点,也就是它们的交点的 * 内部 * 吗?

相关问题