This sample shows how to add an instance of ImageryTileLayer that references a Cloud Optimized GeoTiff file to a Map. A Cloud Optimized GeoTiff (COG) file is a regular GeoTiff file that is hosted on a CORS enabled HTTPS server.
The COG file in this sample contains Landsat 8 satellite imagery taken over Bolivia on July 19, 2019. The COG takes advantage of all the capabilities of ImageryTileLayer, since it can be added by setting the url property of the ImageryTileLayer to point to the url of the COG file.
const url =
"https://ss6imagery.arcgisonline.com/imagery_sample/landsat8/Bolivia_LC08_L1TP_001069_20190719_MS.tiff";
const layer = new ImageryTileLayer({ url, bandIds: [3, 2, 1] });
The Landsat 8 satellite imagery consists of nine spectral bands. The sample allows users to change between common band combinations for the ImageryTileLayer by updating the bandIds property.
bandIdsSelect.addEventListener("calciteSelectChange", () => {
// Convert comma-separated IDs to numbers.
const bands = bandIdsSelect.value.split(",").map((id) => +id);
layer.bandIds = bands; // Update Landsat 8 band ID combination.
});
Users can click on the ImageryTileLayer to calculate the NDVI value and create a spectral profile chart for the clicked location as shown in the code snippet below.
viewElement.addEventListener("arcgisViewClick", async ({ detail: { mapPoint } }) => {
// Show the chart and NDVI elements upon first interaction.
if (chartDiv.hidden) chartDiv.removeAttribute("hidden");
if (ndviDiv.hidden) ndviDiv.removeAttribute("hidden");
if (!clickImageSpan.hidden) clickImageSpan.hidden = true;
// Set clicked location on the map and show loading state.
pointGraphic.geometry = mapPoint;
handleLoadingUX();
// Get spectral values at the clicked location.
const results = await layer.identify(mapPoint);
if (!results.value) {
handleOutOfBounds();
return;
}
handleLoadingUX(false);
// Extract red and NIR bands, calculate NDVI, and display the value.
const { 3: redBand, 4: nearInfraredBand } = results.value;
const ndvi = (nearInfraredBand - redBand) / (nearInfraredBand + redBand);
ndviValueElement.innerText = ndvi.toFixed(3);
// Update and refresh the spectral chart with the new data.
spectralChart.data.datasets[0].data = results.value;
spectralChart.update();
});