Ich habe ein QGIS-Projekt mit Ebenen, die auf PostGIS-SQL-Abfragen basieren, die das aktuelle Datum verwenden. Da sich die Daten in der Datenbank ändern, geben diese Abfragen jeden neuen Tag andere Daten zurück.
Ist es möglich, den Namen der Ebene im Ebenenbaumbedienfeld dynamisch zu ändern, sodass er das aktuelle Datum darstellt? (dh Layername wie Traffic on 24.01.2015
, der sich jeden neuen Tag ändert). Die Daten für die Beschriftung sollten dem Attribut eines Features in einer Ebene entnommen werden - sie haben alle den gleichen Wert für das Feld traffic_date
.
qgis
pyqgis
layers
query-layer
dynamic-layer
Mofoyoda
quelle
quelle
Antworten:
Wenn ich Sie richtig verstanden habe, lautet die Antwort: Ja, QGIS unterstützt dynamische Ebenennamen.
Sie müssten ein Python-Makro schreiben, das bei jedem Öffnen des Projekts ausgeführt wird. Dies wäre der Workflow:
Gehen Sie zu
QGIS->Project->Project Properties
und ersetzen SieopenProject()
durch den folgenden Python-Code:Hinweis 1: Ich habe es an Shapefiles getestet. Das Feld, aus dem ich Daten nehme, ist daher,
traffic_da
dass Shapefiles keine weiteren Buchstaben in Feldnamen unterstützen. Passen Sie dies im Code an, um auf Ihren Ebenen zu arbeiten.Hinweis 2: Abhängig von Ihrer Projektkonfiguration sollten Sie Validierungscode hinzufügen, um nur auf die gewünschten Ebenen zu reagieren. Wenn Sie den Code beispielsweise auf Rasterebenen ausführen, werden mit Sicherheit Fehler angezeigt. Wenn Sie dabei Hilfe benötigen, öffnen Sie eine neue Frage, ich kann Ihnen helfen.
Stellen Sie sicher, dass Sie Makros in Ihrem Projekt folgendermaßen aktivieren:
Settings->Options->General->Enable macros: Always
Laden Sie Ihre Ebenen in das Projekt.
Speichern Sie Ihr Projekt.
Jedes Mal, wenn Sie Ihr Projekt von diesem Punkt aus öffnen, sind Ihre Ebenennamen dynamisch. Das Datum wird aus dem Feld
traffic_date
in der Attributtabelle der einzelnen Ebenen entnommen .Nach dem ersten Öffnen des Projekts wurden meine Ebenennamen auf diese Weise dynamisch generiert:
Ich denke, das kann Ihnen helfen, loszulegen. Sagen Sie mir, wenn Sie mit nicht offensichtlichen Problemen konfrontiert sind.
quelle
on
und den Streifen von dort bis zum Ende finden, um bei der Verwendung von Regex zu sparen.