Hi,<div>I am trying to write a program which is supposed to read geotif files, extract the values I need, then export them in a homemade format.</div><div>As my geotif files are on several different UTM zones, I have to change projections so that all the files I open have the same projection as the "main tile" (central tile).</div><div><br></div><div>So i'm using WarpRegionToBuffer from GDALWarpOperation class with a null hDstDS, which is supposed to work... but my buffer remains filed with the default values I assigned to him (-999), even though WarpRegionToBuffer returns CE_None...</div><div><br></div><div>here is my code:</div><div><br></div><div><div>float* MyTile::extractdomain(float rxso, float ryso, float rxne, float ryne, GDALDataset *maintile)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int immai = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int jmmai = 0;<span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALDatasetH &nbsp;hSrcDS, hDstDS;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALAllRegister();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>hSrcDS = GDALOpen( this-&gt;filename.toLatin1().data(), GA_ReadOnly );</div><div>//<span class="Apple-tab-span" style="white-space:pre">        </span>hDstDS = GDALOpen( "out.tif", GA_Update );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>hDstDS = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALWarpOptions *psWarpOptions = GDALCreateWarpOptions();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;hSrcDS = hSrcDS;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;hDstDS = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;nBandCount = 1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;panSrcBands =&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>(int *) CPLMalloc(sizeof(int) * psWarpOptions-&gt;nBandCount );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;panSrcBands[0] = 1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;panDstBands =&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>(int *) CPLMalloc(sizeof(int) * psWarpOptions-&gt;nBandCount );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;panDstBands[0] = 1;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;pfnProgress = GDALTermProgress; &nbsp;&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;eWorkingDataType = GDT_CFloat32;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;pTransformerArg =&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>GDALCreateGenImgProjTransformer( hSrcDS,&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>GDALGetProjectionRef(hSrcDS),&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>hDstDS,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>maintile-&gt;GetProjectionRef(),&nbsp;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>FALSE, 0.0, 1 );</div><div>//maintile is my central tile, i want to apply its projection to all the other tiles i'm concatenating</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>psWarpOptions-&gt;pfnTransformer = GDALGenImgProjTransform;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALWarpOperation oOperation;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>oOperation.Initialize( psWarpOptions );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (rxso &lt; XSO)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>rxso = XSO;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (ryso &lt; YSO)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ryso = YSO;<span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (rxne &gt; XNE)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>rxne = XNE;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (ryne &gt; YNE)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ryne = YNE;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>immai = ABS((rxne - rxso)) / dx;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>jmmai = ABS((ryne - ryso)) / dy;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>try</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>this-&gt;ch2d = new float[immai * jmmai];</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (ch2d)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>for (int i = 0 ; i &lt; immai * jmmai ; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>ch2d[i] = -999;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>catch(...)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>//could not allocate memory</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return (0);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int<span class="Apple-tab-span" style="white-space:pre">                </span>nXOff=int((rxso-dx/2.-rxso)/dx);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int &nbsp; &nbsp; nYOff=int((YNE-(ryne+(-dy)/2.))/(dy));</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int &nbsp; &nbsp; nXSize=((rxne-rxso+dx)/dx)+1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int &nbsp; &nbsp; nYSize=((ryne-ryso+(-dy))/(dy))+1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int xs;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int ys;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> double adfGeoTransform[6];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALSuggestedWarpOutput(hSrcDS, psWarpOptions-&gt;pfnTransformer, psWarpOptions-&gt;pTransformerArg, adfGeoTransform, &amp;xs, &amp;ys);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int error = <span class="Apple-tab-span" style="white-space:pre">        </span>oOperation.WarpRegionToBuffer(0, 0, nXSize, nYSize, ch2d,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>GDT_CFloat32, nXOff, nYOff, nXSize, nYSize);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (error == CE_None)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>printf("okcool\n");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>else</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>printf("okpascool\n");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int size = sizeof(float);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>for (int i = 0 ; i &lt; immai * jmmai ; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if (ch2d[i] != -999)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>//small test to see if I have != values from default...</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>printf("roflflflfl");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALClose(hSrcDS);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALClose(hDstDS);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALDestroyGenImgProjTransformer( psWarpOptions-&gt;pTransformerArg );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>GDALDestroyWarpOptions( psWarpOptions );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return (this-&gt;ch2d);</div><div>}</div></div><div><br></div><div><br></div><div>By the way, I noticed a floating exception in GDALWarpOperation::WarpRegionToBuffer() if you don't set a value to your GDALWarpOptions&nbsp;eWorkingDataType attribute, since nWordSize will be null and the integer overflow test will divide by zero : "nSrcXSize * nSrcYSize &gt; INT_MAX / (nWordSize * psOptions-&gt;nBandCount)"</div><div><br></div><div><br></div><div>Any hint / help will be really appreciated!</div><div>Thanks,</div><div>--</div><div>Matthieu</div><div><br></div><div><br></div><div><br></div><div><br></div>