Gibt es eine Möglichkeit, dem Druckkomponisten ein Etikett für den aktuellen Benutzer hinzuzufügen?

11

Gibt es eine Möglichkeit, dem Print Composer in QGIS ein aktuelles Benutzeretikett hinzuzufügen?

Ich dachte, es könnte etwas Ähnliches wie das Format $ CURRENT_DATE verfügbar sein.

Dies wäre in einer Windows-Umgebung.

Matt T.
quelle
1
"$ CURRENT_DATE (yyyy-MM-dd)" erwies sich als sehr nützlich und ich habe es in viele meiner Composer-Vorlagen aufgenommen. Gibt es mehr dieser Befehle? Möchten Sie automatisch den Namen meines Projekts oder einen bestimmten Ebenennamen usw. anzeigen?
SAnderka

Antworten:

8

Derzeit ist dies eine unerfüllte Funktionsanforderung (siehe Funktion Nr. 1385 ).

Sie können Ihre Ideen für neue "Token" (oder "Felder", wie sie in der Anfrage mit einem Spitznamen versehen sind) hinzufügen. Denken Sie daran, empfohlen Formatierungsoptionen gemäß gehören Qt - Klassen für den Datentyp , wie hat sich mit der Syntax durchgeführt worden $CURRENT_DATE(yyyy-MM-dd), die aufgelöst wird mit QDate::currentDate().toString( formatText )und QDate Klasse String Formatierung .


Es gibt jedoch bessere Lösungen als den Versuch, alle Arten von Token zu implementieren, die Benutzer möglicherweise benötigen oder anfordern (dies könnte eine ständig wachsende Liste sein).

Derzeit gibt es mindestens zwei Möglichkeiten, um eine robustere Lösung zu implementieren:

A) Beschriftungstext wird optional mit dem QGIS-Ausdruckseditor generiert

Dies ist derzeit die Methode, die in der Advanced Labeling Engine verwendet wird ...

Geben Sie hier die Bildbeschreibung ein

Da Composer-Beschriftungen nicht relativ zur Datenquelle eines Karten-Layers sind, Fields and Valuesmüsste der Abschnitt von ersetzt und mit geeigneteren Print Composer-Token gefüllt werden, z. B. Projektname, Titel, Projektion, Benutzer usw. (Datumsfunktionen sind bereits im Master enthalten Branch Builds). Glücklicherweise haben Entwickler daran gearbeitet, das Hinzufügen neuer Ausdrucksabschnitte relativ einfach zu gestalten, obwohl dies noch einige Arbeit erfordern würde. Zusätzliche Arbeit wäre auch erforderlich, um neue Token aufzunehmen.

B) Beschriftungstext (oder Token) ist optional das Ergebnis von Python-Snippets.

Die Implementierung einer solchen Funktion ist zwar nicht so benutzerfreundlich wie die Expression Editor-Lösung, erfordert jedoch möglicherweise nur einen einzigen Entwicklungsaufwand, da sie ein Verständnis von Python erfordert. Dann kann auf jeden Textaspekt eines QGIS-Projekts, einschließlich seiner verschiedenen Composer-Elemente , der über die PyQGIS-API (dh Python Console) verfügbar ist, zugegriffen, formatiert und als Text ausgegeben werden.

Die Python-Snippets können in einzelne Token eingeschlossen und in den aktuellen Text des Textbearbeitungsfelds eingebettet werden oder in einem separaten Textbearbeitungsfeld in der GUI enthalten sein, das durch das Kontrollkästchen aktiviert wird. Aus Sicherheitsgründen wird der Code beim Start von Composer wahrscheinlich nicht automatisch ausgeführt (könnte jedoch eine Option sein, die immer zugelassen wird).

Der Ansatz des separaten Textbearbeitungsfelds würde die Validierung des Python-Codes und die Eingabe spezifisch benannter Python-Funktionen ermöglichen, beispielsweise das folgende Snippet:

import getpass
from qgis.core import *

def pytoken_user():
    return getpass.getuser()

def pytoken_title():
    return QgsProject.instance().title()

würde eine beliebige Anzahl von In-Text-Token mit dem Namen $pytoken_useroder ersetzen $pytoken_title.


Beide oben genannten Lösungen sind wesentlich erweiterbarer als die Implementierung einzelner Token im QGIS-Quellcode. Es kann auch andere oder bessere Lösungen geben.

Dr. Hugentobler hat kürzlich den Print Composer in der QGIS-Hauptniederlassung überarbeitet. Daher ist jetzt ein idealer Zeitpunkt, um solche Kennzeichnungsfunktionen für die nächste Version von QGIS anzufordern . Ich werde so schnell wie möglich eine Funktionsanforderung für diese beiden hinzufügen.

Dakcarto
quelle
Siehe zugehörige Funktionsanforderung unter hub.qgis.org .
Dakcarto
Hat es eine dieser Lösungen in eine Release-Version von QGIS geschafft? Oder ist das noch in der Entwicklung? Danke