ossim_int32 ossimUtmProjection::computeZone(const ossimGpt& ground) { ossim_int32 result = 0; double longitude = ground.lonr(); double lat_Degrees = (ossim_int32)( (ground.latd()) + 0.00000005); double long_Degrees = (ossim_int32)( (ground.lond()) + 0.00000005); if (longitude < M_PI) result = (ossim_int32)( (31 + ((180 * longitude) / (6 * M_PI)) ) + 0.00000005); else result = (ossim_int32)( (((180 * longitude) / (6 * M_PI)) - 29) + 0.00000005); if (result > 60) result = 1; /* UTM special cases */ if ((lat_Degrees > 55) && (lat_Degrees < 64) && (long_Degrees > -1) && (long_Degrees < 3)) result = 31; if ((lat_Degrees > 55) && (lat_Degrees < 64) && (long_Degrees > 2) && (long_Degrees < 12)) result = 32; if ((lat_Degrees > 71) && (long_Degrees > -1) && (long_Degrees < 9)) result = 31; if ((lat_Degrees > 71) && (long_Degrees > 8) && (long_Degrees < 21)) result = 33; if ((lat_Degrees > 71) && (long_Degrees > 20) && (long_Degrees < 33)) result = 35; if ((lat_Degrees > 71) && (long_Degrees > 32) && (long_Degrees < 42)) result = 37; return result; }
ossimGpt ossimThreeParamDatum::shiftToWgs84(const ossimGpt &aPt)const { if(ossim::almostEqual(param1(), 0.0)&& ossim::almostEqual(param2(), 0.0)&& ossim::almostEqual(param3(), 0.0)) { return ossimGpt(aPt.latd(), aPt.lond(), aPt.latd(), ossimGpt().datum()); } ossimEcefPoint p1 = aPt; ossimEcefPoint p2; if(withinMolodenskyRange(aPt.latd())) { ossimWgs84Datum wgs84; double latin, lonin, hgtin; double latout, lonout, hgtout; double da = wgs84.ellipsoid()->getA() - ellipsoid()->getA(); double df = wgs84.ellipsoid()->getFlattening() - ellipsoid()->getFlattening(); latin = aPt.latr(); lonin = aPt.lonr(); hgtin = aPt.height(); if(aPt.isHgtNan()) { hgtin = 0.0; } molodenskyShift(ellipsoid()->getA(), da, ellipsoid()->getFlattening(), df, param1(), param2(), param3(), latin, lonin, hgtin, latout, lonout, hgtout); ossimGpt g; g.latr(latout); g.lonr(lonout); g.height(hgtout); g.datum(this); return g; } else { p2 = ossimEcefPoint(p1.x() + theParam1, p1.y() + theParam2, p1.z() + theParam3); } return ossimGpt(p2); // defaults to WGS84 }