} // end SelectedDateChanged // Initialize WMTS data private async void InitializeWMTS() { String str; WmtsService wmtsService; Uri wmtsServiceURI; // Create the WMTS Service Load data from the URI WMTS_CAP_URL = "https://gibs.earthdata.nasa.gov/wmts/" + wmsUriStartup.EPSG + "/" + wmsUriStartup.latency + "/1.0.0/WMTSCapabilities.xml"; wmtsServiceURI = new Uri(WMTS_CAP_URL); // Define an instance of the service wmtsService = new WmtsService(wmtsServiceURI); // If service can load, initialize the app try { if (aoiWin == null) aoiWin = new AOIWindow(); // Load the WMS Service. await wmtsService.LoadAsync(); // Get the service info (metadata) from the service. wmts.serviceInfo = wmtsService.ServiceInfo; // Get the WMTS tile information wmts.tileSets = new List<WMTS.TileSetVariables>(); for (int i = 0; i < selectedLayers.Count; i++) { wmts.tileSets.Add(new WMTS.TileSetVariables()); wmts.tileSets[i].tileSetTitle = wmts.serviceInfo.TileMatrixSets[i].Id; wmts.tileSets[i].zoomLvls = wmts.serviceInfo.TileMatrixSets[i].TileMatrices.Count; for (int j = 0; j < wmts.serviceInfo.TileMatrixSets[i].TileMatrices.Count; j++) { wmts.tileSets[i].resTypes.Add(new WMTS.ResType()); wmts.tileSets[i].resTypes[j].id = wmts.serviceInfo.TileMatrixSets[i].TileMatrices[j].Id; wmts.tileSets[i].resTypes[j].scaleDenom = wmts.serviceInfo.TileMatrixSets[i].TileMatrices[j].ScaleDenominator; } } // Obtain the read only list of WMTS layers info objects // for selected layers wmts.selectedLayers = new List<WmtsLayerInfo>(); foreach (WmsLayerInfo wmsLayerInfo in selectedLayers) { str = wmsLayerInfo.Title; foreach (WmtsLayerInfo wmtsLayerInfo in wmts.serviceInfo.LayerInfos) { // Got a layer - save info about this layer if (str == wmtsLayerInfo.Title) { wmts.selectedLayers.Add(wmtsLayerInfo); break; } } } // Set up tile matrix information for selected tiles wmts.layerTileSets = new List<WMTS.TileSetVariables>(); for (int i = 0; i < wmts.selectedLayers.Count; i++) { wmts.layerTileSets.Add(new WMTS.TileSetVariables()); wmts.layerTileSets[i].zoomLvls = wmts.selectedLayers[i].TileMatrixSets[0].TileMatrices.Count; wmts.layerTileSets[i].tileSetTitle = wmts.selectedLayers[i].TileMatrixSets[0].Id; wmts.layerTileSets[i].layerTitle = wmts.selectedLayers[i].Title; wmts.layerTileSets[i].layerName = wmts.selectedLayers[i].Id; wmts.layerTileSets[i].tileWidth = TILE_WIDTH; wmts.layerTileSets[i].tileHeight = TILE_HEIGHT; // get tile matrices info for (int j = 0; j < wmts.selectedLayers[i].TileMatrixSets[0].TileMatrices.Count; j++) { wmts.layerTileSets[i].resTypes.Add(new WMTS.ResType()); wmts.layerTileSets[i].resTypes[j].id = wmts.selectedLayers[i].TileMatrixSets[0].TileMatrices[j].Id; wmts.layerTileSets[i].resTypes[j].scaleDenom = wmts.selectedLayers[i].TileMatrixSets[0].TileMatrices[j].ScaleDenominator; wmts.layerTileSets[i].resTypes[j].resolution = wmts.layerTileSets[i].resTypes[j].scaleDenom / 397569610; wmts.layerTileSets[i].resTypes[j].matrixWidth = 2 ^ j; wmts.layerTileSets[i].resTypes[j].matrixHeight = 2 ^ j; } } // Set AOI window Titles aoiWin.panelVars.titleList = new List<string>(); foreach (WMTS.TileSetVariables tileSet in wmts.layerTileSets) { str = tileSet.layerTitle + "\n" + "Tile Set: " + tileSet.tileSetTitle + "\t" + "Zoom Levels: " + tileSet.zoomLvls; aoiWin.panelVars.titleList.Add(str); } aoiWin.ImageryTitle.ItemsSource = aoiWin.panelVars.titleList; aoiWin.ImageryTitle.SelectedIndex = 0; // Set the zoom level specific to image selected ResetZoomLevels(aoiWin.ImageryTitle.SelectedIndex, "Skipper"); } // end try catch (Exception e) { MessageBox.Show(e.ToString(), "WMTS SERVER LOAD ERROR"); } } // end InitializeWMTS