/// <summary> /// Build the Builder Item which includes the function raster dataset and its footprint /// given the ItemURI. /// </summary> /// <param name="pItemURI">ItemURi to use to build the Builder Item.</param> /// <returns>The builder item.</returns> public IBuilderItem Build(IItemURI pItemURI) { try { // Create a new parser object and builder item. DiMapParser myDimParser = new DiMapParser(pItemURI.Key); IBuilderItem currItem = new BuilderItemClass(); // Set Category and URI currItem.Category = esriRasterCatalogItemCategory.esriRasterCatalogItemCategoryPrimary; currItem.URI = pItemURI; // Set FunctionRasterDataset IFunctionRasterDataset inputFrd = GetFRD(myDimParser, pItemURI); currItem.Dataset = inputFrd; // Set band information for the function dataset including names, wavelengths and stats if available. SetBandProperties((IDataset)inputFrd, myDimParser); // Set Footprint IGeoDataset geoDset = (IGeoDataset)inputFrd; // Set it to the current raster extent first. If the raster has no // spatial reference, the extents will be in pixel space. currItem.Footprint = (IGeometry)geoDset.Extent; // The get the footprint from the dim file is it exists. currItem.Footprint = GetFootprint(myDimParser); // Set Properties. These properties are used to fill the Auxiliary Fields // defined earlier and also key properties if the names are correct. IPropertySet propSet = currItem.Dataset.Properties; if (null == propSet) propSet = new PropertySetClass(); double sunAzimuth = Convert.ToDouble(myDimParser.SunAzimuth); double sunElevation = Convert.ToDouble(myDimParser.SunElevation); double sensorAzimuth = Convert.ToDouble(myDimParser.SensorAzimuth); double sensorElevation = 180 - Convert.ToDouble(myDimParser.IncidenceAngle); string acqDate = myDimParser.AcquisitionDate; string acqTime = myDimParser.AcquisitionTime; // Create a time object from the provided date and time. ITime acqDateTimeObj = new TimeClass(); acqDateTimeObj.SetFromTimeString(esriTimeStringFormat.esriTSFYearThruSubSecondWithDash, acqDate + " " + acqTime); // and obtain a DateTime object to set as value of the property. This ensures the // field displays the value correctly. DateTime acqDateTimeFieldVal = acqDateTimeObj.QueryOleTime(); propSet.SetProperty("AcquisitionDate", acqDateTimeFieldVal); propSet.SetProperty("SensorName", myDimParser.MetadataProfile); propSet.SetProperty("SunAzimuth", sunAzimuth); propSet.SetProperty("SunElevation", sunElevation); propSet.SetProperty("SatAzimuth", sensorAzimuth); propSet.SetProperty("SatElevation", sensorElevation); currItem.Dataset.Properties = propSet; return currItem; } catch (Exception exc) { throw exc; } }