引用Z以外的字母,如AA, AB

  • 本文关键字:AA AB 引用 python ascii qgis
  • 更新时间 :
  • 英文 :


我不知道我在用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"后小写

是否有办法修改这段代码,使其继续超越Z在excel列的风格?如AA、AB等

我不介意它是否有限制,或者每个引用都需要输入。

下面是生成字母标识符池(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'}

我想出了这个,它的工作....我只需要在每次循环到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)’

最新更新