Styles

specdraftimplcandidate

Veröffentlichung von Styles.

Umfang

Clients können Styles in den folgenden Style-Formaten entdecken, darauf zugreifen, sie verwenden und aktualisieren:

  • Mapbox/MapLibre Style
  • OGC SLD 1.0
  • OGC SLD 1.1
  • QGIS QML
  • ArcGIS Desktop (lyr)
  • ArcGIS Pro (lyrx)
  • 3D Tiles Styling

Styles, die als Mapbox/MapLibre Style verfügbar sind, können von ldproxy verwendet werden, um Features und Vektorkacheln zu rendern, wenn MapLibre als Kartenclient verwendet wird. Styles, die als 3D Tiles Styling verfügbar sind, können von ldproxy verwendet werden, um Features und 3D Tiles zu rendern, wenn Cesium als Kartenclient verwendet wird. Siehe defaultStyle in HTML, und style in Features HTML und Tiles.

Limitierungen

Alle Formate eines Styles müssen separat erstellt und gepflegt werden. Die automatische Ableitung eines Stylesheets in einem anderen Format wird nicht unterstützt.

Die folgenden Einschränkungen gelten für die Style-Formate:

  • Mapbox/MapLibre Style: Die Stylesheets werden in ein internes Java-Objekt geparst. Nicht alle Strukturen werden unterstützt oder validiert:
    • Nur ein einzelnes Sprite wird unterstützt.
    • Terrain wird nicht unterstützt.
    • Textstrings (z.B. Farbwerte) werden nicht validiert.
    • filter, layout und paint Werte werden nicht validiert.
    • Interpolationsausdrücke werden nur in layout und paint Werten unterstützt.
    • Sources: volatile wird nicht unterstützt.
    • Vector-Sources: promoteId wird nicht unterstützt.
  • 3D Tiles Styling: Die Stylesheets werden in ein internes Java-Objekt geparst. Textstrings in JSON werden nicht validiert. Der JSON-Schlüssel defines wird nicht unterstützt.
  • OGC SLD 1.0/1.1: Der Inhalt dieser Stylesheets wird anhand des XML-Schemas validiert.
  • QGIS QML, ArcGIS Pro (lyrx), ArcGIS Desktop (lyr): Der Inhalt dieser Stylesheets wird nicht validiert.

Konformitätsklassen

Das Modul basiert auf den Vorgaben der Konformitätsklassen Core, Manage styles, Validation of styles, Mapbox Style, OGC SLD 1.0 und OGC SLD 1.1 aus dem Entwurf von OGC API - Stylesopen in new window. Die Implementierung wird sich im Zuge der weiteren Standardisierung der Spezifikation noch ändern.

Operationen

