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

如何修改QGIS虚拟层代码让网格标签超出Z后按Excel列规则显示为AA、AB等

适配Excel列名规则的QGIS虚拟层网格编号代码

以下代码适配QGIS虚拟层默认的SpatiaLite语法,最多支持到ZZ编号(对应最多702行网格),足够绝大多数场景使用:

SELECT 
  *,
  -- 生成Excel风格的行字母编号
  CASE
    WHEN r <= 26 THEN char(r + 64)
    ELSE char((r - 1) / 26 + 64) || char((r - 1) % 26 + 65)
  END || ROW_NUMBER() OVER(PARTITION BY r) as newID 
FROM (
  SELECT *,
  DENSE_RANK() OVER (ORDER BY round( ST_minY(geometry)/0.02) desc) as r 
  FROM Grid 
  ORDER BY round(ST_minY(geometry)/0.02)  DESC, round(ST_minX(geometry)/0.02)  ASC
)

逻辑说明

  • 完全兼容原代码的网格排序规则,不需要调整原有空间计算参数
  • 行号r≤26时和原逻辑一致输出A-Z
  • 行号r>26时,先计算高位字母(对应第几个26行大组),再计算低位字母(对应组内第几个),拼接后得到AA、AB…AZ、BA…ZZ的编号

扩展方案(可选)

如果需要支持3位编号(最多18278行,覆盖AAA到ZZZ的编号区间),可以把CASE分支扩展为以下写法:

CASE
  WHEN r <= 26 THEN char(r + 64)
  WHEN r <= 702 THEN char((r - 1) / 26 + 64) || char((r - 1) % 26 + 65)
  ELSE char((r - 1) / 676 + 64) || char(((r - 1) % 676) / 26 + 65) || char((r - 1) % 26 + 65)
END

使用注意

  • 代码中的Grid请替换为你自己的网格图层名称
  • 代码中的0.02是网格步长匹配参数,如果你创建的网格单位不是度、或者步长有修改,同步调整这个值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:27:04