Metadata: variables

Variables which are available for display either as gridded data on the map user interface component or as a line chart on the plot UI component.

Note

This mixing of concerns assumes a 1:1 relationship between gridded data variables and plot data variables.

If that assumption is valid, and both NoData and SWE variables can be extracted from the gridded variables specification, then perhaps plot variables and gridded data variables should continue to share an ID.

NoData masks are identified by "layerType": "raster_notprocessed".

Note

NoData masks, to me, don’t make sense as variables, and this should be resolved in a future version of the spec.

Perhaps the NoData mask will have its own JSON config file.

Schema
{
  "$defs": {
    "SatelliteVariable": {
      "additionalProperties": false,
      "description": "A unique satellite variable (sensor, platform, algorithm).",
      "properties": {
        "sensor": {
          "title": "Sensor",
          "type": "string"
        },
        "platform": {
          "title": "Platform",
          "type": "string"
        },
        "algorithm": {
          "title": "Algorithm",
          "type": "string"
        },
        "source": {
          "title": "Source",
          "type": "string"
        },
        "layerType": {
          "description": "We have to differentiate between variables selectable for rasters/plots, for not processed layer, and for SWE, because they go to separate user interface elements. TODO: These things should be in separate files!",
          "enum": [
            "raster",
            "raster_notprocessed"
          ],
          "title": "Layertype",
          "type": "string"
        },
        "longName": {
          "title": "Longname",
          "type": "string"
        },
        "longNamePlot": {
          "title": "Longnameplot",
          "type": "string"
        },
        "helpText": {
          "title": "Helptext",
          "type": "string"
        },
        "labelMapLegend": {
          "title": "Labelmaplegend",
          "type": "string"
        },
        "labelPlotYaxis": {
          "title": "Labelplotyaxis",
          "type": "string"
        },
        "valuePrecision": {
          "title": "Valueprecision",
          "type": "integer"
        },
        "valueRange": {
          "description": "The range of values this variable can realistically have",
          "maxItems": 2,
          "minItems": 2,
          "prefixItems": [
            {
              "type": "integer"
            },
            {
              "type": "integer"
            }
          ],
          "title": "Valuerange",
          "type": "array"
        },
        "noDataValue": {
          "title": "Nodatavalue",
          "type": "integer"
        },
        "colormapId": {
          "title": "Colormapid",
          "type": "integer"
        },
        "transparentZero": {
          "title": "Transparentzero",
          "type": "boolean"
        }
      },
      "required": [
        "sensor",
        "platform",
        "algorithm",
        "source",
        "layerType",
        "longName",
        "longNamePlot",
        "helpText",
        "labelMapLegend",
        "labelPlotYaxis",
        "valuePrecision",
        "valueRange",
        "noDataValue",
        "colormapId",
        "transparentZero"
      ],
      "title": "SatelliteVariable",
      "type": "object"
    }
  },
  "description": "Mapping of satellite variable unique IDs to properties.",
  "patternProperties": {
    "^[0-9]+$": {
      "$ref": "#/$defs/SatelliteVariable"
    }
  },
  "title": "SatelliteVariablesIndex",
  "type": "object"
}
Example
../static/snow-surface-properties/variables.json
{
  "36": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Viewable Snow Cover Percent",
    "longNamePlot": "",
    "labelMapLegend": "Viewable Snow Cover Percent (%, for snow >= 10%)",
    "labelPlotYaxis": "Area (sq km)",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 6,
    "transparentZero": true,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "40": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Snow Cover Percent",
    "longNamePlot": "Total Snow Cover Area",
    "labelMapLegend": "Snow Cover Percent (%, for snow >= 10%)",
    "labelPlotYaxis": "Area (sq km)",
    "helpText": "The areal extent of snow-covered ground, expressed as the mathematical percent of a region covered with snow. In the context of this website, the region refers to an Earth observing satellite's smallest measurement area. We use data from the Moderate Resolution Imaging Spectroradiometer at ~463m spatial resolution. Note that the Earth's surface is sometimes covered by clouds.",
    "valuePrecision": 0,
    "colormapId": 6,
    "transparentZero": true,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "41": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Snow Grain Size",
    "longNamePlot": "",
    "labelMapLegend": "Snow Grain Size (\u00b5m, for Snow >= 10%)",
    "labelPlotYaxis": "Snow Grain Size (\u00b5m)",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 3,
    "transparentZero": false,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 65535,
    "valueRange": [
      10,
      1100
    ]
  },
  "43": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Decrease in visible Albedo from Dust and Soot",
    "longNamePlot": "",
    "labelMapLegend": "Decrease in Albedo (%, for Snow >=10%)",
    "labelPlotYaxis": "Decrease in Albedo (%)",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 2,
    "transparentZero": false,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 255,
    "valueRange": [
      0,
      75
    ]
  },
  "44": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Snow Radiative Forcing",
    "longNamePlot": "Average Snow Radiative Forcing",
    "labelMapLegend": "Snow Radiative Forcing (W/m^2, for snow >= 10%)",
    "labelPlotYaxis": "Average Snow Radiative Forcing (W/m^2)",
    "helpText": "When snow impurities such as dust or soot fall on snow, its surface darkens and absorbs more solar energy. Snow radiative forcing is a measure of the additional absorption of solar radiation from light absorbing particles (LAP) such as dust or soot. Units of measure are Watts per square meter (W/m2) and values can range from 0 to 500 W/m2. This maximum value depends on incoming solar radiation (elevation, direct sun vs shaded) and the amount of dust or soot. A value of 0 means no additional radiation is being absorbed. A value of 500 means nearly all of the solar energy is absorbed (depends on latitude, elevation, clouds). Radiative forcing is calculated by the difference between the net (downward minus upward) radiative fluxes (irradiance) with and without LAP.",
    "valuePrecision": 0,
    "colormapId": 4,
    "transparentZero": false,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 65535,
    "valueRange": [
      0,
      500
    ]
  },
  "45": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Snow Cover Duration",
    "longNamePlot": "Average Snow Cover Duration",
    "labelMapLegend": "Snow Cover Duration (days, >= 14)",
    "labelPlotYaxis": "Average Snow Cover Duration (days)",
    "helpText": "The number of days a region has been covered with snow as identified with snow cover percent greater than a snow cover percent threshold since a starting time. Our data uses 15% as the snow percent threshold and October 1 as the starting date for these maps.",
    "valuePrecision": 3,
    "colormapId": 5,
    "transparentZero": true,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 65535,
    "valueRange": [
      0,
      366
    ]
  },
  "51": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster",
    "longName": "Snow Albedo",
    "longNamePlot": "Average Snow Albedo",
    "labelMapLegend": "Snow Albedo (%, for snow >= 10%)",
    "labelPlotYaxis": "Albedo (%)",
    "helpText": "Fresh, clean snow with a high albedo appears bright, while old or dirty snow tends to have a lower albedo and appears darker. The snow albedo measurement is a non-dimensional, unitless quantity that measures how well a surface reflects solar energy, ranging from 0 to 1. A value of 0 means the surface is a perfect absorber, where all incoming energy is absorbed, while a value of 1 means the surface is a perfect reflector, where all incoming energy is reflected and none is absorbed. This quantity can also be expressed as a percent with a range from 0 to 100, with zero percent absorbing all incoming energy and 100 percent reflecting all energy.",
    "valuePrecision": 0,
    "colormapId": 1,
    "transparentZero": false,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "54": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Viewable Snow Cover Percent",
    "longNamePlot": "",
    "labelMapLegend": "Viewable Snow Cover Percent (%, for snow >= 10%)",
    "labelPlotYaxis": "Area (sq km)",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 6,
    "transparentZero": true,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "55": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Snow Cover Percent",
    "longNamePlot": "Total Snow Cover Area",
    "labelMapLegend": "Snow Cover Percent (%, for snow >= 10%)",
    "labelPlotYaxis": "Area (sq km)",
    "helpText": "The areal extent of snow-covered ground, expressed as the mathematical percent of a region covered with snow. In the context of this website, the region refers to an Earth observing satellite's smallest measurement area. We use data from the Moderate Resolution Imaging Spectroradiometer at ~463m spatial resolution. Note that the Earth's surface is sometimes covered by clouds.",
    "valuePrecision": 0,
    "colormapId": 6,
    "transparentZero": true,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "59": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "STC-SCAGDRFS",
    "layerType": "raster_notprocessed",
    "longName": "Not Processed",
    "longNamePlot": "",
    "labelMapLegend": "",
    "labelPlotYaxis": "",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 0,
    "transparentZero": false,
    "source": "MODIS (Terra) STC-SCAGDRFS",
    "noDataValue": 255,
    "valueRange": [
      0,
      1
    ]
  },
  "60": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster_notprocessed",
    "longName": "Not Processed",
    "longNamePlot": "",
    "labelMapLegend": "",
    "labelPlotYaxis": "",
    "helpText": "",
    "valuePrecision": 0,
    "colormapId": 0,
    "transparentZero": false,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 255,
    "valueRange": [
      0,
      1
    ]
  },
  "61": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Snow Cover Duration",
    "longNamePlot": "Average Snow Cover Duration",
    "labelMapLegend": "Snow Cover Duration (days, >= 14)",
    "labelPlotYaxis": "Snow Cover Duration (days)",
    "helpText": "The number of days a region has been covered with snow as identified with snow cover percent greater than a snow cover percent threshold since a starting time. Our data uses 15% as the snow percent threshold and October 1 as the starting date for these maps.",
    "valuePrecision": 3,
    "colormapId": 5,
    "transparentZero": true,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 65535,
    "valueRange": [
      0,
      366
    ]
  },
  "62": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Snow Albedo",
    "longNamePlot": "Average Snow Albedo",
    "labelMapLegend": "Snow Albedo (%, for snow >= 10%)",
    "labelPlotYaxis": "Albedo (%)",
    "helpText": "Fresh, clean snow with a high albedo appears bright, while old or dirty snow tends to have a lower albedo and appears darker. The snow albedo measurement is a non-dimensional, unitless quantity that measures how well a surface reflects solar energy, ranging from 0 to 1. A value of 0 means the surface is a perfect absorber, where all incoming energy is absorbed, while a value of 1 means the surface is a perfect reflector, where all incoming energy is reflected and none is absorbed. This quantity can also be expressed as a percent with a range from 0 to 100, with zero percent absorbing all incoming energy and 100 percent reflecting all energy.",
    "valuePrecision": 0,
    "colormapId": 1,
    "transparentZero": false,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 255,
    "valueRange": [
      0,
      100
    ]
  },
  "63": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Snow Radiative Forcing",
    "longNamePlot": "Average Snow Radiative Forcing",
    "labelMapLegend": "Snow Radiative Forcing (W/m^2, for snow >= 10%)",
    "labelPlotYaxis": "Average Snow Radiative Forcing (W/m^2)",
    "helpText": "When snow impurities such as dust or soot fall on snow, its surface darkens and absorbs more solar energy. Snow radiative forcing is a measure of the additional absorption of solar radiation from light absorbing particles (LAP) such as dust or soot. Units of measure are Watts per square meter (W/m2) and values can range from 0 to 500 W/m2. This maximum value depends on incoming solar radiation (elevation, direct sun vs shaded) and the amount of dust or soot. A value of 0 means no additional radiation is being absorbed. A value of 500 means nearly all of the solar energy is absorbed (depends on latitude, elevation, clouds). Radiative forcing is calculated by the difference between the net (downward minus upward) radiative fluxes (irradiance) with and without LAP.",
    "valuePrecision": 0,
    "colormapId": 4,
    "transparentZero": false,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 65535,
    "valueRange": [
      0,
      500
    ]
  },
  "77": {
    "sensor": "MODIS",
    "platform": "Terra",
    "algorithm": "SPIRES",
    "layerType": "raster",
    "longName": "Days Without Observation",
    "longNamePlot": "",
    "labelMapLegend": "Days since Last Observation (days)",
    "labelPlotYaxis": "",
    "helpText": "The number of days covering the pixel/day which don't have observations. 0 if the day has observation, > 0 if day without observation. E.g. 10 if the day belongs to a series of 10 days without observation by the sensor.",
    "valuePrecision": 0,
    "colormapId": 8,
    "transparentZero": true,
    "source": "MODIS (Terra) SPIRES",
    "noDataValue": 65535,
    "valueRange": [
      0,
      50
    ]
  }
}