RessourcePfadMethodenFormateBeschreibung
Styles
styles
GET
HTML, JSON
Mit dieser Operation wird die Liste der Styles abgerufen. Für jeden Style werden die ID, ein Titel, Links zum Stylesheet des Styles in jeder unterstützten Kodierung und der Link zu den Metadaten bereitgestellt.
Style
styles/{styleId}
GET
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Mit dieser Operation wird die Liste der Stylee abgerufen. Für jeden Style werden die ID, ein Titel, Links zum Stylesheet des Styles in jeder unterstützten Kodierung und der Link zu den Metadaten bereitgestellt.
Style Metadata
styles/{styleId}/metadata
GET
HTML, JSON
Style-Metadaten sind wichtige Informationen über einen Style, damit Benutzer Styles für die Darstellung ihrer Daten erkennen und auswählen können und visuelle Style-Editoren Benutzeroberflächen für die Bearbeitung eines Styles bereitstellen können. Diese Operation gibt die Metadaten für den angeforderten Style als ein einziges Dokument zurück. Das Stylesheet des Styles enthält in der Regel auch einige der Metadaten.
Collection Styles
collections/{collectionId}/styles
GET
HTML, JSON
Mit dieser Operation wird die Liste der Styles abgerufen. Für jeden Style werden die ID, ein Titel, Links zum Stylesheet des Styles in jeder unterstützten Kodierung und der Link zu den Metadaten bereitgestellt.
Collection Style
collections/{collectionId}/styles/{styleId}
GET
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Holt den Stil mit den Identifikator styleId. Die Liste der verfügbaren Stile kann unter /styles abgerufen werden. Nicht alle Stile sind in allen Formaten verfügbar.
Collection Style Metadata
collections/{collectionId}/styles/{styleId}/metadata"
GET
HTML, JSON
Style-Metadaten sind wichtige Informationen über einen Style, damit Benutzer Styles für die Darstellung ihrer Daten erkennen und auswählen können und visuelle Style-Editoren Benutzeroberflächen für die Bearbeitung eines Styles bereitstellen können. Diese Operation gibt die Metadaten für den angeforderten Style als ein einziges Dokument zurück. Das Stylesheet des Styles enthält in der Regel auch einige der Metadaten.
Styles, Style
styles, styles/{styleId}
DELETE, POST, PUT
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Erzeugen, Ersetzen und Löschen von Styles.
Style Metadata
styles/{styleId}/metadata
PATCH, PUT
HTML, JSON
Aktualisieren der Metadaten eines Styles.
Collection Styles, Collection Style
collection/{collectionId}/styles, collection/{collectionId}/styles/{styleId}
DELETE, POST, PUT
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Erzeugen, Ersetzen und Löschen von Styles einer Feature Collection.
Collection Style Metadata
collection/{collectionId}/styles/{styleId}/metadata
PATCH, PUT
HTML, JSON
Aktualisieren der Metadaten eines Styles für eine Feature Collection.

Pfad-Parameter

NameRessourcenBeschreibung
collectionId
Styles, Style, Style Metadata
Der Identifikator der Feature Collection.
styleId
Style, Style Metadata, Collection Style, Collection Style Metadata
Der lokale Identifikator der Dateiressource.

Query Parameter

NameRessourcenBeschreibung
f
Styles
Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet.
f
Style
Wählt das Ausgabeformat der Antwort. Wenn kein Wert angegeben wird, gelten die Standard-HTTP Regeln, d.h. der "Accept"-Header wird zur Bestimmung des Formats verwendet.
dry-run
Styles, Style, Style Metadata, Collection Styles, Collection Style, Collection Style Metadata
Bei true wird der Inhalt lediglich überprüft, ohne dass ein neuer Style erstellt oder ein bestehender Style aktualisiert wird.

Konfiguration

Speicherung

  • MapLibre Stylesheets liegen im ldproxy-Datenverzeichnis unter dem relativen
    Pfad styles/{apiId}/{styleId}.mbs (alt) oder im Store (neu)
    als Values mit Typ maplibre-styles und Pfad {apiId}/{styleId}. Im letzten Fall wird mbs
    als Erweiterung weiterhin unterstützt, aber bevorzugt werden Stylesheets als normale
    YAML- oder JSON-Dateien gespeichert. Die URIs (Sprites, Glyphs, Source.url,
    Source.tiles) bei den Mapbox-Styles Links können dabei als Parameter {serviceUrl}
    enthalten.
  • 3d Tiles Stylesheets liegen im ldproxy-Datenverzeichnis unter dem relativen
    Pfad styles/{apiId}/{styleId}.3dtiles (alt) oder im Store (neu)
    als Values mit Typ 3dtiles-styles und Pfad {apiId}/{styleId}. Im letzten Fall wird 3dtiles
    als Erweiterung weiterhin unterstützt, aber bevorzugt werden Stylesheets als normale
    YAML- oder JSON-Dateien gespeichert.
  • Andere Stylesheets liegen im ldproxy-Datenverzeichnis unter dem relativen
    Pfad api-resources/styles/{apiId}/{styleId}.{ext} (alt) oder im Store (neu)
    als Ressourcen mit Typ other-styles und Pfad {apiId}/{styleId}.{ext}.
    Die Dateikennung {ext} muss den folgenden Wert in Abhängigkeit des Style-Formats haben:
    • OGC SLD 1.0: sld10
    • OGC SLD 1.1: sld11
    • QGIS QML: qml
    • ArcGIS Desktop: lyr
    • ArcGIS Pro: lyrx
  • Die Style-Metadaten liegen im ldproxy-Datenverzeichnis unter dem relativen
    Pfad api-resources/styles/{apiId}/{styleId}.metadata (alt) oder im Store (neu)
    als Ressourcen mit Typ other-styles und Pfad {apiId}/{styleId}.metadata. Links können dabei Templates
    sein (d.h. templated ist true) und als Parameter {serviceUrl} enthalten.
    Deprecated, die Unterstützung für Style-Metadaten wird in v4 entfernt.

