【问题标题】:Referencing alphabet beyond Z… ie AA, AB参考 Z 以外的字母表……即 AA、AB
【发布时间】:2021-11-15 03:50:47
【问题描述】:

我不知道我在用 Python 做什么。我唯一的经验是在 QGIS 中,我也是这方面的新手。我试图寻找适合我正在寻找的东西,但它没有意义,可能是因为它在 QGIS 中的位置

我正在使用 QGIS 映射来创建 Atlas 样式的网格。这导致我找到以下代码以应用于虚拟层......

select *, char(r+64) || 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)

来自https://gis.stackexchange.com/questions/344161/how-to-create-a-grid-with-customized-labels-in-qgis

我的问题是 char(r+64) 位继续转换为 ASCII 符号,然后在到达“Z”后变为小写

有没有办法修改此代码以使其以 excel 列的样式继续超出 Z?即AA、AB等

我不介意它是否有限制或需要输入每个参考。

【问题讨论】:

  • 看起来你有一个 SQL 问题,而不是 Python 问题......
  • 这就是我对 Python 知之甚少……哈哈。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python ascii qgis


【解决方案1】:

这是生成字母标识符池(A->Z、AA->ZZ)的快速代码。有702个标识符,如果你需要更多,你可以在同样的原则下轻松添加更多的级别。

from string import ascii_uppercase
from itertools import product

pool = list(map(''.join, product(['']+list(ascii_uppercase), list(ascii_uppercase))))
>>> pool
['A', 'B', 'C', ..., 'ZY', 'ZZ']

如果你想将数字映射到这些,你可以使用:dict_pool = dict(enumerate(pool))

{0: 'A',
 1: 'B',
 2: 'C',
 3: 'D',
...
 699: 'ZX',
 700: 'ZY',
 701: 'ZZ'}

【讨论】:

    【解决方案2】:

    我想出了这个并且它有效......我只需要在每次循环到 26 时添加额外的行。

    ‘select *,
    Case
    when r<=26 then char(r+64) || ROW_NUMBER() OVER(PARTITION BY r) 
    when r between 27 and 52 then 'A' || char(r+38) || ROW_NUMBER() OVER(PARTITION BY r)
    else 'B' || char(r+12) || ROW_NUMBER() OVER(PARTITION BY r)
    
    end as newID
    
    from 
    (SELECT *,DENSE_RANK() OVER (ORDER BY round( st_minx(geometry)/0.02) asc) as r 
      FROM Grid
      ORDER BY round(ST_minY(geometry)/0.02)  DESC,
               round( ST_minX(geometry)/0.02)  ASC)’
    

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 2015-06-03
      • 2019-08-02
      • 1970-01-01
      • 2012-11-27
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多