Dimensionen für Ebenen
Für Vektorebenen können "Dimensionen" erstellt werden.
Dabei wird die Ebene in einen speziellen Ebenentyp konvertiert, der jede Schicht der Dimension als Sublayer anbietet, sich selber aber wie die ursprüngliche Ebene verhält.
Eine Dimension definiert sich dabei als Filter auf Attribute der Ebene.
Dieses Feature wurde mit Version 7.5.0 eingeführt.
Zugriff auf Dimensionen
Der Zugriff erfolgt durch die Angabe des Layernamens und mit einem Doppelpunkt getrennt, die zu verwendende Schicht der Dimension.
Der Doppelpunkt ist in einem Ebenennamen nicht zulässig und stellt damit ein Sonderzeichen dar, woran Dimensionen erkannt werden können.
Die Schicht der Dimension kann dabei nach folgendem Schema angegeben werden (in Klammern als Beispiel):
n (L1:1): Genau diese Schicht aus der Dimension.
n1,n2,..* (L1:1,2): Genau die angegebenen Schichten der Dimension.
a-n (L1:1-4): Ein Bereich von Schichten, inklusive des Start- und End-Indizes, wobei a immer <= n sein muss.
all: (L1:all): identisch mit 1-N, wobei N die höchste Dimension ist.
unfiltered: (L1:unfiltered) ungefiltert, alle Daten der Quelle (sollte nur intern verwendet werden)
1 = Nummer der ersten Dimension.
Werden mehrere Schichten angegeben, werden die Filter mit OR verbunden.
In GeoSQL als Bsp.:
SELECT * FROM [L17:1-4];
SELECT * FROM [L17:7];
Dieser Bezeichner kann an allen Stellen, wo ein Ebenenname erforderlich ist, in dieser Form verwendet werden.
Definition einer "Dimension-Ebene"
Bei der Definition einer beliebigen *1) Ebene kann dabei der Parameter "dimension" angegeben werden.
*1) Dies ist z.Z. für fast alle Vektorlayer möglich.
Dynamisch aus der Datenquelle ermitteln (zum Zeitpunkt des Ladens der Ebene)
"dimension": {
"dynamic": {
"valueColumn": "stand",
"labelColumn": "stand"
},
"behavior":"AllowCombine,RootLayerUseFirstFilter"
}
Explizite Angabe einer Liste von Filtern
"dimension": {
"static":[{
"title":"Test-Dim 1",
"filter":"stand == 1"
},{
"title":"Test-Dim 1",
"filter":"stand == 2"
}],
"behavior":"AllowCombine,RootLayerUseFirstFilter"
}
Für textbasierte Filter muss der Vergleichswert in doppelten Anführungszeichen angegeben werden, als JSON mit \ maskiert.:
"dimension": {
"static":[{
"title":"Test-Dim 1",
"filter":"textfeld == \"ein\""
},{
"title":"Test-Dim 2",
"filter":"textfeld == \"zwei\""
}],
"behavior":"AllowCombine,RootLayerUseFirstFilter"
}
Im Managementcenter von cardo können Sie die Angabe ("dimension": ...) direkt in das Feld "iwan7RawJson" eingeben:
Verhalten
Über den Parameter behavior
wird das Verhalten gesteuert. Dabei handelt es sich um ein Enum (kombinierbar) mit folgenden Werten:
enum DimensionLayerBehavior
{
Default=0,
RootLayerUseFirstFilter = 1,
AllowCombine = 2
}
AllowCombine: Die Werte dürfen sich überschneiden, wenn der Parameter AllowCombine nicht angegeben wird, dann muss genau ein Wert aus der Dimension bei der Ansprache der Ebene angegeben sein. In cardo führt dies zur Darstellung einer exklusiven Auswahl (Radio-Buttons statt Checkbox) der Unterebenen.
RootLayerUseFirstFilter: Wenn die Ebene ohne Dimensionsangabe verwendet wird, dann wird automatisch immer der Filter der Dimension mit der Nummer 1 verwendet. (Zugriff via "L1" ist dann identisch mit "L1:1"), wenn nicht angegeben, dann wird kein Filter beim Zugriff ohne Dimensions-Nummer gesetzt.
Komplettes Beispiel, angewendet auf eine PostgreSQL Ebene:
[{
"L1": {
"type": "PostgresLayer",
"connectionString": "user=u dbname=db1 host=localhost port=5432",
"source": "schema.tabelle",
"geomColumnName": "geom",
"quickLoad": false,
"epsgCode": 25833,
"idColumnName": "id",
"dimension": {
"dynamic": {
"valueColumn": "quelle",
"labelColumn": "quelle_label"
},
"behavior":"AllowCombine"
},
"onexist": "ReplaceExisting"
}
}]
Führt in dem Fall (da dynamic angegeben ist) beim Laden eine Abfrage in der Form SELECT DISTINCT quelle, quelle_label FROM schema.tabelle ORDER BY quelle
durch und erstellt für jeden Datensatz eine Dimension mit dem Filter auf die Spalte quelle mit dem entsprechendem Wert.
Zuletzt geändert: 20.09.2024 07:22:06 (erstmals erstellt 07.04.2021)