<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7652.24">
<TITLE>Building a Mercator Image from Un-projected data.. Major confusion and help requested.</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">Hi all,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">I am looking to gain a better understanding of how I can use GDAL to build a Mercator Image from un-projected data.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">The data I have is contained in proprietary format.&nbsp; For all intensive purposes it is a grid</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended"> consisting of 2464 rows by 5796 columns of data.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">The origin of the data is in the upper left hand corne</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">r of the grid with grid lat-lon dimensions of -125.99, 49.7186 for the upper left and</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">-65.656, 24.0938 for the lower right.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">I have tried several things but not sure I get the connection well enough to complete the project.</FONT></SPAN><SPAN LANG="en-us"> <FONT FACE="OCR A Extended">So</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">&#8230;</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">Here is my sample program with</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">Excerpts for comments.</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended"></FONT></SPAN><SPAN LANG="en-us"> </SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::pair&lt; double, double &gt; upper_left = std::make_pair( -125.99, 49.7186 );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::pair&lt; double, double &gt; upper_right = std::make_pair( -65.656, 49.7186 );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::pair&lt; double, double &gt; lower_left = std::make_pair( -125.99, 24.0938 );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::pair&lt; double, double &gt; lower_right = std::make_pair( -65.656, 49.7186 );</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">int my_points = 1;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">int result = 0;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">double x, y;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OGRSpatialReferenceH mercator_proj = OSRNewSpatialReference( &quot;&quot; );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">O</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">SRSetProjCS( mercator_proj, &quot;Mercator Projection&quot; );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">O</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">SRImportFromProj4( mercator_proj, &quot;+proj=merc&quot; );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OGRSpatialReferenceH wgs84_proj = OSRNewSpatialReference( &quot;&quot; );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OSRSetWellKnownGeogCS( wgs84_proj,&nbsp; &quot;WGS84&quot; );</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OGRCoordinateTransformationH my_transformation = OCTNewCoordinateTransformation( wgs84_proj, mercator_proj );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">x = upper_left.first;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">y = upper_left.second;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OCTTransform( my_transformation, my_points, &amp;x, &amp;y, NULL );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::cout &lt;&lt; std::fixed;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::cout &lt;&lt; result &lt;&lt; &quot; &quot; &lt;&lt; upper_left.first &lt;&lt; &quot;, &quot; &lt;&lt; upper_left.second &lt;&lt; &quot; = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; std::endl;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">The output for my example is:</FONT></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">0 -125.990000, 49.718600 = -14025142.645045, 6365068.664114</FONT></B></SPAN><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">The values output</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">in meters and</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">are exactly what I would expect and are</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">similar</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended"> to proj4 output.&nbsp;</FONT></B></SPAN><SPAN LANG="en-us"><B> </B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">My question is how do I convert this into actual</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended"></FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">i-j coordinates</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">for the image</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">&#8230;</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">And even more so how do I convert these to i-j coordinates</FONT></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">For the data since it is un</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">-</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">projected?</FONT></B></SPAN><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">Another Method is using GDALCreateGenImgProfTransformer</FONT></B></SPAN><SPAN LANG="en-us"><FONT COLOR="#FF0000" FACE="OCR A Extended">:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">char *pszDstWKT = NULL;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">char *pszSrcWKT = NULL;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OSRExportToWkt( mercator_proj, &amp;pszDstWKT );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">OSRExportToWkt( wgs84_proj, &amp;pszSrcWKT );</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">v</FONT></SPAN><SPAN LANG="en-us"><FONT FACE="OCR A Extended">oid *hTransformArg;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">hTransformArg = GDALCreateGenImgProjTransformer( NULL, pszSrcWKT, NULL, pszDstWKT, FALSE, 0, 1 );</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">x = upper_left.first;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">y = upper_left.second;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">int success;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">result = GDALGenImgProjTransform(hTransformArg, TRUE, 1, &amp;x, &amp;y,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, &amp;success);</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::cout &lt;&lt; std::fixed;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">td::cout &lt;&lt; result &lt;&lt; &quot; &quot; &lt;&lt; upper_left.first &lt;&lt; &quot;, &quot; &lt;&lt; upper_left.second &lt;&lt; &quot; = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; std::endl;</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT COLOR="#FF0000" FACE="OCR A Extended">//</FONT></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">1 -125.990000, 49.718600 = -0.001132, 0.000450</FONT></B></SPAN><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">// OK, this</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">seems</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended"> sensible</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended"> but is this the i-j offset into the data</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">or the image or both</FONT></B></SPAN><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">x = lower_right.first;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">y = lower_right.second;</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">result = GDALGenImgProjTransform(hTransformArg, TRUE, 1, &amp;x, &amp;y,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL, &amp;success);</FONT></SPAN></P>
<BR>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::cout &lt;&lt; std::fixed;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">std::cout &lt;&lt; result &lt;&lt; &quot; &quot; &lt;&lt; lower_right.first &lt;&lt; &quot;, &quot; &lt;&lt; lower_right.second &lt;&lt; &quot; = &quot; &lt;&lt; x &lt;&lt; &quot;, &quot; &lt;&lt; y &lt;&lt; std::endl;</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">//</FONT></B></SPAN><SPAN LANG="en-us"><B> <FONT COLOR="#FF0000" FACE="OCR A Extended">1 -65.656000, 49.718600 = -0.000590, 0.000450</FONT></B></SPAN><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended">// This is NOT Right</FONT></B></SPAN><SPAN LANG="en-us"><B><FONT COLOR="#FF0000" FACE="OCR A Extended"> so apparently I am doing something wrong or not understanding the concept here</FONT></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><B></B></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">Thanks,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended">Bill</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="OCR A Extended"></FONT></SPAN><SPAN LANG="en-us">&nbsp;</SPAN></P>

</BODY>
</HTML>