/* Universal Transverse Mercator inverse equations--mapping line,sample to x,y to lat,long -----------------------------------------------------------------------*/ int LSutminv ( double s, /* I: sample */ double l, /* I: line */ double *lon, /* O: longitude (degrees) */ double *lat /* O: latitude (degrees) */ ) { int ret = 0; /* return value */ double x, y; /* x,y projection coords */ double dl, dp, dy, dx; /* delta line, sample and x,y values */ /* Calculate the x,y from the line,sample */ dl = (l + 0.5) * pixel_size; dp = (s + 0.5) * pixel_size; dy = (dp * sin_orien) - (dl * cos_orien); dx = (dp * cos_orien) + (dl * sin_orien); y = ul_corner[1] + dy; x = ul_corner[0] + dx; /* Do the inverse mapping */ ret = utminv (x, y, lon, lat); if (ret != 0) { printf ("Error in the inverse UTM mapping"); return (ret); } /* Convert lat/long to degrees */ *lat *= R2D; *lon *= R2D; return (0); }
/* **************************************************************** */ PointLla pointUtmToPointLla(PointUtm pointUtm) { PointLla pointLla = pointLlaCreate(); utminv(pointUtm->xMeters, pointUtm->yMeters, &pointLla->longitudeRadians, &pointLla->latitudeRadians); return pointLla; }