Esta pergunta baseia-se em uma pergunta anterior que encontrei em gis.stackexchange: Como editar facilmente dados de atributos usando Expressões regulares?
Talvez alguém possa me apontar na direção certa?
Eu tenho um shapefile de vetor de linhas de contorno. Na tabela de atributos, eu já converti um campo chamado FEET, que consiste em dados inteiros contendo valores de elevação em um campo de string chamado Label. Além disso, anexei com êxito um 'ao final da string, para que, quando os dados forem rotulados, sejam lidos como pés.
A próxima coisa que estou tentando fazer é inserir uma vírgula entre os dois primeiros valores da string apenas se o comprimento da string for maior que 4 ou para que uma vírgula apareça apenas entre os milhares e centenas de dígitos no campo Label. O comprimento deve ser maior que 4, porque também estou contando o '
Meu código até agora é:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
no entanto, a função regexp_replace parece não aceitar as variáveis de grupo $ 1 $ 2 no terceiro parâmetro da função.
Eu olhei http://docs.python.org/2/library/re.html como o regex campo-calculadora é pelo que eu entendo com base no uso de python de regex, mas não foram capazes de descobrir isso. Talvez o que estou tentando fazer ainda não seja possível com esta função na calculadora de campo no QGIS 1.8 no mac OSX. Ou, mais provavelmente, minha sintaxe está errada, pois sou um programador iniciante e um tanto novo para expressões regulares.
fonte
Respostas:
O uso de duas funções de seqüência de caracteres na calculadora QGIS na versão 2.6 do Mac OS XI conseguiu isso. Aqui estão os passos:
Usando a calculadora de campo, crie um novo campo que seja um tipo de sequência com uma largura relevante.
Execute a seguinte expressão para definir o valor do campo:
concat( format_number( "Field_name" , 0) , '\'')
Isso criou uma coluna com uma string formatada como eu queria, por exemplo, o número
2000
seria formatado2,000'
com o final'
que significa pés.fonte
O QGIS criou uma função chamada
format_number
para resolver isso. Você simplesmente fazformat_number(12345,0)
para conseguir12,345
.fonte
'
a ao final do número para representar "pés". Você seria capaz de fazer o seguinte no QGIS com esta função?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Você precisaria primeiro transformar o número formatado em uma string usando atostring
função e, em seguida, use aconcat
função para anexar o 'no final.concat( format_number( "Field_name" , 0) , '\'')
Você pode fazer o agrupamento de dígitos facilmente no Python. Aqui está uma função que eu usei, que acho que encontrei no StackOverflow:
fonte
Para pessoas cuja localidade não se ajusta à exibição de formatação desejada,
format_number
não é uma solução adequada. Por exemplo, no meu sistema francês,format_number(2000)
sempre é exibido2 000
(com um espaço como separador de milhares) independentemente das configurações de idioma do QGIS, embora às vezes eu precise de uma exibição em "estilo inglês" - por exemplo.2,000
.Nesses casos, a seguinte abordagem (e um tanto complicada) funciona (pelo menos no QGIS 2.18):
É claro que você pode substituir
','
por qualquer separador de milhares que desejar. Observe que essa expressão funciona apenas com números inferiores a 1.000.000.fonte
No QGIS, a função "format_number" no menu de strings da calculadora de campos reformata os números para separadores específicos de localidades e casas decimais.
fonte
É um pouco mais complicado do que isso nos QGis. De acordo com este artigo , você deve criar sua própria definição de função no Python e importá-la para o QGis (isso pode ser feito automaticamente na inicialização). Isso pode parecer complicado, mas você só precisa fazer uma vez e sempre estará lá!
Esta é a função que eu usei, com base nos dmahrs acima. Não tenho certeza de como ele lida com as strings, pois modifiquei um pouco o código.
Em seguida, salve isso em .qgis / python, importe o arquivo para o QGis usando o console e, em seguida, ele aparecerá nas funções "Python" na ferramenta de rótulo.
A expressão que usei é: thousand_comma ("[field_name]", ',')
fonte
/Applications/QGIS.app/Contents/Resources/python/
?