【问题标题】:Spatialite trigger to update a polygon attribute with the sum of a point attribute where points are within a polygonSpatialite 触发器以使用点在多边形内的点属性的总和来更新多边形属性
【发布时间】:2018-05-07 17:00:20
【问题描述】:

这是我的目标: 我在空间数据库中有 2 层: - 层“abonnes”,一个具有属性“nbabonnes”的点层 - 图层“公社”,一个具有属性“nbabonnescom”的多边形图层 每次我添加一个点“abonnes”时,我想用包含新点的多边形内的所有点 abonnes 的“nbabonnes”值的总和来更新属性“nbaonnescom”。 我试过这个触发器:

CREATE TRIGGER abonnes_nw_updcommunes
AFTER INSERT
ON abonnes
BEGIN
UPDATE communes SET 
    "nbabonnescom" = 
        (
        SELECT SUM(abonnes.nbabonnes)
        FROM abonnes JOIN communes ON
        ( within(abonnes.GEOMETRY, (SELECT communes.GEOMETRY FROM communes, abonnes WHERE ST_Contains(communes.GEOMETRY, NEW.GEOMETRY))))
        )
WHERE within(NEW.GEOMETRY, communes.GEOMETRY);
END;

结果几乎是正确的,但实际上,“nbabonnescom”的结果乘以“communes”多边形的数量。 例如,如果我应该获得 23,并且我有 5 个“公社”多边形,我会为 nbabonnescom 获得 115。我不明白为什么。

【问题讨论】:

    标签: triggers sum spatialite


    【解决方案1】:

    经过多次测试,我找到了正确的 SQL Code 以获得正确的结果:

    CREATE TRIGGER abonnes_nw_updcommunes
    AFTER INSERT
    ON abonnes
    BEGIN
    UPDATE communes SET 
        "nbabonnescom" = 
            (
            SELECT SUM(abonnes.nbabonnes)
            FROM abonnes JOIN communes ON
            ( within(abonnes.GEOMETRY,communes.GEOMETRY )) WHERE ST_Contains(communes.GEOMETRY, NEW.GEOMETRY)
            )
    WHERE within(NEW.GEOMETRY, communes.GEOMETRY);
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2010-10-28
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多