簡體   English   中英

引用 Z 以外的字母表……即 AA、AB

[英]Referencing alphabet beyond Z… ie AA, AB

我不知道我在用 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 等。

我不介意它是否有限制或每個參考文獻都需要輸入。

這是生成字母標識符池(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']

如果你想將 map 個數字分配給那些,你可以使用: 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)’

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM