Styles

specdraftimplcandidate

Publish styles.

Scope

Clients can discover, access, use, and update styles in the following stylesheet encodings:

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

Styles available as Mapbox/MapLibre Style can be used by ldproxy to render features and vector tiles where MapLibre is used as the map client. Styles available as 3D Tiles Styling can be used by ldproxy to render features and vector tiles where Cesium is used as the map client. See defaultStyle in HTML, and style in Features HTML and Tiles.

Limitations

All encodings of a style must be created and maintained separately. The on-the-fly derivation of a stylesheet in another stylesheet encoding is not supported.

The following limitations apply for the stylesheet encodings:

  • Mapbox/MapLibre Style: The stylesheets are parsed into an internal Java object. Not all structures are supported or validated:
    • Only a single sprite is supported.
    • Terrain is not supported.
    • Text strings (e.g., color values) are not validated.
    • filter, layout and paint values are not validated.
    • Interpolate expressions are only supported in layout and paint values.
    • Sources: volatile is not supported.
    • Vector sources: promoteId is not supported.
  • 3D Tiles Styling: The stylesheets are parsed into an internal Java object. Text strings in the JSON are not validated. The defines key is not supported.
  • OGC SLD 1.0/1.1: The content of these stylesheets is validated against the XML Schema.
  • QGIS QML, ArcGIS Pro (lyrx), ArcGIS Desktop (lyr): The content of these stylesheets is not validated.

Conformance Classes

This module implements requirements of the conformance classes Core, Manage Styles, Validation of styles, Resources, Manage resources, Mapbox Style, OGC SLD 1.0, OGC SLD 1.1, HTML and Style information from the draft specification OGC API - Stylesopen in new window. The implementation is subject to change in the course of the development and approval process of the draft.

Operations

ResourcePathMethodsMedia TypesDescription
Styles
styles
GET
HTML, JSON
This operation fetches the list of styles. For each style the id, a title, links to the stylesheet of the style in each supported encoding, and the link to the metadata is provided.
Style
styles/{styleId}
GET
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
This operation fetches the list of styles. For each style the id, a title, links to the stylesheet of the style in each supported encoding, and the link to the metadata is provided.
Style Metadata
styles/{styleId}/metadata
GET
HTML, JSON
Style metadata is essential information about a style in order to support users to discover and select styles for rendering their data and for visual style editors to create user interfaces for editing a style. This operations returns the metadata for the requested style as a single document. The stylesheet of the style will typically include some the metadata, too.
Collection Styles
collections/{collectionId}/styles
GET
HTML, JSON
This operation fetches the list of styles. For each style the id, a title, links to the stylesheet of the style in each supported encoding, and the link to the metadata is provided.
Collection Style
collections/{collectionId}/styles/{styleId}
GET
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Fetches the style with identifier styleId. The set of available styles can be retrieved at /styles. Not all styles are available in all style encodings.
Collection Style Metadata
collections/{collectionId}/styles/{styleId}/metadata"
GET
HTML, JSON
Style metadata is essential information about a style in order to support users to discover and select styles for rendering their data and for visual style editors to create user interfaces for editing a style. This operations returns the metadata for the requested style as a single document. The stylesheet of the style will typically include some the metadata, too.
Styles, Style
styles, styles/{styleId}
DELETE, POST, PUT
3D Tiles Declarative Styling, ArcGIS, ArcGIS Pro, HTML, Mapbox, QGIS, SLD 1.0, SLD 1.1
Create, Replace and Delete styles.
Style Metadata
styles/{styleId}/metadata
PATCH, PUT
HTML, JSON
Update style metadata.
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
Create, Replace and Delete styles of a feature collection.
Collection Style Metadata
collection/{collectionId}/styles/{styleId}/metadata
PATCH, PUT
HTML, JSON
Update style metadata of style for a feature collection.

Path Parameters

NameResourcesDescription
collectionId
Styles, Style, Style Metadata
The identifier of the feature collection.
styleId
Style, Style Metadata, Collection Style, Collection Style Metadata
The local identifier of the resource.

Query Parameters

NameResourcesDescription
f
Styles
Select the output format of the response. If no value is provided, the standard HTTP rules apply, i.e., the "Accept" header will be used to determine the format.
f
Style
Select the output format of the response. If no value is provided, the standard HTTP rules apply, i.e., the "Accept" header will be used to determine the format.
dry-run
Styles, Style, Style Metadata, Collection Styles, Collection Style, Collection Style Metadata
If set to 'true', the operation just validates the content without creating a new style or updating an existing style.

Configuration

Storage

The stylesheets, style metadata and style information all reside as files in the data directory:

  • Stylesheets reside under the relative path styles/{apiId}/{styleId}.{ext}. The URIs (Sprites, Glyphs, Source.url, Source.tiles) used in Mapbox styles links might contain {serviceUrl}. The file extension {ext} must have the following value depending on the style encoding:
    • Mapbox Style: mbs
    • OGC SLD 1.0: sld10
    • OGC SLD 1.1: sld11
    • QGIS QML: qml
    • ArcGIS Desktop: lyr
    • ArcGIS Pro: lyrx
    • 3D Tiles Styling: 3dtiles
  • Style metadata reside under the relative path styles/{apiId}/{styleId}.metadata. Links might be templates (by setting templated to true) containing {serviceUrl}.
  • Style information reside under the relative path style-infos/{apiId}/{collectionId}.json. Links might be templates (by setting templated to true) containing {serviceUrl} and {collectionId}.

Layer Control

The layer control dialog in the webmap is activated via the webmapWithLayerControl option (see 'Options' below).

The dialog can be configured in the MapLibre style metadata (member ldproxy:layerControl). On the top level there are the following JSON members:

  • onlyLegend (Boolean, default: false): With true only the groups and layers with the symbols are displayed without the possibility to deactivate layers.
  • opened (Boolean, default: false): If true is set, the layer selection dialog will be displayed open when the map is loaded.
  • entries (default: one merge group per source layer in the vector tiles): The configuration of the groups and layers as described below.

In entries the following items allowed:

  • The id of a MapLibre layer in the style (string). The layer is displayed in the dialog with the id as name. The symbol of the layer is created without specifying attributes or a particular zoom layer.
  • A layer object. id is the id of the MapLibre layer in the style (string, mandatory). label is the name of the layer in the dialog (string, default: id). zoom is the zoom level to use when creating symbols (number, default: none). properties are attributes (object, default {}) to be used during symbol generation.
  • A group object. type is always "group". id is an id of the group (string, mandatory). label is the name of the group in the dialog (string, default: id). With onlyLegend the possibility to disable layers can be disabled for the group (Boolean, default: false). entries can contain layers (objects or string), groups or merge groups (array, default: []).
  • A radio group object. It may only occur on the top level of entries. Only exactly one entry can be selected from the group, e.g. for the selection of a basemap. type is always "radio-group". id, label have the same effect as for normal groups. entries can only contain layers (objects or string) (array, default: []).
  • A merge group object. type is always "merge-group". A merge group is a group where entries may only contain layers (objects or string) (array, default: []); these entries are not displayed as subentries in the dialog, but a symbol is created from all layers together. Instead of specifying entries, source-layer (string, default: none) can be specified alternatively; in this case, all layers with this source layer become entries.

For an example, see below.

Options

NameDefaultDescriptionTypeSince
buildingBlock
Always STYLES.
string
v3.1
extensionType
Deprecated See buildingBlock.
string
v3.1
enabled
false
Enable the building block?
boolean
v3.1
caching
{}
Sets fixed values for HTTP Caching Headers for the resources.
object
v3.1
styleEncodings
[ "Mapbox", "HTML" ]
List of enabled stylesheet encodings. Supported are 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") and HTML (HTML). HTML is an output only encoding for web maps that requires a Mapbox/MapLibre Style stylesheet. For details see conformance classes Mapbox Style, OGC SLD 1.0, OGC SLD 1.1 und HTML. Upcoming change Currently there is no way to disable the defaults Mapbox and HTML. That will be changed in v4, you will then have to repeat the defaults if you want to add additional encodings.
array
v3.1
managerEnabled
false
Option to manage styles using POST, PUT and DELETE. If styleInfosOnCollection is enabled, style information may be created and updated using PATCH. Siehe die Konformit├Ątsklasse "Manage styles".
boolean
v3.1
validationEnabled
false
Option to validate styles when using POST and PUT by setting the query parameter validate. For details see conformance class Validation of styles.
boolean
v3.1
useIdFromStylesheet
boolean
v3.1
resourcesEnabled
false
Deprecated See enabled in Modul Resources.
boolean
v3.1
resourceManagerEnabled
false
Deprecated See managerEnabled in Modul Resources.
boolean
v3.1
defaultStyle
null
Deprecated See defaultStyle in Modul HTML.
string
v3.1
deriveCollectionStyles
false
Only applies to styles in Mapbox Style format. Controls whether the styles at the collection level should be derived from the styles in the parent style collection. The prerequisite is that the name of the source in the stylesheet corresponds to {apiId} and the name of the source-layer corresponds to {collectionId}. If a style is to be used for displaying features in the FEATURES_HTML module, the option should be enabled.
boolean
v3.1
webmapWithPopup
true
Option to support popups in web maps for Mapbox Style styles that show attributes for the top-most object.
boolean
v3.1
webmapWithLayerControl
false
Option to support layer controls in web maps for Mapbox Style styles. Allows to collectively enable and disable all layers for a certain feature collection.
boolean
v3.1
layerControlAllLayers
false
Option to support layer controls for additional layers like background maps. Requires webmapWithLayerControl: true.
boolean
v3.1

Examples

Example of the specifications in the configuration file:


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

Example MapLibre stylesheet with layer control options


{
  "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": "transportationgroundcrv.3", "zoom": 8},
                {"id": "transportationgroundcrv.4", "zoom": 8}
              ]
            },
            {
              "id": "Secondary Road",
              "type": "merge-group",
              "entries": [
                {"id": "transportationgroundcrv.5", "zoom": 8},
                {"id": "transportationgroundcrv.6", "zoom": 8}
              ]
            },
            {
              "id": "Local Road",
              "type": "merge-group",
              "entries": [
                {"id": "transportationgroundcrv.7", "zoom": 8},
                {"id": "transportationgroundcrv.8", "zoom": 8}
              ]
            },
            {
              "id": "Bridge",
              "type": "merge-group",
              "entries": [
                {"id": "transportationgroundcrv.0a", "zoom": 8},
                {"id": "transportationgroundcrv.0b", "zoom": 8}
              ]
            },
            {
              "id": "Railway",
              "type": "merge-group",
              "entries": ["transportationgroundcrv.1", "transportationgroundcrv.2"]
            },
            { "id": "Name", "type": "merge-group", "entries": ["transportationgroundcrv.9"] }
          ]
        },
        {
          "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": "transportationgroundcrv.1",
      "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": "transportationgroundcrv.2",
      "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": "transportationgroundcrv.0a",
      "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": "transportationgroundcrv.0b",
      "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": "transportationgroundcrv.3",
      "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": "transportationgroundcrv.5",
      "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": "transportationgroundcrv.7",
      "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": "transportationgroundcrv.8",
      "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": "transportationgroundcrv.6",
      "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": "transportationgroundcrv.4",
      "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": "transportationgroundcrv.9",
      "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",
      "source": "daraa"
    },
    {
      "type": "symbol",
      "source-layer": "FacilityPnt",
      "layout": {"icon-image": "circle_b", "icon-size": 0.2},
      "paint": {"icon-opacity": 1},
      "id": "facilitypnt",
      "source": "daraa"
    }
  ]
}

Example style information file


{
  "title" : "topographic",
  "links" : [ {
    "rel" : "self",
    "type" : "application/json",
    "title" : "This document",
    "href" : "https://demo.ldproxy.net/daraa/styles/topographic/metadata?f=json"
  }, {
    "rel" : "alternate",
    "type" : "text/html",
    "title" : "This document as 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 in 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"
    }
  } ]
}