You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CARTO Builder企业版:基于地图范围的动态BBOX计算实现问询

动态BBOX实时计算解决方案(Carto Builder企业版)

嘿,我明白你的问题了——你原来的SQL用了全局窗口函数,计算的是全表的增长率,所以不管地图怎么缩放平移,数值都不会变。要实现基于当前地图范围的动态计算,得用上Carto Builder的动态BBOX变量和空间过滤,下面给你两种可行的方案:

方案一:在点位图层中嵌入动态增长率计算

修改你的SQL,先用CTE过滤出当前地图视图内的数据,再计算该范围内的增长率,同时只返回当前视图内的点位:

WITH bbox_stats AS (
  -- 第一步:计算当前地图范围内的两个总和
  SELECT 
    SUM(montant_periode_en_cours) AS sum_current,
    SUM(montant_periode_precedente) AS sum_previous
  FROM "anagraph-clement".purvodka_master_attempt_2
  WHERE ST_Intersects(the_geom, !bbox!) -- 用动态BBOX过滤当前视图的要素
)
-- 第二步:返回当前范围内的点位,带上动态计算的增长率
SELECT 
  -- 加NULLIF避免除以0的报错
  (sum_current - sum_previous) / NULLIF(sum_previous, 0) AS tx_croissance_moy,
  pm.*
FROM "anagraph-clement".purvodka_master_attempt_2 pm, bbox_stats
WHERE ST_Intersects(pm.the_geom, !bbox!)

关键说明:

  • !bbox!是Carto Builder的内置动态变量,会自动替换为当前地图视图的边界框几何,每次地图缩放/平移都会更新。
  • ST_Intersects用来筛选落在当前边界内的空间要素,确保聚合计算只针对可见范围的数据。
  • CTE先完成范围内的聚合,再把计算好的增长率关联到每个点位上,这样公式小工具引用tx_croissance_moy时,就是当前视图的动态值。

方案二:单独创建聚合图层用于公式小工具

如果你的公式小工具只需要显示增长率数值,不需要和点位绑定,可以创建一个隐藏的聚合图层,SQL只返回当前范围内的增长率:

SELECT 
  (SUM(montant_periode_en_cours) - SUM(montant_periode_precedente)) / NULLIF(SUM(montant_periode_precedente), 0) AS tx_croissance_moy
FROM "anagraph-clement".purvodka_master_attempt_2
WHERE ST_Intersects(the_geom, !bbox!)

然后把这个图层设置为隐藏,在公式小工具中选择该图层的tx_croissance_moy字段,地图视图变化时,这个数值会自动实时更新。

注意事项

  • 确保你的表有正确的空间字段(比如the_geom),并且空间参考和地图一致,否则ST_Intersects无法正常工作。
  • 处理分母为0的情况:用NULLIF(sum_previous, 0)替代直接用sum_previous,避免出现除以0的报错。
  • 测试时可以缩放地图,检查公式小工具的数值是否随视图范围变化而更新。

内容的提问来源于stack exchange,提问作者CGlog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:19:58