public static Meridian Create(IPrimeMeridianInfo primeMeridian) { if(primeMeridian == null) throw new ArgumentNullException("primeMeridian"); Contract.Ensures(Contract.Result<Meridian>() != null); var lon = primeMeridian.Longitude; if (primeMeridian.Unit.Name != "degrees") { var conversion = SimpleUnitConversionGenerator.FindConversion(primeMeridian.Unit, OgcAngularUnit.DefaultDegrees); if (conversion != null) { lon = conversion.TransformValue(lon); } else { throw new InvalidOperationException("Could not convert meridian unit."); } } var result = new Meridian(lon, primeMeridian.Name); if (primeMeridian.Authority != null) { int epsgCode; if (primeMeridian.Authority.Name == "EPSG" && Int32.TryParse(primeMeridian.Authority.Code, out epsgCode)) result.Code = epsgCode; } return result; }
public IDatumGeodetic ReadHorizontalDatumFromParams() { Contract.Ensures(Contract.Result <IDatumGeodetic>() != null); IAuthorityTag authority = null; var name = String.Empty; ISpheroidInfo spheroid = null; Helmert7Transformation toWgs84 = null; IPrimeMeridianInfo primeMeridian = null; foreach (var parameter in ReadParams()) { if (parameter is IAuthorityTag) { authority = (IAuthorityTag)parameter; } else if (parameter is string) { name = (string)parameter; } else if (parameter is ISpheroidInfo) { spheroid = (ISpheroidInfo)parameter; } else if (parameter is Helmert7Transformation) { toWgs84 = (Helmert7Transformation)parameter; } else if (parameter is IPrimeMeridianInfo) { primeMeridian = (IPrimeMeridianInfo)parameter; // NOTE: this may not happen due to the spec... but just in case? } } if (null != authority) { var datum = Options.GetDatum(authority) as IDatumGeodetic; if (null != datum) { return(datum); } } if (spheroid == null) { if (Options.ThrowOnError) { throw new WktParseExceptioncs("Horizontal Datum", "No spheroid."); } spheroid = OgcSpheroid.DefaultWgs84; } return(new OgcDatumHorizontal( name, spheroid, primeMeridian, toWgs84, authority )); }
private bool ComputationallyEqual(IPrimeMeridianInfo a, IPrimeMeridianInfo b) { if (a == b) { return(true); } if (a == null || b == null) { return(false); } return(a.Longitude == b.Longitude && ComputationallyEqual(a.Unit, b.Unit)); }
/// <summary> /// Constructs a horizontal datum. /// </summary> /// <param name="name">The name.</param> /// <param name="spheroid">The spheroid of the datum.</param> /// <param name="primeMeridian">The prime meridian of the datum.</param> /// <param name="transform">The transformation for conversions to WGS84.</param> /// <param name="authority">The authority.</param> public OgcDatumHorizontal( string name, ISpheroidInfo spheroid, IPrimeMeridianInfo primeMeridian, Helmert7Transformation transform, IAuthorityTag authority = null ) : base(name, OgcDatumType.None, authority) { if (null == spheroid) throw new ArgumentNullException("spheroid"); Contract.Requires(name != null); Spheroid = spheroid; PrimeMeridian = primeMeridian; BasicWgs84Transformation = transform; }
/// <summary> /// Constructs a horizontal datum. /// </summary> /// <param name="name">The name.</param> /// <param name="spheroid">The spheroid of the datum.</param> /// <param name="primeMeridian">The prime meridian of the datum.</param> /// <param name="transform">The transformation for conversions to WGS84.</param> /// <param name="authority">The authority.</param> public OgcDatumHorizontal( string name, ISpheroidInfo spheroid, IPrimeMeridianInfo primeMeridian, Helmert7Transformation transform, IAuthorityTag authority = null ) : base(name, OgcDatumType.None, authority) { if (null == spheroid) { throw new ArgumentNullException("spheroid"); } Contract.Requires(name != null); Spheroid = spheroid; PrimeMeridian = primeMeridian; BasicWgs84Transformation = transform; }
public void Write(IPrimeMeridianInfo entity) { if (entity == null) { throw new ArgumentNullException("entity"); } Contract.EndContractBlock(); Write(WktKeyword.PrimeMeridian); WriteOpenParenthesis(); Indent(); WriteQuoted(entity.Name); WriteComma(); WriteValue(entity.Longitude); var authorityTag = Options.GetAuthorityTag(entity); if (null != authorityTag) { WriteComma(); Write(authorityTag); } UnIndent(); WriteCloseParenthesis(); }
public static Meridian Create(IPrimeMeridianInfo primeMeridian) { if (primeMeridian == null) { throw new ArgumentNullException("primeMeridian"); } Contract.Ensures(Contract.Result <Meridian>() != null); var lon = primeMeridian.Longitude; if (primeMeridian.Unit.Name != "degrees") { var conversion = SimpleUnitConversionGenerator.FindConversion(primeMeridian.Unit, OgcAngularUnit.DefaultDegrees); if (conversion != null) { lon = conversion.TransformValue(lon); } else { throw new InvalidOperationException("Could not convert meridian unit."); } } var result = new Meridian(lon, primeMeridian.Name); if (primeMeridian.Authority != null) { int epsgCode; if (primeMeridian.Authority.Name == "EPSG" && Int32.TryParse(primeMeridian.Authority.Code, out epsgCode)) { result.Code = epsgCode; } } return(result); }
private ICrsGeographic ReadGeographicCsFromParams() { Contract.Ensures(Contract.Result <ICrsGeographic>() != null); IAuthorityTag authority = null; var name = String.Empty; IDatumGeodetic datum = null; IPrimeMeridianInfo primeMeridian = null; IUnit unit = OgcAngularUnit.DefaultDegrees; var axes = new List <IAxis>(); foreach (var parameter in ReadParams()) { if (parameter is string) { name = (string)parameter; } else if (parameter is IAuthorityTag) { authority = (IAuthorityTag)parameter; } else if (parameter is IDatumGeodetic) { datum = (IDatumGeodetic)parameter; } else if (parameter is IPrimeMeridianInfo) { primeMeridian = (IPrimeMeridianInfo)parameter; } else if (parameter is IUnit) { unit = (IUnit)parameter; } else if (parameter is IAxis) { axes.Add((IAxis)parameter); } } if (null != authority) { var crs = Options.GetCrs(authority) as ICrsGeographic; if (null != crs) { return(crs); } } if (null != datum && datum.PrimeMeridian == null && null != primeMeridian) { // in this case the datum must have NOT been created from an authority source so we should remake it with a prime meridian datum = new OgcDatumHorizontal( datum.Name, datum.Spheroid, primeMeridian, datum.BasicWgs84Transformation, datum.Authority ); } if (datum == null) { if (Options.ThrowOnError) { throw new WktParseExceptioncs("Geographic CRS", "No datum."); } datum = OgcDatumHorizontal.DefaultWgs84; } return(new OgcCrsGeographic( name, datum, unit, axes, authority )); }