[Gdal-dev] Get a pixel from a lat/lon.
Frank Warmerdam
warmerdam at pobox.com
Thu Sep 30 12:20:00 EDT 2004
Stephane Routelous wrote:
> hi,
>
> funny, I'm just facing the same question !
>
> what to you mean by 2) ?
2) Apply the hTransform (with OCTTransform) before using the geotransform.
In the code Ken provided he was using the geotransform to convert from
pixel/line to projected coordinates, and then calling OCTTransform()
to reproject to lat/long. When going from lat/long to pixel/line you
need to apply the OCTTransform() call to the input values and then do the
part with geotransform.
> And I'm also interessed by the 3) but with adfGeoTransform[2] and
> adfGeoTransform[4] != 0 . I tried to solve the equation by myself, my math
> courses are quite old :-(
The "properly" solution is to invert the geotransform and apply it the old way.
In a relatively recent GDAL the GDALInvGeoTransform() was made a public function.
So we would use instead:
double adfInvGeoTransform[6];
GDALInvGeoTransform( adfGeoTransform, adfInvGeoTransform );
x = adfInvGeoTransform[0] + adfInvGeoTransform[1] * dfGeoX
+ adfInvGeoTransform[2] * y;
y = adfInvGeoTransform[3] + adfInvGeoTransform[4] * dfGeoY
+ adfInvGeoTransform[5] * y;
The code for GDALInvGeoTransform() is in gdal/alg/gdaltransformer.cpp if you
want to inspect it. It is a simple matrix inversion, but I have to admit my
math is also pretty rusty and I had to find the equations on the web.
You can also use GDALApplyGeoTransform() if you don't like the explicit use of
the geotransform equations by the way (make sure x and y are doubles!):
GDALApplyGeoTransform( adfInvGeoTransform, dfGeoX, dfGeoY, &x, &y );
Best regards,
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent
More information about the Gdal-dev
mailing list