private static IEnumerable<ProjectionParameter> VerifyParameters(IEnumerable<ProjectionParameter> parameters) { var p = new ProjectionParameterSet(parameters); var semi_major = p.GetParameterValue("semi_major"); p.SetParameterValue("semi_minor", semi_major); p.SetParameterValue("scale_factor", 1); return p.ToProjectionParameter(); }
/// <summary> /// Creates an instance of this class /// </summary> /// <param name="parameters">An enumeration of projection parameters</param> protected MapProjection(IEnumerable<ProjectionParameter> parameters) { _Parameters = new ProjectionParameterSet(parameters); _semiMajor = _Parameters.GetParameterValue("semi_major"); _semiMinor = _Parameters.GetParameterValue("semi_minor"); //_es = 1.0 - (_semiMinor * _semiMinor) / (_semiMajor * _semiMajor); _es = EccentricySquared(_semiMajor, _semiMinor); _e = Math.Sqrt(_es); scale_factor = _Parameters.GetOptionalParameterValue("scale_factor", 1); central_meridian = Degrees2Radians(_Parameters.GetParameterValue("central_meridian", "longitude_of_center")); lat_origin = Degrees2Radians(_Parameters.GetParameterValue("latitude_of_origin", "latitude_of_center")); _metersPerUnit = _Parameters.GetParameterValue("unit"); false_easting = _Parameters.GetOptionalParameterValue("false_easting", 0)*_metersPerUnit; false_northing = _Parameters.GetOptionalParameterValue("false_northing", 0)*_metersPerUnit; // TODO: Should really convert to the correct linear units?? // Compute constants for the mlfn double t; en0 = C00 - _es*(C02 + _es* (C04 + _es*(C06 + _es*C08))); en1 = _es*(C22 - _es* (C04 + _es*(C06 + _es*C08))); en2 = (t = _es*_es)* (C44 - _es*(C46 + _es*C48)); en3 = (t *= _es)*(C66 - _es*C68); en4 = t*_es*C88; }