[gdal-dev] Problem with GDALWarp

user gdal userofgdal at gmail.com
Mon Aug 31 23:12:22 PDT 2015


Dear Dr. Brad/all, Thanks for your kind and prompt reply. Below are my
answers/clarifications. It may also be said that the program stops
execution just after the 'operation->Initialize(WO)' step. Can someone help
me solve this problem.

On Wed, 19 Aug 2015 04:01:32 PM user gdal wrote:

Dear friends,
I have to programmatically clip (using Visual C++) with GDALWarp. I
proceeded like this:

GDALDataset *outimg;

outimg=driver->Create(filename, NewCol, NewRow, Band, DataType, NULL);

GDALWarpOptions *WO=GDALCreateWarpOptions( );

if(WO)
{
  WO->hSrcDS=inimg; WO->nBandCount=Band;

What is inimg?

Ans. The bigger input image from which I want to draw subset (i.e., clip)
with the help of a vector layer myshp. It' (inimg) is of type GDALDataset
*. In the declaration of variables, it would appear as GDALDataset *inimg
Also, in WO->hCutline (pl. see below), I am passing myshp (which has
strictly polygon topology), of the type OGRLayer * (i.e., OGRLayer *myshp).
Of course the shape file and inimg have the same projection.


What (exactly) are you passing as filename?
Ans. char *filename (such as e:\sub\subimage.img. There are no other
characters in the 'filename')

Can you try posting an actual, compilable example?
Ans. There is a GUI from which I extract parameters which can give us a lot
of inconvenience. The program compiles without 'abusing' me. What I am
getting is a run time (or debug time) error.

----------------------------------------------------------------------------------------------------------------------------------------------
GDALDataset *inimg, *outimg;

outimg->(GDALDataset *) GDALOpen(filename, GA_Update);
/* I also tried, instead of the above, outimg=driver->Create(filename,
NewCol, NewRow, Band, DataType, NULL); NewCol and NewRow, have values of
the range 30 each */

GDALWarpOptions *WO=GDALCreateWarpOptions( );

if(WO)
{
  WO->hSrcDS=inimg; WO->nBandCount=Band;

  // In a sample image I wish to use, Band =3, checked

  WO->hDstDS=(GDALDatasetH)(outimg); WO->hCutline=myshp;

  WO->panSrcBands=(int *) CPLMalloc(sizeof(int)*Band);
WO->panSrcBands[0]=Band;
  WO->panDstBands=(int *) CPLMalloc(sizeof(int)*Band);
WO->panDstBands[0]=Band;

  WO->pfnProgress=GDALTermProgress;

  GDALWarpOperation *operation=new GDALWarpOperation;

  if(operation)
  {
    operation->Initialize(WO);  // the speed breaker
    operation->ChunkAndWarpImage(0, 0, NewCol, NewRow);

    GDALDestroyWarpOptions(WO); WO=NULL; delete operation; operation=NULL;

   }

   GDALClose((GDALDatasetH) outimg); outimg=NULL;

  }

----------------------------------------------------------------------------------------------------------------------------------------------
Does the tutorial (just by itself, exactly as written) work on your machine?
Ans. To be honest I haven't checked. I, however, have gone through the
tutorial and after convincing myself that I have understood what to do, I
wrote the program.

With many thanks,

Yours sincerely,
 B. Ramesh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20150901/5b286aa2/attachment.html>


More information about the gdal-dev mailing list