<font face="courier new,monospace">Thanks Even, I appreciate it.<br><br>kss<br clear="all"></font><br>/**<br> *<br> * Kyle Shannon<br> * <a href="mailto:ksshannon@gmail.com" target="_blank">ksshannon@gmail.com</a><br> *<br>

 */<br><br><br>
<br><br><div class="gmail_quote">On Tue, May 10, 2011 at 15:41, Even Rouault <span dir="ltr">&lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Le mardi 10 mai 2011 17:39:52, Kyle Shannon a écrit :<br>
<div><div></div><div class="h5">&gt; Even, here is the basic flow of my task.  I am opening several subdatasets<br>
&gt; in a for loop, warping them and populating an internal data structure.<br>
&gt;<br>
&gt; #include &quot;gdal_priv.h&quot;<br>
&gt; #include &quot;gdalwarper.h&quot;<br>
&gt; #include &quot;cpl_conv.h&quot;<br>
&gt; #include &quot;cpl_port.h&quot;<br>
&gt; #include &lt;string&gt;<br>
&gt; #include &lt;vector&gt;<br>
&gt; int main()<br>
&gt; {<br>
&gt; GDALAllRegister();<br>
&gt; /*<br>
&gt;  * Variable names for the netcdf forecast file<br>
&gt;  */<br>
&gt;<br>
&gt; std::vector&lt;std::string&gt; varList;<br>
&gt; varList.push_back( &quot;Temperature_height_above_ground&quot; );<br>
&gt; varList.push_back( &quot;V-component_of_wind_height_above_ground&quot; );<br>
&gt; varList.push_back( &quot;U-component_of_wind_height_above_ground&quot; );<br>
&gt; varList.push_back( &quot;Total_cloud_cover&quot; );<br>
&gt;<br>
&gt; std::string temp;<br>
&gt; GDALDataset* srcDS;<br>
&gt; GDALDataset* wrpDS;<br>
&gt; GDALWarpOptions* psWarpOptions;<br>
&gt; std::string srcWkt, dstWkt;<br>
&gt; dstWkt = &quot;PROJCS[\&quot;WGS 84 / UTM zone 12N\&quot;,GEOGCS[\&quot;WGS<br>
&gt; 84\&quot;,DATUM[\&quot;WGS_1984\&quot;,SPHEROID[\&quot;WGS<br>
&gt; 84\&quot;,6378137,298.257223563]],PRIMEM[\&quot;Greenwich\&quot;,0],UNIT[\&quot;degree\&quot;,0.0174<br>
&gt; 532925199433]],UNIT[\&quot;metre\&quot;,1],PROJECTION[\&quot;Transverse_Mercator\&quot;],PARAME<br>
&gt; TER[\&quot;latitude_of_origin\&quot;,0],PARAMETER[\&quot;central_meridian\&quot;,-111],PARAMETE<br>
&gt; R[\&quot;scale_factor\&quot;,0.9996],PARAMETER[\&quot;false_easting\&quot;,500000],PARAMETER[\&quot;<br>
&gt; false_northing\&quot;,0]]&quot;;<br>
&gt;<br>
&gt; /*<br>
&gt;  * Loop over variable names and open sub datasets<br>
&gt;  */<br>
&gt;<br>
&gt; for( int i = 0;i &lt; varList.size();i++ ) {<br>
&gt;<br>
&gt;     temp = &quot;NETCDF:<a href="http://test.nc" target="_blank">test.nc</a>:&quot; + varList[i];<br>
&gt;<br>
&gt;     srcDS = (GDALDataset*)GDALOpenShared( temp.c_str(), GA_ReadOnly );<br>
&gt;<br>
&gt;     srcWkt = srcDS-&gt;GetProjectionRef();<br>
&gt;<br>
&gt;     /*<br>
&gt;      * Grab the first band to get the nodata value for the variable,<br>
&gt;      * assume all bands have the same ndv<br>
&gt;      */<br>
&gt;     GDALRasterBand *poBand = srcDS-&gt;GetRasterBand( 1 );<br>
&gt;     int pbSuccess;<br>
&gt;     double dfNoData = poBand-&gt;GetNoDataValue( &amp;pbSuccess );<br>
&gt;     psWarpOptions = GDALCreateWarpOptions();<br>
&gt;<br>
&gt;     int nBandCount = srcDS-&gt;GetRasterCount();<br>
&gt;     psWarpOptions-&gt;padfDstNoDataReal =<br>
&gt;         (double*) CPLMalloc( sizeof( double ) * nBandCount );<br>
&gt;     psWarpOptions-&gt;padfDstNoDataImag =<br>
&gt;         (double*) CPLMalloc( sizeof( double ) * nBandCount );<br>
&gt;     for( int b = 0;b &lt; srcDS-&gt;GetRasterCount();b++ ) {<br>
&gt;         psWarpOptions-&gt;padfDstNoDataReal[b] = dfNoData;<br>
&gt;         psWarpOptions-&gt;padfDstNoDataImag[b] = dfNoData;<br>
&gt;     }<br>
&gt;     if( pbSuccess == false )<br>
&gt;         dfNoData = -9999.0;<br>
&gt;     psWarpOptions-&gt;papszWarpOptions =<br>
&gt;     CSLSetNameValue( psWarpOptions-&gt;papszWarpOptions,<br>
&gt;                      &quot;INIT_DEST&quot;, &quot;NO_DATA&quot; );<br>
&gt;<br>
&gt;     //set the dskWkt with an internal structure<br>
&gt;<br>
&gt;     wrpDS = (GDALDataset*) GDALAutoCreateWarpedVRT( srcDS, srcWkt.c_str(),<br>
&gt;                                                     dstWkt.c_str(),<br>
&gt;                                                     GRA_NearestNeighbour,<br>
&gt;                                                     1.0, psWarpOptions );<br>
&gt;<br>
&gt;     //copy warped data to internal structure<br>
&gt;<br>
&gt;     GDALDestroyWarpOptions( psWarpOptions );<br>
&gt;     GDALClose((GDALDatasetH) srcDS );<br>
&gt;     GDALClose((GDALDatasetH) wrpDS );<br>
&gt; }<br>
&gt; }<br>
&gt;<br>
<br>
</div></div>Of course, Valgrind has been helpfull once again (too bad you&#39;re on Windows<br>
;-))<br>
<br>
You just forgot : psWarpOptions-&gt;nBandCount = nBandCount;<br>
<div><div></div><div class="h5"><br>
&gt; I am sure I am missing something.<br>
&gt;<br>
&gt; kss<br>
&gt;<br>
&gt; /**<br>
&gt;  *<br>
&gt;  * Kyle Shannon<br>
&gt;  * <a href="mailto:ksshannon@gmail.com">ksshannon@gmail.com</a><br>
&gt;  *<br>
&gt;  */<br>
&gt;<br>
&gt; On Tue, May 10, 2011 at 03:51, Even Rouault &lt;even.rouault@mines-<br>
<a href="http://paris.org" target="_blank">paris.org</a>&gt;wrote:<br>
&gt; &gt; Selon Kyle Shannon &lt;<a href="mailto:ksshannon@gmail.com">ksshannon@gmail.com</a>&gt;:<br>
&gt; &gt; &gt; I did have to set the padfNoDataImag array as well, so I am one step<br>
&gt; &gt; &gt; closer.  My new issue is ownership of my psWarpOptions.  I assume that<br>
&gt; &gt;<br>
&gt; &gt; since<br>
&gt; &gt;<br>
&gt; &gt; &gt; I create it, and the warp api tutorial implies that is it mine, I<br>
&gt; &gt; &gt; destroy<br>
&gt; &gt;<br>
&gt; &gt; it<br>
&gt; &gt;<br>
&gt; &gt; &gt; with GDALDestroyWarpOptions().  My problem is that AutoCreateWarpedVRT<br>
&gt; &gt; &gt; appears to be stepping on my warp options when it destroys it&#39;s own<br>
&gt; &gt; &gt; copy.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I call AutoCreateWarpedVRT() and that function calls<br>
&gt; &gt; &gt; GDALCloneWarpOptions().  When AutoCreateWarpedVRT destroys the copy it<br>
&gt; &gt;<br>
&gt; &gt; owns,<br>
&gt; &gt;<br>
&gt; &gt; &gt; it appears to be stepping on my copy, and when I call<br>
&gt; &gt; &gt; GDALDestroyWarpOptions(), I get a seg fault.  Am I doing something<br>
&gt; &gt; &gt; wrong?<br>
&gt; &gt;<br>
&gt; &gt; Difficult to say without seeing your code. Could you post a small<br>
&gt; &gt; self-sufficient code snippet that demonstrates your issue ?<br>
&gt; &gt;<br>
&gt; &gt; By reviewing the code, one potential issue would be if you try to free<br>
&gt; &gt; the pTransformerArg field by yourself, as it is freed by the destructor<br>
&gt; &gt; of the VRTWarpedDataset. But if you just use GDALDestroyWarpOptions(),<br>
&gt; &gt; it should work<br>
&gt; &gt; OK<br>
&gt; &gt;<br>
&gt; &gt; &gt; kss<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; /**<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  *<br>
&gt; &gt; &gt;  * Kyle Shannon<br>
&gt; &gt; &gt;  * <a href="mailto:ksshannon@gmail.com">ksshannon@gmail.com</a><br>
&gt; &gt; &gt;  *<br>
&gt; &gt; &gt;  */<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; On Mon, May 9, 2011 at 15:43, Even Rouault<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;wrote:<br>
&gt; &gt; &gt; &gt; Le lundi 09 mai 2011 23:30:05, Kyle Shannon a écrit :<br>
&gt; &gt; &gt; &gt; &gt; Thanks Even,<br>
&gt; &gt; &gt; &gt; &gt; If that is the case, are there other values in psWarpOptions I<br>
&gt; &gt; &gt; &gt; &gt; *have*<br>
&gt; &gt;<br>
&gt; &gt; to<br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; set?  I can&#39;t find docs discussing that.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I don&#39;t think so, but you&#39;ll just have to try... I&#39;m not  surprised<br>
&gt; &gt; &gt; &gt; the docs<br>
&gt; &gt; &gt; &gt; don&#39;t talk about NaN. It is a corner case, and likely not really well<br>
&gt; &gt; &gt; &gt; supported in all places.<br>
</div></div></blockquote></div><br>