Diese Frage baut auf einer früheren Frage auf, die ich bei gis.stackexchange gestellt habe: Wie kann man Attributdaten einfach mit regulären Ausdrücken bearbeiten?
Vielleicht kann mich jemand in die richtige Richtung weisen?
Ich habe ein Vektor-Shapefile mit Konturlinien. In der Attributtabelle habe ich bereits ein Feld namens FEET, das aus ganzzahligen Daten mit Höhenwerten besteht, in ein Zeichenfolgenfeld namens Label konvertiert. Zusätzlich habe ich erfolgreich ein 'an das Ende der Zeichenfolge angehängt, damit die Daten, wenn sie beschriftet sind, als Fuß gelesen werden.
Als nächstes versuche ich, nur dann ein Komma zwischen die ersten beiden Werte der Zeichenfolge einzufügen, wenn die Zeichenfolgenlänge größer als 4 ist, oder damit ein Komma nur zwischen den Tausend- und Hunderterstellen im Feld Beschriftung angezeigt wird. Die Länge muss größer als 4 sein, weil ich auch die '
Mein bisheriger Code lautet:
case when length( "Label") >4 then regexp_replace( "Label", '^([0-9])+([0-9]{3}\')$','$1 , $2') else "Label" end
Die Funktion regexp_replace scheint jedoch die Gruppenvariablen $ 1 $ 2 im 3. Parameter der Funktion nicht zu akzeptieren.
Ich habe mir http://docs.python.org/2/library/re.html angesehen, da der Regex des Feldrechners nach meinem Verständnis auf der Verwendung von Regex durch Python basiert, dies aber nicht herausfinden konnte. Vielleicht ist das, was ich versuche, mit dieser Funktion im Feldrechner in QGIS 1.8 unter Mac OSX noch nicht möglich. Oder eher ist meine Syntax falsch, da ich ein unerfahrener Programmierer bin und für reguläre Ausdrücke etwas neu bin.
quelle
Antworten:
Die Verwendung von zwei Zeichenfolgenfunktionen im QGIS-Rechner unter Version 2.6 Mac OS XI konnte dies erreichen. Hier sind die Schritte:
Erstellen Sie mit dem Feldrechner ein neues Feld, das ein Zeichenfolgentyp mit einer relevanten Breite ist.
Führen Sie den folgenden Ausdruck aus, um den Wert des Felds festzulegen:
concat( format_number( "Field_name" , 0) , '\'')
Dadurch wurde eine Spalte mit einer Zeichenfolge erstellt, die wie gewünscht formatiert wurde. So wurde beispielsweise die Zahl mit dem nachgestellten
2000
Zeichen formatiert, das für Fuß steht.2,000'
'
quelle
QGIS hat eine Funktion erstellt, die aufgerufen wird
format_number
, um dies zu beheben. Sie tunformat_number(12345,0)
es einfach, um zu bekommen12,345
.quelle
'
an das Ende der Zahl anzuhängen , um "Füße" darzustellen. Könnten Sie mit dieser Funktion in QGIS Folgendes tun?format_number(12345,0) + "'"
concat(tostring(format_number(12345,0)), "'")
. Sie müssten zuerst die formatierte Zahl mit dertostring
Funktion in eine Zeichenfolge umwandeln und dann mit derconcat
Funktion das 'am Ende anhängen.concat( format_number( "Field_name" , 0) , '\'')
Sie können die Zifferngruppierung in Python einfach durchführen. Hier ist eine Funktion, die ich verwendet habe und die ich bei StackOverflow gefunden habe:
quelle
Für Personen, deren Gebietsschema nicht zur gewünschten Formatierungsanzeige passt,
format_number
ist dies keine adäquate Lösung. Beispielsweise werden auf meinem französischen Systemformat_number(2000)
immer Anzeigen2 000
(mit einem Leerzeichen als Tausendertrennzeichen) unabhängig von den QGIS-Spracheinstellungen angezeigt, obwohl ich manchmal eine Anzeige im "englischen Stil" benötige - z.2,000
.In solchen Fällen funktioniert der folgende (und etwas umständliche) Ansatz (zumindest unter QGIS 2.18):
Sie können natürlich durch
','
jedes gewünschte Tausendertrennzeichen ersetzen . Beachten Sie, dass dieser Ausdruck nur mit Zahlen unter 1.000.000 funktioniert.quelle
In QGIS formatiert die Funktion "format_number" unter dem Zeichenfolgenmenü im Feldrechner Zahlen neu, um bestimmte Trennzeichen und Dezimalstellen zu lokalisieren.
quelle
Es ist etwas komplizierter als das in QGis. Gemäß diesem Artikel haben Sie Ihre eigene Funktionsdefinition in Python erstellen, dann importieren Sie es in qgis (dies automatisch beim Start durchgeführt werden kann). Dies mag schwierig erscheinen, aber Sie müssen es nur einmal tun und es wird immer da sein!
Dies ist die Funktion, die ich basierend auf der obigen Beschreibung von dmahr verwendet habe. Ich bin mir nicht sicher, wie es mit Strings umgeht, da ich den Code ein wenig geändert habe.
Sie speichern das dann in .qgis / python, importieren die Datei über die Konsole in QGis und werden dann in den "Python" -Funktionen des Beschriftungstools angezeigt.
Der Ausdruck, den ich verwendet habe, ist: Tausende_Komma ("[Feldname]", ',')
quelle
/Applications/QGIS.app/Contents/Resources/python/
?