public double Dms2Dd(DMSCoord dmsCoord) { double result; result = dmsCoord.deg + (dmsCoord.min / 60.0) + (dmsCoord.sec / 3600); if (dmsCoord.deg > 0 && dmsCoord.min > 0 && dmsCoord.sec > 0) { switch (dmsCoord.quadrant) { case Quadrant.N: result = (dmsCoord.deg <= 90 && dmsCoord.min < 60 && dmsCoord.sec < 60) ? result : 9999; break; case Quadrant.E: result = (dmsCoord.deg <= 180 && dmsCoord.min < 60 && dmsCoord.sec < 60) ? result : 9999; break; case Quadrant.W: result = (dmsCoord.deg <= 180 && dmsCoord.min < 60 && dmsCoord.sec < 60) ? -result : 9999; break; case Quadrant.S: result = (dmsCoord.deg <= 90 && dmsCoord.min < 60 && dmsCoord.sec < 60) ? -result : 9999; break; default: result = 9999; break; } } return(result); }
public double Dms2Dd(DMSCoord dmsCoord) { double errValue = 9999.0; Boolean positive = false; /** perform initial degree range checks: * 180 degree and 60 seconds/minute requirements */ if (dmsCoord.deg < 0 || dmsCoord.deg > 180) { return(errValue); } if (dmsCoord.min < 0 || dmsCoord.min >= 60) { return(errValue); } if (dmsCoord.sec < 0 || dmsCoord.sec >= 60) { return(errValue); } /** make decisions of bearings according to angles, * and check for 90 degree requirements */ switch (dmsCoord.quadrant) { case Quadrant.N: if (dmsCoord.deg > 90) { return(errValue); } positive = true; break; case Quadrant.E: positive = true; break; case Quadrant.S: if (dmsCoord.deg > 90) { return(errValue); } positive = false; break; case Quadrant.W: positive = false; break; default: return(errValue); } double seconds = dmsCoord.sec / 60; double minutes = (dmsCoord.min + seconds) / 60; double dd = dmsCoord.deg + ((dmsCoord.min + (dmsCoord.sec / 60)) / 60); // perform the conversion calculation return(positive ? dd : (-1 * dd)); // return the decimal degrees }