Layerauswahl

Der Layerauswahldialog in der Webmap wird über die Option webmapWithLayerControl aktiviert (siehe 'Optionen' unten).

Der Dialog kann in den Metadaten des MapLibre-Styles konfiguriert werden (Member ldproxy:layerControl). Auf der obersten Ebene gibt es die folgenden Member:

  • onlyLegend (Boolean, Default: false): Bei true werden nur die Gruppen und Layer mit den Symbolen angezeigt ohne die Möglichkeit, Layer zu deaktivieren.
  • opened (Boolean, Default: false): Bei true wird der Layerauswahldialog bei Laden der Karte geöffnet dargestellt.
  • entries (Default: eine Merge-Group pro Source-Layer in den Vector Tiles): Die Konfiguration der Gruppen und Layer, wie nachfolgend beschrieben.

In entries sind die folgenden Einträge möglich:

  • Die id eines MapLibre-Layers in dem Style (String). Der Layer wird im Dialog mit der id als Namen dargestellt. Das Symbol des Layers wird ohne Angabe von Attributen oder eines bestimmten Zoomlayers erzeugt.
  • Ein Layer (Objekt). id ist die id das MapLibre-Layers in dem Style (String, Pflichtangabe). label ist der Name des Layers im Dialog (String, Default: id). zoom ist die bei der Symbolerzeugung zu verwendende Zoomstufe (Nummer, Default: ohne). properties sind bei der Symbolerzeugung zu verwendene Attribute (Objekt, Default {}).
  • Eine Gruppe (Objekt). type ist immer "group". id ist eine id der Gruppe (String, Pflichtangabe). label ist der Name des Gruppe im Dialog (String, Default: id). Mit onlyLegend kann für die Gruppe die Möglichkeit deaktiviert werden, Layer zu deaktivieren (Boolean, Default: false). entries kann Layer (Objekte oder String), Gruppen oder Merge-Gruppen enthalten (Array, Default: []).
  • Eine Radio-Gruppe (Objekt). Sie darf nur auf der obersten Ebene der Einträge vorkommen. Aus der Gruppe kann nur genau ein Eintrag ausgewählt werden, z.B. für die Auswahl einer Basemap. type ist immer "radio-group". id, label wirken wie bei normalen Gruppen. entries kann nur Layer (Objekte oder String) enthalten (Array, Default: []).
  • Eine Merge-Gruppe (Objekt). type ist immer "merge-group". Eine Merge-Gruppe ist eine Gruppe, bei der entries nur Layer (Objekte oder String) enthalten darf (Array, Default: []); diese Einträge werden nicht als Untereinträge im Dialog dargestellt, sondern aus allen Layern wird zusammen ein Symbol erzeugt. Statt der Angabe von entries kann alternativ auch source-layer (String, Default: ohne) angegeben werden; in diesem Fall werden alle Layer mit diesem Source-Layer zu Einträgen.

Siehe unten für ein Beispiel.

Optionen

NameDefaultBeschreibungTypSeit
buildingBlock
Immer STYLES.
string
v3.1
extensionType
Deprecated Siehe buildingBlock.
string
v3.1
enabled
false
Soll das Modul aktiviert werden?
boolean
v3.1
caching
{}
Setzt feste Werte für HTTP-Caching-Header für die Ressourcen.
object
v3.1
styleEncodings
[ "Mapbox", "HTML" ]
Steuert, welche Formate für Stylesheets unterstützt werden sollen. Zur Verfügung stehen Mapbox/MapLibre Style ("Mapbox"), OGC SLD 1.0 ("SLD10"), OGC SLD 1.1 ("SLD11"), QGIS QML ("QML"), ArcGIS Layer ("lyr" und "lyrx"), 3D Tiles ("3D Tiles") und HTML ("HTML"). HTML ist ein reines Ausgabeformat im Sinne einer Webmap und wird nur für Styles unterstützt, für die ein Stylesheet im Format Mapbox/MapLibre Style verfügbar ist. Siehe die Konformitätsklassen "Mapbox Style", "OGC SLD 1.0", "OGC SLD 1.1" und "HTML". Kommende Änderung Aktuell gibt es keinen Weg die Defaults Mapbox und HTML zu deaktivieren. Das wird sich in v4 ändern, die Defaults müssen dann wiederholt werden, wenn man zusätzliche Encodings angeben will.
array
v3.1
managerEnabled
false
Steuert, ob die Styles über POST, PUT und DELETE verwaltet werden können. Siehe die Konformitätsklasse "Manage styles".
boolean
v3.1
validationEnabled
false
Steuert, ob bei POST und PUT von Styles die Validierung der Styles über den Query-Parameter validate unterstützt werden soll. Siehe die Konformitätsklasse "Validation of styles".
boolean
v3.1
useIdFromStylesheet
boolean
v3.1
resourcesEnabled
false
Deprecated Siehe enabled in Modul Resources.
boolean
v3.1
resourceManagerEnabled
false
Deprecated Siehe managerEnabled in Modul Resources.
boolean
v3.1
defaultStyle
null
Deprecated Siehe defaultStyle in Modul HTML.
string
v3.1
deriveCollectionStyles
false
Nur wirksam bei Styles im Format Mapbox Style. Steuert, ob die Styles auf der Ebene der Collections aus den Styles aus der übergeordneten Style-Collection abgeleitet werden sollen. Voraussetzung ist, dass der Name der source im Stylesheet der {apiId} entspricht und der Name der source-layer der {collectionId}. Sofern ein Style für die Darstellung von Features im Modul FEATURES_HTML verwendet werden soll, sollte die Option aktiviert sein.
boolean
v3.1
webmapWithPopup
true
Steuert, ob bei Webkarten zu Styles im Format Mapbox Style ein Popup mit den Attributen zum obersten Objekt angezeigt werden soll.
boolean
v3.1
webmapWithLayerControl
false
Steuert, ob bei Webkarten zu Styles im Format Mapbox Style die Layer ein- und ausgeschaltet werden können. Ein- und ausgeschaltet werden können jeweils gebündelt alle Layer zu einer Feature Collection.
boolean
v3.1
layerControlAllLayers
false
Nur wirksam bei webmapWithLayerControl: true. Steuert, ob auch Kartenlayer, die nicht aus den Vector Tiles dieser API, z.B. eine Hintergrundkarte, ein- und ausgeschaltet werden können.
boolean
v3.1

Beispiele

Beispiel für die Angaben in der Konfigurationsdatei:


- buildingBlock: STYLES
  enabled: true
  styleEncodings:
  - Mapbox
  - HTML
  deriveCollectionStyles: true
  managerEnabled: false
  validationEnabled: false

Beispiel für ein MapLibre-Stylesheet mit Layerauswahldialog:


{
  "bearing": 0.0,
  "version": 8,
  "pitch": 0.0,
  "name": "topographic",
  "center": [36.1033, 32.6264],
  "zoom": 12.241790506353492,
  "metadata": {
    "ldproxy:layerControl": {
      "opened": true,
      "entries": [
        {
          "id": "Basemap",
          "type": "radio-group",
          "entries": ["Grey Background", "OSM"]
        },
        {
          "id"         : "Agriculture (Surfaces)",
          "type"       : "merge-group"           ,
          "sourceLayer": "AgricultureSrf"
        },
        {
          "id"         : "Cultural (Points)",
          "type"       : "merge-group"      ,
          "sourceLayer": "CulturePnt"
        },
        {
          "id"         : "Cultural (Surfaces)",
          "type"       : "merge-group"        ,
          "sourceLayer": "CultureSrf"
        },
        {
          "id"         : "Facility (Points)",
          "type"       : "merge-group"      ,
          "sourceLayer": "FacilityPnt"
        },
        {
          "id"         : "Hydrography (Curves)",
          "type"       : "merge-group"         ,
          "sourceLayer": "HydrographyCrv"
        },
        {
          "id"         : "Hydrography (Surfaces)",
          "type"       : "merge-group"           ,
          "sourceLayer": "HydrographySrf"
        },
        {
          "id"         : "Military (Surfaces)",
          "type"       : "merge-group"        ,
          "sourceLayer": "MilitarySrf"
        },
        {
          "id"         : "Settlement (Surfaces)",
          "type"       : "merge-group"          ,
          "sourceLayer": "SettlementSrf"
        },
        {
          "id"         : "Structure (Points)",
          "type"       : "merge-group"       ,
          "sourceLayer": "StructurePnt"
        },
        {
          "id": "Transportation - Ground (Curves)",
          "type": "group",
          "entries": [
            {
              "id": "National Road",
              "type": "merge-group",
              "entries": [
                {"id": "National2", "zoom": 8},
                {"id": "National1", "zoom": 8}
              ]
            },
            {
              "id": "Secondary Road",
              "type": "merge-group",
              "entries": [
                {"id": "Secondary2", "zoom": 8},
                {"id": "Secondary1", "zoom": 8}
              ]
            },
            {
              "id": "Local Road",
              "type": "merge-group",
              "entries": [
                {"id": "Local1", "zoom": 8},
                {"id": "Local2", "zoom": 8}
              ]
            },
            {
              "id": "Bridge",
              "type": "merge-group",
              "entries": [
                {"id": "Bridge1", "zoom": 8},
                {"id": "Bridge2", "zoom": 8}
              ]
            },
            {
              "id": "Railway",
              "type": "merge-group",
              "entries": ["Railway1", "Railway2"]
            },
            { "id": "Name", "type": "merge-group", "entries": ["Name"] }
          ]
        },
        {
          "id"         : "Utility Infrastructure (Points)",
          "type"       : "merge-group"                    ,
          "sourceLayer": "UtilityInfrastructurePnt"
        },
        {
          "id"         : "Utility Infrastructure (Curves)",
          "type"       : "merge-group"                    ,
          "sourceLayer": "UtilityInfrastructureCrv"
        },
        {
          "id"         : "Vegetation (Surfaces)",
          "type"       : "merge-group"          ,
          "sourceLayer": "VegetationSrf"
        }
      ]
    }
  },
  "sources": {
    "daraa": {
      "type": "vector",
      "tiles": ["{serviceUrl}/tiles/WebMercatorQuad/{z}/{y}/{x}?f=mvt"],
      "maxzoom": 16
    },
    "osm": {
      "type": "raster",
      "tiles": [
        "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
        "https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",
        "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png"
      ],
      "tileSize": 256,
      "attribution": "&copy;<a href=\"http://osm.org/copyright\"> OpenStreetMap</a>contributors"
    }
  },
  "sprite": "{serviceUrl}/resources/sprites",
  "glyphs": "https://go-spatial.github.io/carto-assets/fonts/{fontstack}/{range}.pbf",
  "layers": [
    {
      "id": "Grey Background",
      "type": "background",
      "layout": {"visibility": "visible"},
      "paint": {"background-color": "#d3d3d3"}
    },
    {
      "id": "OSM",
      "type": "raster",
      "source": "osm",
      "layout": {"visibility": "none"}
    },
    {
      "type": "fill",
      "source-layer": "AgricultureSrf",
      "paint": {"fill-color": "#7ac5a5"},
      "id": "agriculturesrf",
      "source": "daraa"
    },
    {
      "type": "fill",
      "source-layer": "VegetationSrf",
      "paint": {"fill-color": "#C2E4B9"},
      "id": "vegetationsrf",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "SettlementSrf",
      "paint": {"line-color": "#000000", "line-width": 2},
      "id": "settlementsrf.1",
      "source": "daraa"
    },
    {
      "type": "fill",
      "source-layer": "SettlementSrf",
      "paint": {"fill-color": "#E8C3B2"},
      "id": "settlementsrf.2",
      "source": "daraa"
    },
    {
      "type": "fill",
      "source-layer": "MilitarySrf",
      "paint": {"fill-color": "#f3602f", "fill-opacity": 0.5},
      "id": "militarysrf",
      "source": "daraa"
    },
    {
      "type": "fill",
      "source-layer": "CultureSrf",
      "paint": {"fill-color": "#ab92d2", "fill-opacity": 0.5},
      "id": "culturesrf",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "HydrographyCrv",
      "filter": [ "==", "BH140", ["get", "F_CODE"] ],
      "paint": {
        "line-color": "#00A0C6",
        "line-width": [ "step", ["zoom"], 1, 8, 2, 13, 4 ]
      },
      "id": "hydrographycrv",
      "source": "daraa"
    },
    {
      "type": "fill",
      "source-layer": "HydrographySrf",
      "filter": [ "==", "BH082", ["get", "F_CODE"] ],
      "paint": {"fill-color": "#B0E1ED", "fill-outline-color": "#00A0C6"},
      "id": "hydrographysrf",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AN010", ["get", "F_CODE"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {"line-color": "#404040", "line-width": 4},
      "id": "Railway1",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AN010", ["get", "F_CODE"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#ffffff",
        "line-dasharray": [6, 6],
        "line-width": 2
      },
      "id": "Railway2",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AQ040", ["get", "F_CODE"] ],
        [ "==", 13, ["get", "TRS"] ]
      ],
      "layout": {"line-join": "round"},
      "paint": {
        "line-color": "#000000",
        "line-width": [ "step", ["zoom"], 1, 8, 9, 13, 20 ]
      },
      "id": "Bridge1",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AQ040", ["get", "F_CODE"] ],
        [ "==", 13, ["get", "TRS"] ]
      ],
      "layout": {"line-join": "round"},
      "paint": {
        "line-color": "#ffffff",
        "line-width": [ "step", ["zoom"], 1, 8, 6, 13, 14 ]
      },
      "id": "Bridge2",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 3, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#000000",
        "line-width": [ "step", ["zoom"], 1, 8, 5, 13, 12 ]
      },
      "id": "National2",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 4, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#000000",
        "line-width": [ "step", ["zoom"], 1, 8, 5, 13, 12 ]
      },
      "id": "Secondary2",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 5, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#000000",
        "line-width": [ "step", ["zoom"], 1, 8, 3.5, 13, 9 ]
      },
      "id": "Local1",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 5, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#ffffff",
        "line-width": [ "step", ["zoom"], 1, 8, 2, 13, 6 ]
      },
      "id": "Local2",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 4, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#cb171a",
        "line-width": [ "step", ["zoom"], 1, 8, 3, 13, 8 ]
      },
      "id": "Secondary1",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "TransportationGroundCrv",
      "filter": [
        "all",
        [ "==", "AP030", ["get", "F_CODE"] ],
        [ "==", 3, ["get", "RIN_ROI"] ]
      ],
      "layout": {"line-join": "round", "line-cap": "round"},
      "paint": {
        "line-color": "#ff0000",
        "line-width": [ "step", ["zoom"], 1, 8, 3, 13, 8 ]
      },
      "id": "National1",
      "source": "daraa"
    },
    {
      "type": "symbol",
      "source-layer": "TransportationGroundCrv",
      "filter": [ "!=", "No Information", ["get", "ZI005_FNA"] ],
      "layout": {
        "text-field": "{ZI005_FNA}",
        "text-size": 10,
        "text-font": ["Metropolis Bold"],
        "symbol-placement": "line"
      },
      "paint": {
        "text-halo-color": "#ffffff",
        "text-halo-width": 2,
        "text-color": "#000000"
      },
      "id": "Name",
      "source": "daraa"
    },
    {
      "type": "line",
      "source-layer": "UtilityInfrastructureCrv",
      "filter": [ "==", "AT005", ["get", "F_CODE"] ],
      "paint": {
        "line-color": "#473895",
        "line-width": [ "step", ["zoom"], 1, 8, 1, 13, 4 ]
      },
      "id": "utilityinfrastructurecrv",
      "source": "daraa"
    },
    {
      "type": "symbol",
      "source-layer": "CulturePnt",
      "layout": {"icon-image": "mosque_b", "icon-size": 0.4},
      "paint": {"icon-opacity": 1},
      "id": "culturepnt",
      "source": "daraa"
    },
    {
      "type": "symbol",
      "source-layer": "StructurePnt",
      "filter": [ "!=", "No Information", ["get", "ZI005_FNA"] ],
      "layout": {
        "icon-image": "square",
        "icon-size": 0.15,
        "text-field": "{ZI005_FNA}",
        "text-size": 14,
        "text-offset": [0, 1.5],
        "text-font": ["Metropolis Bold"]
      },
      "paint": {
        "icon-opacity": 1,
        "text-halo-color": "#ffffff",
        "text-halo-width": 2,
        "text-color": "#000000"
      },
      "id": "structurepnt",
      "source": "daraa"
    },
    {
      "type": "circle",
      "source-layer": "UtilityInfrastructurePnt",
      "paint": {
        "circle-radius": 3,
        "circle-opacity": 0.5,
        "circle-stroke-color": "#000000",
        "circle-stroke-width": 1,
        "circle-color": "#ffffff"
      },
      "id": "utilityinfrastructurepnt_circle",
      "source": "daraa"
    },
    {
      "type": "symbol",
      "source-layer": "FacilityPnt",
      "layout": {"icon-image": "circle_b", "icon-size": 0.2},
      "paint": {"icon-opacity": 1},
      "id": "facilitypnt",
      "source": "daraa"
    }
  ]
}

