[Gdal-dev] UTM to Lat/Lon

Andrey Kiselev dron at ak4719.spb.edu
Thu Jul 3 06:23:13 EDT 2003


On Thu, Jul 03, 2003 at 11:10:14AM +0200, mathieu_gdal wrote:
> I would like to implement to raster projection: Converting a pixel
> coordinate (in the bitmap) into a position in Lat/Lon coord system (in
> WGS84 for example)
> 
> I guess the way to do it is:
> 
> 1) Convert from pixel coordinate to the geotiff file coordinate system,
> ie in my case UTM zone 19, in meters. (There is no problem for that, I
> will use the affine coefficients)
> 
> 2) Convert from the geotiff file coordinate system to lat/lon system.
> 
> (u,v)Pixel ---------1----------> UTM(x,y) meters ---------2---------->
> (Lat,Lon)radians
> 
> How to do 2) ??

There is a simple Python script attached to read geographic information
from the GDAL supported file and convert specified pixel/line
coordinates into lat/long ones. It is pretty self-explanatory and will
be added to gdal/pymod/samples soon.

> Note : I have tried to create a OGRCoordinateTransformation with my
> file's OGRSpatialReference and a simple lat/lon OGRSpatialReference. It
> does not work, even if the transformation seems to be well created.

It works ;-) If you need working C code, look into gdailnfo.c sources,
GDALInfoReportCorner() function.


-- 
Andrey V. Kiselev
Home phone:  +7 812 5274898  ICQ# 26871517
-------------- next part --------------
#!/usr/bin/env python

import gdal
from gdalconst import *
import osr
import sys

# =============================================================================
def Usage():
    print
    print 'Read coordinate system and geotransformation matrix from input'
    print 'file and print latitude/longitude coordinates for the specified'
    print 'pixel.'
    print
    print 'Usage: tolatlong.py pixel line infile'
    print
    sys.exit( 1 )

# =============================================================================

infile = None
pixel = None
line = None

# =============================================================================
# Parse command line arguments.
# =============================================================================
i = 1
while i < len(sys.argv):
    arg = sys.argv[i]

    if pixel is None:
	pixel = float(arg)

    elif line is None:
	line = float(arg)

    elif infile is None:
	infile = arg

    else:
	Usage()

    i = i + 1

if infile is None:
    Usage()
if pixel is None:
    Usage()
if line is None:
    Usage()

indataset = gdal.Open( infile, GA_ReadOnly )

geomatrix = indataset.GetGeoTransform()
X = geomatrix[0] + geomatrix[1] * pixel + geomatrix[2] * line
Y = geomatrix[3] + geomatrix[4] * pixel + geomatrix[5] * line

srs = osr.SpatialReference()
srs.ImportFromWkt(indataset.GetProjection())

srsLatLong = srs.CloneGeogCS()
ct = osr.CoordinateTransformation(srs, srsLatLong)
(long, lat, height) = ct.TransformPoint(X, Y)

print 'pixel: %g, line: %g' % (pixel, line)
print 'latitude: %g, longitude: %g (in degrees)' % (long, lat)



More information about the Gdal-dev mailing list