{
  "schemaVersion": 1,
  "built": "2026-10-07",
  "placeId": "soho",
  "frame": {
    "width": 935.0,
    "height": 1000.0,
    "metresPerUnit": 1.481911,
    "crs": "EPSG:27700",
    "bngBounds": [
      528870.9731619344,
      180306.0998558951,
      530256.5303342249,
      181788.010477249
    ],
    "origin": {
      "easting": 528870.9731619344,
      "northing": 181788.010477249
    },
    "yAxis": "south"
  },
  "overview": {
    "bbox": [
      -0.38,
      51.36,
      0.36,
      51.78
    ],
    "crs": "EPSG:4326",
    "northUp": true
  },
  "assets": [
    {
      "file": "climate-london-ndvi-2025-08-25.webp",
      "href": "/media/city-twin/climate-london-ndvi-2025-08-25.webp",
      "product": "ndvi",
      "region": "london",
      "width": 2048,
      "height": 1870,
      "bytes": 1336652,
      "sha256": "94948fdc6244be343e6cae3d3374e9dbea176f8e3b7f142846e4215ca4cbaa11",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 10,
      "productGridM": 10,
      "displayPixelM": [
        25.052248689253613,
        24.98869004745336
      ],
      "bbox": [
        -0.38,
        51.36,
        0.36,
        51.78
      ],
      "crs": "EPSG:4326",
      "northUp": true,
      "transform": [
        0.000361328125,
        0,
        -0.38,
        0,
        -0.00022459893048128434,
        51.78
      ],
      "resampling": "nearest",
      "preview": false,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 0.9999744109291444,
        "validSamples": 3829662,
        "totalSamples": 3829760,
        "values": {
          "minimum": -0.6538889408111572,
          "p05": 0.0923076942563057,
          "median": 0.42981475591659546,
          "p95": 0.8386132717132568,
          "maximum": 0.9290465712547302
        },
        "masterSha256": "84b27023b8cd3e49bce9391985e5abfb18d4dadf64635d1de119ec8da5be3cd3"
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 3829662,
        "totalSamples": 3829760,
        "validFraction": 0.9999744109291444
      },
      "palette": {
        "range": [
          -0.2,
          0.8
        ],
        "colours": [
          "476a7c",
          "d1cec2",
          "bbc69b",
          "73946a",
          "345c4b"
        ],
        "unit": "unitless",
        "legend": "NDVI: near-infrared/red contrast, not canopy height or cooling effect"
      }
    },
    {
      "file": "climate-london-ndvi-2025-08-25-preview.webp",
      "href": "/media/city-twin/climate-london-ndvi-2025-08-25-preview.webp",
      "product": "ndvi",
      "region": "london",
      "width": 512,
      "height": 468,
      "bytes": 111610,
      "sha256": "ae6d70235d589842b6bc567d467f803a70adb34045d6c28f66348890df3d3f2f",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 10,
      "productGridM": 10,
      "displayPixelM": [
        100.20899475701445,
        99.84797091610638
      ],
      "bbox": [
        -0.38,
        51.36,
        0.36,
        51.78
      ],
      "crs": "EPSG:4326",
      "northUp": true,
      "transform": [
        0.0014453125,
        0,
        -0.38,
        0,
        -0.0008974358974359011,
        51.78
      ],
      "resampling": "nearest",
      "preview": true,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 0.9999744109291444,
        "validSamples": 3829662,
        "totalSamples": 3829760,
        "values": {
          "minimum": -0.6538889408111572,
          "p05": 0.0923076942563057,
          "median": 0.42981475591659546,
          "p95": 0.8386132717132568,
          "maximum": 0.9290465712547302
        },
        "masterSha256": "84b27023b8cd3e49bce9391985e5abfb18d4dadf64635d1de119ec8da5be3cd3"
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 239610,
        "totalSamples": 239616,
        "validFraction": 0.9999749599358975
      },
      "palette": {
        "range": [
          -0.2,
          0.8
        ],
        "colours": [
          "476a7c",
          "d1cec2",
          "bbc69b",
          "73946a",
          "345c4b"
        ],
        "unit": "unitless",
        "legend": "NDVI: near-infrared/red contrast, not canopy height or cooling effect"
      }
    },
    {
      "file": "climate-soho-ndvi-2025-08-25.webp",
      "href": "/media/city-twin/climate-soho-ndvi-2025-08-25.webp",
      "product": "ndvi",
      "region": "soho",
      "width": 139,
      "height": 149,
      "bytes": 4802,
      "sha256": "77646011037eaddd00b9513dc05d57e60ba4fdd2eefddfbaab594daa8939d653",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 10,
      "productGridM": 10,
      "displayPixelM": [
        9.96803721072313,
        9.945708868146918
      ],
      "bbox": [
        528870.9731619344,
        180306.0998558951,
        530256.5303342249,
        181788.010477249
      ],
      "crs": "EPSG:27700",
      "northUp": true,
      "transform": [
        9.96803721072313,
        0,
        528870.9731619344,
        0,
        -9.945708868146918,
        181788.010477249
      ],
      "resampling": "nearest",
      "preview": false,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 1.0,
        "validSamples": 20711,
        "totalSamples": 20711,
        "values": {
          "minimum": -0.9169491529464722,
          "p05": -0.0018627633107826114,
          "median": 0.08446298539638519,
          "p95": 0.5229848027229309,
          "maximum": 0.8745945692062378
        },
        "masterSha256": "1bd001e219ac7bb45d4f061905ac60e73cf052ff37f585b3859772af8c9b0cae"
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 20711,
        "totalSamples": 20711,
        "validFraction": 1.0
      },
      "palette": {
        "range": [
          -0.2,
          0.8
        ],
        "colours": [
          "476a7c",
          "d1cec2",
          "bbc69b",
          "73946a",
          "345c4b"
        ],
        "unit": "unitless",
        "legend": "NDVI: near-infrared/red contrast, not canopy height or cooling effect"
      }
    },
    {
      "file": "climate-london-lst-cividis-2025-07-10.webp",
      "href": "/media/city-twin/climate-london-lst-cividis-2025-07-10.webp",
      "product": "lst",
      "region": "london",
      "width": 1536,
      "height": 1400,
      "bytes": 338228,
      "sha256": "b847f7e7597755bef16d199459c2ba4e30f0e1f4a6d9c3380b4593e364e5c86a",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 100,
      "productGridM": 30,
      "displayPixelM": [
        33.40299825233815,
        33.37775027766985
      ],
      "bbox": [
        -0.38,
        51.36,
        0.36,
        51.78
      ],
      "crs": "EPSG:4326",
      "northUp": true,
      "transform": [
        0.00048177083333333335,
        0,
        -0.38,
        0,
        -0.0003000000000000012,
        51.78
      ],
      "resampling": "nearest",
      "preview": false,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 0.9688955543154761,
        "validSamples": 2083513,
        "totalSamples": 2150400,
        "values": {
          "minimum": 20.589475631713867,
          "p05": 32.22441482543945,
          "median": 39.689369201660156,
          "p95": 44.3549690246582,
          "maximum": 57.40155029296875
        },
        "masterSha256": "3f80048d37621a48572a504262833b51bbe20bba0d7de5a5cbefa6fe599a662a",
        "uncertainty_k": {
          "minimum": 2.049999952316284,
          "p05": 2.1700000762939453,
          "median": 2.390000104904175,
          "p95": 4.010000228881836,
          "maximum": 7.639999866485596
        },
        "emissivity": {
          "minimum": 0.8087999820709229,
          "p05": 0.9639999866485596,
          "median": 0.9728000164031982,
          "p95": 0.9843999743461609,
          "maximum": 0.9994000196456909
        },
        "emissivity_sd": {
          "minimum": 0.0,
          "p05": 0.0031999999191612005,
          "median": 0.007199999876320362,
          "p95": 0.015699999406933784,
          "maximum": 0.08470000326633453
        }
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 2083513,
        "totalSamples": 2150400,
        "validFraction": 0.9688955543154761
      },
      "palette": {
        "range": [
          32,
          46
        ],
        "colours": [
          "00224e",
          "0c3470",
          "35456c",
          "4f576c",
          "666970",
          "7d7c78",
          "948e77",
          "ada272",
          "c8b866",
          "e5cf52",
          "fee838"
        ],
        "unit": "degrees Celsius",
        "legend": "Surface temperature at one overpass; native thermal support 100 m",
        "name": "cividis",
        "slug": "cividis"
      }
    },
    {
      "file": "climate-london-lst-cividis-2025-07-10-preview.webp",
      "href": "/media/city-twin/climate-london-lst-cividis-2025-07-10-preview.webp",
      "product": "lst",
      "region": "london",
      "width": 384,
      "height": 350,
      "bytes": 57764,
      "sha256": "08339a633378ac19b08f1714d30690cf5f37db0a1f641a21582facfdbbd91919",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 100,
      "productGridM": 30,
      "displayPixelM": [
        133.6119930093526,
        133.5110011106794
      ],
      "bbox": [
        -0.38,
        51.36,
        0.36,
        51.78
      ],
      "crs": "EPSG:4326",
      "northUp": true,
      "transform": [
        0.0019270833333333334,
        0,
        -0.38,
        0,
        -0.0012000000000000049,
        51.78
      ],
      "resampling": "nearest",
      "preview": true,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 0.9688955543154761,
        "validSamples": 2083513,
        "totalSamples": 2150400,
        "values": {
          "minimum": 20.589475631713867,
          "p05": 32.22441482543945,
          "median": 39.689369201660156,
          "p95": 44.3549690246582,
          "maximum": 57.40155029296875
        },
        "masterSha256": "3f80048d37621a48572a504262833b51bbe20bba0d7de5a5cbefa6fe599a662a",
        "uncertainty_k": {
          "minimum": 2.049999952316284,
          "p05": 2.1700000762939453,
          "median": 2.390000104904175,
          "p95": 4.010000228881836,
          "maximum": 7.639999866485596
        },
        "emissivity": {
          "minimum": 0.8087999820709229,
          "p05": 0.9639999866485596,
          "median": 0.9728000164031982,
          "p95": 0.9843999743461609,
          "maximum": 0.9994000196456909
        },
        "emissivity_sd": {
          "minimum": 0.0,
          "p05": 0.0031999999191612005,
          "median": 0.007199999876320362,
          "p95": 0.015699999406933784,
          "maximum": 0.08470000326633453
        }
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 130227,
        "totalSamples": 134400,
        "validFraction": 0.9689508928571429
      },
      "palette": {
        "range": [
          32,
          46
        ],
        "colours": [
          "00224e",
          "0c3470",
          "35456c",
          "4f576c",
          "666970",
          "7d7c78",
          "948e77",
          "ada272",
          "c8b866",
          "e5cf52",
          "fee838"
        ],
        "unit": "degrees Celsius",
        "legend": "Surface temperature at one overpass; native thermal support 100 m",
        "name": "cividis",
        "slug": "cividis"
      }
    },
    {
      "file": "climate-soho-lst-cividis-2025-07-10.webp",
      "href": "/media/city-twin/climate-soho-lst-cividis-2025-07-10.webp",
      "product": "lst",
      "region": "soho",
      "width": 47,
      "height": 50,
      "bytes": 422,
      "sha256": "b38f7093401ed5228f6d8e75ebe3e5a44589ecdfe956e8358e69c2acd7c966eb",
      "format": "WebP",
      "evidence": "derived",
      "purpose": "Colour display, not numerical analysis",
      "nativePixelM": 100,
      "productGridM": 30,
      "displayPixelM": [
        29.47993983596841,
        29.638212427077814
      ],
      "bbox": [
        528870.9731619344,
        180306.0998558951,
        530256.5303342249,
        181788.010477249
      ],
      "crs": "EPSG:27700",
      "northUp": true,
      "transform": [
        29.47993983596841,
        0,
        528870.9731619344,
        0,
        -29.638212427077814,
        181788.010477249
      ],
      "resampling": "nearest",
      "preview": false,
      "alpha": "255 for source-supported QA-valid samples, 0 for missing or rejected samples; verified after WebP decode",
      "statistics": {
        "validFraction": 1.0,
        "validSamples": 2350,
        "totalSamples": 2350,
        "values": {
          "minimum": 38.32899856567383,
          "p05": 40.33879470825195,
          "median": 42.30073928833008,
          "p95": 43.81834030151367,
          "maximum": 45.8281364440918
        },
        "masterSha256": "b8103438e3824376bbf71ceacf6d4b1f86027f4185791d97b752a41397f5dfa2",
        "uncertainty_k": {
          "minimum": 2.740000009536743,
          "p05": 2.924499988555908,
          "median": 3.2300000190734863,
          "p95": 3.5899999141693115,
          "maximum": 3.9800000190734863
        },
        "emissivity": {
          "minimum": 0.9589999914169312,
          "p05": 0.9629999995231628,
          "median": 0.9699000120162964,
          "p95": 0.9753000140190125,
          "maximum": 0.9853000044822693
        },
        "emissivity_sd": {
          "minimum": 0.0015999999595806003,
          "p05": 0.0033450000919401646,
          "median": 0.010499999858438969,
          "p95": 0.026900000870227814,
          "maximum": 0.0357000008225441
        }
      },
      "statisticsScope": "Full numerical export grid, including for its preview",
      "maskStatistics": {
        "validSamples": 2350,
        "totalSamples": 2350,
        "validFraction": 1.0
      },
      "palette": {
        "range": [
          32,
          46
        ],
        "colours": [
          "00224e",
          "0c3470",
          "35456c",
          "4f576c",
          "666970",
          "7d7c78",
          "948e77",
          "ada272",
          "c8b866",
          "e5cf52",
          "fee838"
        ],
        "unit": "degrees Celsius",
        "legend": "Surface temperature at one overpass; native thermal support 100 m",
        "name": "cividis",
        "slug": "cividis"
      }
    }
  ],
  "ndvi": {
    "source": "https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED",
    "collection": "COPERNICUS/S2_SR_HARMONIZED",
    "acquisition": "2025-08-25",
    "scenes": [
      {
        "CLOUDY_PIXEL_PERCENTAGE": 0.021966,
        "MGRS_TILE": "30UXC",
        "PRODUCT_ID": "S2C_MSIL2A_20250825T105641_N0511_R094_T30UXC_20250825T154713",
        "SPACECRAFT_NAME": "Sentinel-2C",
        "system:index": "20250825T105641_20250825T110120_T30UXC",
        "system:time_start": 1756120030723
      },
      {
        "CLOUDY_PIXEL_PERCENTAGE": 0.160072,
        "MGRS_TILE": "30UYC",
        "PRODUCT_ID": "S2C_MSIL2A_20250825T105641_N0511_R094_T30UYC_20250825T154713",
        "SPACECRAFT_NAME": "Sentinel-2C",
        "system:index": "20250825T105641_20250825T110120_T30UYC",
        "system:time_start": 1756120027333
      }
    ],
    "evidence": "derived",
    "license": "Copernicus Sentinel free, full and open",
    "attribution": "Contains modified Copernicus Sentinel data 2025",
    "licenceUrl": "https://sentinels.copernicus.eu/documents/247904/690755/Sentinel_Data_Legal_Notice",
    "bands": [
      "B8",
      "B4"
    ],
    "reflectanceScale": 0.0001,
    "nativePixelM": 10,
    "method": "NDVI = (near infrared B8 - red B4) / (B8 + B4), from harmonised Level-2A surface reflectance. Pixels with negative reflectance or non-positive denominator are rejected. Same-date tiles mosaicked in sorted index order; no cross-date composite or gap filling.",
    "quality": {
      "SCL_reject_classes": [
        0,
        1,
        3,
        8,
        9,
        10,
        11
      ],
      "SCL_nativePixelM": 20
    },
    "limits": "A dated reflectance index, not a vegetation species, canopy-height, carbon or cooling-effect measurement. SCL is a classification-based mask, not field validation. NDVI and temperature acquisitions are different dates."
  },
  "lst": {
    "source": "https://www.usgs.gov/landsat-missions/landsat-collection-2-surface-temperature",
    "catalogue": "https://developers.google.com/earth-engine/datasets/catalog/LANDSAT_LC09_C02_T1_L2",
    "collectionsSearched": [
      "LANDSAT/LC08/C02/T1_L2",
      "LANDSAT/LC09/C02/T1_L2"
    ],
    "scene": {
      "CLOUD_COVER": 5.94,
      "DATE_ACQUIRED": "2025-07-10",
      "LANDSAT_PRODUCT_ID": "LC09_L2SP_201024_20250710_20250711_02_T1",
      "SCENE_CENTER_TIME": "10:52:06.7850330Z",
      "SPACECRAFT_ID": "LANDSAT_9",
      "WRS_PATH": 201,
      "WRS_ROW": 24,
      "local_valid_london": 0.9698808111423002,
      "local_valid_soho": 1,
      "system:index": "2_LC09_201024_20250710",
      "system:time_start": 1752144726785
    },
    "acquisitionUtc": "2025-07-10T10:52:06.785000+00:00",
    "evidence": "derived",
    "license": "Public domain",
    "attribution": "Landsat Collection 2 Level-2 image courtesy of the U.S. Geological Survey.",
    "band": "ST_B10",
    "nativeThermalPixelM": 100,
    "deliveredProductGridM": 30,
    "scale": 0.00341802,
    "offsetKelvin": 149,
    "kelvinToCelsius": -273.15,
    "quality": {
      "QA_PIXEL_reject_bits": {
        "fill": 0,
        "dilated_cloud": 1,
        "cirrus": 2,
        "cloud": 3,
        "cloud_shadow": 4,
        "snow": 5
      },
      "QA_RADSAT_required_value": 0,
      "rejectZeroST": true,
      "uncertaintyCutoff": null,
      "note": "Uncertainty is retained and reported, not hidden by an arbitrary acceptance cutoff."
    },
    "ancillary": {
      "ST_QA": {
        "scale": 0.01,
        "unit": "kelvin",
        "meaning": "Provider surface-temperature uncertainty"
      },
      "ST_EMIS": {
        "scale": 0.0001,
        "meaning": "Provider emissivity, based on ASTER GED with its vegetation adjustment"
      },
      "ST_EMSD": {
        "scale": 0.0001,
        "meaning": "Provider emissivity standard deviation"
      }
    },
    "noEmissivityRecorrection": true,
    "search": {
      "bbox": [
        -0.38,
        51.36,
        0.36,
        51.78
      ],
      "start": "2025-06-01",
      "endExclusive": "2025-09-01",
      "processingLevel": "L2SP",
      "maximumSceneCloudPercentExclusive": 80,
      "londonCoverageSampleM": 250,
      "sohoCoverageSampleM": 90
    },
    "selection": "Highest locally QA-valid fraction across London at a 250 m sampling grid; then Soho coverage; then acquisition date. Clear coverage is availability, not temperature accuracy.",
    "candidateCount": 16,
    "limits": "Surface temperature at one daytime overpass, not air temperature, pedestrian radiant exposure, UTCI, indoor temperature, building heat loss, EPC or forecast climate risk. The 30 m delivery grid does not create independent 30 m thermal observations. ASTER GED gaps remain missing; emissivity/atmospheric uncertainty and cloud-adjacent retrieval errors remain. USGS documents small-target blockiness and an emissivity vegetation-adjustment anomaly. No local field calibration, anomaly baseline, UHI magnitude or intervention effect is claimed.",
    "displayProfile": {
      "recoloured": "2026-10-16",
      "decision": "Owner, 16 October 2026: London's range, blue to yellow",
      "palette": {
        "name": "cividis",
        "stops": 11,
        "source": "Nunez, Anderton and Renslow 2018, doi:10.1371/journal.pone.0199239",
        "tableLicence": "UNVERIFIED (the 256-entry table is distributed with matplotlib); eleven sampled colours only",
        "maxCiede2000VsFullTable": 1.25,
        "meanCiede2000VsFullTable": 0.43,
        "lightnessLowToHigh": [
          13.8,
          91.3
        ],
        "lightnessMonotonic": true
      },
      "limits": [
        32,
        46
      ],
      "limitRule": "Whole-degree roundings of the 2nd and 98th percentiles of the QA-valid pixels inside the ONS Greater London region on this overpass. A display choice, not a threshold.",
      "greaterLondon": {
        "validPixels": 1402010,
        "p2": 31.6,
        "p98": 45.5,
        "clippedBelow": 0.026,
        "clippedAbove": 0.011,
        "regionSha256": "79a5e6539164de53b219228193b247d0b25c6fdd0c6c00cdf2ae5188fea8b485"
      },
      "comparison": "Colours are comparable within this page, not across dates: another overpass would need its own declared limits.",
      "noData": "Pixels without a valid observation (cloud, QA rejects) keep alpha 0 in the files; the stage draws them as a hatched underlay keyed 'No valid observation'."
    }
  },
  "retrieved": "2026-10-07",
  "display": {
    "missingData": "Transparent; source masks and QA rejects retained, no inpainting or extrapolation",
    "colourLimits": "Values outside palette bounds retain valid alpha and clip colour only; surface-temperature colours clip at 32 and 46 degrees Celsius and vegetation colours at -0.2 and 0.8; numerical masters are unchanged",
    "resampling": "Nearest sampling on explicit north-up grids, including both preview levels; no thermal sharpening",
    "compression": "WebP colour display only, lossless alpha verified byte-for-byte after decoding, numerical masters private. Chosen because lossy AVIF altered missing-data alpha and lossless AVIF was three times larger for this raster.",
    "sourceSeparation": "Satellite overpass dates, historical aerial and modelled physical building diagrams remain distinct evidence layers"
  },
  "methodLineage": "Reviewed ShapingCoolCities corrected Landsat Level-2 contract: scale ST_B10 once, reject QA_PIXEL bits 0\u20135 and QA_RADSAT nonzero, retain official uncertainty/emissivity ancillary bands. No legacy model-performance or intervention claims transferred."
}