Beispiel für eine Style-Metadaten-Datei:


{
  "title" : "topographic",
  "links" : [ {
    "rel" : "self",
    "type" : "application/json",
    "title" : "Dieses Dokument",
    "href" : "https://demo.ldproxy.net/daraa/styles/topographic/metadata?f=json"
  }, {
    "rel" : "alternate",
    "type" : "text/html",
    "title" : "Dieses Dokument als HTML",
    "href" : "https://demo.ldproxy.net/daraa/styles/topographic/metadata?f=html"
  } ],
  "id" : "topographic",
  "scope" : "style",
  "stylesheets" : [ {
    "title" : "Mapbox",
    "version" : "8",
    "specification" : "https://docs.mapbox.com/mapbox-gl-js/style-spec/",
    "native" : true,
    "link" : {
      "rel" : "stylesheet",
      "type" : "application/vnd.mapbox.style+json",
      "title" : "Style im Format 'Mapbox'",
      "href" : "https://demo.ldproxy.net/daraa/styles/topographic?f=mbs"
    }
  } ],
  "layers" : [ {
    "id" : "background"
  }, {
    "id" : "agriculturesrf",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/AgricultureSrf/items"
    }
  }, {
    "id" : "vegetationsrf",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/VegetationSrf/items"
    }
  }, {
    "id" : "settlementsrf.1",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/SettlementSrf/items"
    }
  }, {
    "id" : "settlementsrf.2",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/SettlementSrf/items"
    }
  }, {
    "id" : "militarysrf",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/MilitarySrf/items"
    }
  }, {
    "id" : "culturesrf",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/CultureSrf/items"
    }
  }, {
    "id" : "hydrographycrv",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/HydrographyCrv/items"
    }
  }, {
    "id" : "hydrographysrf",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/HydrographySrf/items"
    }
  }, {
    "id" : "transportationgroundcrv.0a",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.0b",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.1",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.2",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.3",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.4",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.5",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.6",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.7",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.8",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "transportationgroundcrv.9",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/TransportationGroundCrv/items"
    }
  }, {
    "id" : "utilityinfrastructurecrv",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/UtilityInfrastructureCrv/items"
    }
  }, {
    "id" : "culturepnt",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/CulturePnt/items"
    }
  }, {
    "id" : "structurepnt",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/StructurePnt/items"
    }
  }, {
    "id" : "utilityinfrastructurepnt",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/UtilityInfrastructurePnt/items"
    }
  }, {
    "id" : "facilitypnt",
    "type" : "geometry",
    "sampleData" : {
      "rel" : "start",
      "href" : "https://demo.ldproxy.net/daraa/collections/FacilityPnt/items"
    }
  } ]
}