Build pyramids
BuildPyramids.cpp
// Copyright 2010 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 

 
 
#include "BuildPyramids.h"

int main(int argc, char** argv)
{
  cout << "BuildPyramidsRasterDataset - " 
       << "Environmental Systems Research Institute" << endl << endl;
  
  if (argc != 2)
  {
    cout << "Usage: BuildPyramidsRasterDataset [input raster]" << endl;

    AoExit(0);
  }

  char* input = argv[1];
  
  if (!InitializeApp())
  {
    AoExit(0);
  }

  HRESULT hr = BuildPyramids(input);
  if (FAILED(hr))
    cerr << "Building pyramids failed." << endl;

  ShutdownApp();

  AoExit(0);
}

HRESULT BuildPyramids(char* input)
{
  // data location 
  CComBSTR dataPath;
  CComBSTR dataFile;

  HRESULT hr = GetParentDirFromFullPath(input, &dataPath);
  if (FAILED(hr) || dataPath.Length() <= 0)
  {
    cerr << "Invalid data path." << endl;
    return E_FAIL;
  }
  hr = GetFileFromFullPath(input, &dataFile);
  if (FAILED(hr) || dataFile.Length() <= 0)
  {
    cerr << "Invalid data file." << endl;
    return E_FAIL;
  }

  // Get the raster workspace through the workspace factory.
  IWorkspaceFactoryPtr ipRasWkspFac(CLSID_RasterWorkspaceFactory);
  IWorkspacePtr ipWksp;
  hr = ipRasWkspFac->OpenFromFile(dataPath, 0, &ipWksp);
  if (FAILED(hr) || ipWksp == 0)
  {
    cout << "Could not open workspace." << endl;
    return hr;
  }

  IRasterDatasetPtr ipRasDataset;
  hr = ((IRasterWorkspacePtr) ipWksp)->OpenRasterDataset(dataFile, &ipRasDataset);
  if (FAILED(hr) || ipRasDataset == 0)
  {
    cout << "Couldn't open dataset." << endl;
    return hr;
  }
  // If there are not already pyramids, create them
  IRasterPyramidPtr ipRasPyr(ipRasDataset);  
  short pyrPresent;
  ipRasPyr->get_Present(&pyrPresent);
  if (!pyrPresent)
  {
    cerr << "... working ..." << endl;
    ipRasPyr->Create();
    wcerr << L"Done creating pyramids on " << (BSTR) dataFile << endl;
  }
  else
  {
    wcerr << L"Pyramids already exist for " << (BSTR) dataFile << endl;
  }
  return S_OK;
}