Cette question s'appuie sur une question précédente que j'ai rencontrée sur gis.stackexchange: Comment modifier facilement les données d'attribut à l'aide d'expressions régulières?
Peut-être que quelqu'un peut me diriger dans la bonne direction?
J'ai un fichier vectoriel de courbes de niveau. Dans la table d'attributs, j'ai déjà converti un champ appelé FEET composé de données entières contenant des valeurs d'élévation en un champ de chaîne appelé Label. De plus, j'ai correctement ajouté un 'à la fin de la chaîne de sorte que lorsque les données sont étiquetées, elles seront lues comme des pieds.
La prochaine chose que j'essaie de faire est d'insérer une virgule entre les deux premières valeurs de la chaîne uniquement si la longueur de la chaîne est supérieure à 4, ou pour qu'une virgule n'apparaisse qu'entre les milliers et les centaines de chiffres dans le champ Étiquette. La longueur doit être supérieure à 4 car je compte également le '
Jusqu'à présent, mon code est:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
cependant la fonction regexp_replace ne semble pas accepter les variables de groupe $ 1 $ 2 dans le 3ème paramètre de la fonction.
J'ai regardé http://docs.python.org/2/library/re.html car l'expression rationnelle de la calculatrice de champ provient de ce que je comprends basée sur l'utilisation de l'expression rationnelle par python mais je n'ai pas été en mesure de le comprendre. Peut-être que ce que j'essaie de faire n'est pas encore possible avec cette fonction dans la calculatrice de champ dans QGIS 1.8 sur mac OSX. Ou plus probablement ma syntaxe est erronée car je suis un programmeur débutant et quelque peu nouveau pour les expressions régulières.
la source
Réponses:
À l'aide de deux fonctions de chaîne dans la calculatrice QGIS sur la version 2.6 Mac OS XI a pu accomplir cela. Voici les étapes:
À l'aide de la calculatrice de champ, créez un nouveau champ qui est un type de chaîne avec une largeur appropriée.
Exécutez l'expression suivante pour définir la valeur du champ:
concat( format_number( "Field_name" , 0) , '\'')
Cela a créé une colonne avec une chaîne formatée comme je le souhaitais, par exemple, le nombre
2000
serait formaté2,000'
avec la fin'
qui représente les pieds.la source
QGIS a créé une fonction appelée
format_number
pour résoudre ce problème. Vous n'avezformat_number(12345,0)
qu'à l'obtenir12,345
.la source
'
à la fin du nombre pour représenter les "pieds". Pourriez-vous effectuer les opérations suivantes dans QGIS avec cette fonction?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Vous devez d'abord transformer le nombre formaté en une chaîne à l'aide de latostring
fonction, puis utiliser laconcat
fonction pour attacher le 'à la fin.concat( format_number( "Field_name" , 0) , '\'')
Vous pouvez facilement regrouper les chiffres en Python. Voici une fonction que j'ai utilisée, que je pense avoir trouvée sur StackOverflow:
la source
Pour les personnes dont les paramètres régionaux ne correspondent pas à l'affichage de mise en forme souhaité, ce
format_number
n'est pas une solution adéquate. Par exemple, sur mon système français,format_number(2000)
affiche toujours2 000
(avec un espace comme séparateur de milliers) indépendamment des paramètres de langue QGIS, même si j'ai parfois besoin d'un affichage "à l'anglaise" - par exemple.2,000
.Dans de tels cas, l'approche suivante (et quelque peu lourde) fonctionne (au moins sur QGIS 2.18):
Vous pouvez bien sûr remplacer
','
par le séparateur de milliers que vous souhaitez. Notez que cette expression ne fonctionne qu'avec des nombres inférieurs à 1 000 000.la source
Dans QGIS, la fonction "format_number" sous le menu chaîne dans la calculatrice de champ reformate les nombres en séparateurs et décimales spécifiques aux paramètres régionaux.
la source
C'est un peu plus compliqué que cela dans QGis. Selon cet article , vous devez créer votre propre définition de fonction en Python, puis l'importer dans QGis (cela peut être fait automatiquement au démarrage). Cela peut sembler délicat, mais vous ne devez le faire qu'une seule fois et il sera toujours là!
C'est la fonction que j'ai utilisée, basée sur dmahr ci-dessus. Je ne sais pas comment il traite les chaînes, car j'ai un peu modifié le code.
Vous enregistrez ensuite cela dans .qgis / python, importez le fichier dans QGis à l'aide de la console, puis il apparaîtra dans les fonctions "Python" de l'outil d'étiquetage.
L'expression que j'ai utilisée est: milliers_comma ("[field_name]", ',')
la source
/Applications/QGIS.app/Contents/Resources/python/
?