/// <summary> /// Initializes a new instance of an Ellipsoid /// </summary> /// <param name="semiMajorAxis">Semi major axis</param> /// <param name="semiMinorAxis">Semi minor axis</param> /// <param name="inverseFlattening">Inverse flattening</param> /// <param name="isIvfDefinitive">Inverse Flattening is definitive for this ellipsoid (Semi-minor axis will be overridden)</param> /// <param name="axisUnit">Axis unit</param> /// <param name="name">Name</param> /// <param name="authority">Authority name</param> /// <param name="code">Authority-specific identification code.</param> /// <param name="alias">Alias</param> /// <param name="abbreviation">Abbreviation</param> /// <param name="remarks">Provider-supplied remarks</param> internal Ellipsoid( double semiMajorAxis, double semiMinorAxis, double inverseFlattening, bool isIvfDefinitive, LinearUnit axisUnit, string name, string authority, long code, string alias, string abbreviation, string remarks) : base(name, authority, code, alias, abbreviation, remarks) { SemiMajorAxis = semiMajorAxis; InverseFlattening = inverseFlattening; AxisUnit = axisUnit; IsIvfDefinitive = isIvfDefinitive; if (isIvfDefinitive && (inverseFlattening == 0 || double.IsInfinity(inverseFlattening))) { SemiMinorAxis = semiMajorAxis; } else if (isIvfDefinitive) { SemiMinorAxis = (1.0 - (1.0 / InverseFlattening)) * semiMajorAxis; } else { SemiMinorAxis = semiMinorAxis; } }
/// <summary> /// Initializes a new instance of a projected coordinate system /// </summary> /// <param name="datum">Horizontal datum</param> /// <param name="geographicCoordinateSystem">Geographic coordinate system</param> /// <param name="linearUnit">Linear unit</param> /// <param name="projection">Projection</param> /// <param name="axisInfo">Axis info</param> /// <param name="name">Name</param> /// <param name="authority">Authority name</param> /// <param name="code">Authority-specific identification code.</param> /// <param name="alias">Alias</param> /// <param name="abbreviation">Abbreviation</param> /// <param name="remarks">Provider-supplied remarks</param> internal ProjectedCoordinateSystem(HorizontalDatum datum, GeographicCoordinateSystem geographicCoordinateSystem, LinearUnit linearUnit, IProjection projection, List <AxisInfo> axisInfo, string name, string authority, long code, string alias, string remarks, string abbreviation) : base(datum, axisInfo, name, authority, code, alias, abbreviation, remarks) { GeographicCoordinateSystem = geographicCoordinateSystem; LinearUnit = linearUnit; Projection = projection; }
internal GeocentricCoordinateSystem(HorizontalDatum datum, LinearUnit linearUnit, PrimeMeridian primeMeridian, List <AxisInfo> axisInfo, string name, string authority, long code, string alias, string remarks, string abbreviation) : base(name, authority, code, alias, abbreviation, remarks) { HorizontalDatum = datum; LinearUnit = linearUnit; PrimeMeridian = primeMeridian; if (axisInfo.Count != 3) { throw new ArgumentException("Axis info should contain three axes for geocentric coordinate systems"); } base.AxisInfo = axisInfo; }
/* * /// <summary> * /// Creates a <see cref="ILocalDatum"/>. * /// </summary> * /// <param name="name">Name of datum</param> * /// <param name="datumType">Datum type</param> * /// <returns></returns> * public ILocalDatum CreateLocalDatum(string name, DatumType datumType) * { * throw new NotImplementedException(); * } */ /* * /// <summary> * /// Creates a <see cref="IVerticalDatum"/> from an enumerated type value. * /// </summary> * /// <param name="name">Name of datum</param> * /// <param name="datumType">Type of datum</param> * /// <returns>Vertical datum</returns> * public IVerticalDatum CreateVerticalDatum(string name, DatumType datumType) * { * throw new NotImplementedException(); * } */ /* * /// <summary> * /// Creates a <see cref="IVerticalCoordinateSystem"/> from a <see cref="IVerticalDatum">datum</see> and <see cref="LinearUnit">linear units</see>. * /// </summary> * /// <param name="name">Name of vertical coordinate system</param> * /// <param name="datum">Vertical datum</param> * /// <param name="verticalUnit">Unit</param> * /// <param name="axis">Axis info</param> * /// <returns>Vertical coordinate system</returns> * public IVerticalCoordinateSystem CreateVerticalCoordinateSystem(string name, IVerticalDatum datum, ILinearUnit verticalUnit, AxisInfo axis) * { * throw new NotImplementedException(); * } */ /// <summary> /// Creates a <see cref="CreateGeocentricCoordinateSystem"/> from a <see cref="HorizontalDatum">datum</see>, /// <see cref="LinearUnit">linear unit</see> and <see cref="PrimeMeridian"/>. /// </summary> /// <param name="name">Name of geocentric coordinate system</param> /// <param name="datum">Horizontal datum</param> /// <param name="linearUnit">Linear unit</param> /// <param name="primeMeridian">Prime meridian</param> /// <returns>Geocentric Coordinate System</returns> public GeocentricCoordinateSystem CreateGeocentricCoordinateSystem(string name, HorizontalDatum datum, LinearUnit linearUnit, PrimeMeridian primeMeridian) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException("Invalid name"); } var info = new List <AxisInfo>(3); info.Add(new AxisInfo("X", AxisOrientationEnum.Other)); info.Add(new AxisInfo("Y", AxisOrientationEnum.Other)); info.Add(new AxisInfo("Z", AxisOrientationEnum.Other)); return(new GeocentricCoordinateSystem(datum, linearUnit, primeMeridian, info, name, string.Empty, -1, string.Empty, string.Empty, string.Empty)); }
/// <summary> /// Creates a <see cref="ProjectedCoordinateSystem"/> using a projection object. /// </summary> /// <param name="name">Name of projected coordinate system</param> /// <param name="gcs">Geographic coordinate system</param> /// <param name="projection">Projection</param> /// <param name="linearUnit">Linear unit</param> /// <param name="axis0">Primary axis</param> /// <param name="axis1">Secondary axis</param> /// <returns>Projected coordinate system</returns> public ProjectedCoordinateSystem CreateProjectedCoordinateSystem(string name, GeographicCoordinateSystem gcs, IProjection projection, LinearUnit linearUnit, AxisInfo axis0, AxisInfo axis1) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException("Invalid name", nameof(name)); } if (gcs == null) { throw new ArgumentException("Geographic coordinate system was null", nameof(gcs)); } if (projection == null) { throw new ArgumentException("Projection was null", nameof(projection)); } if (linearUnit == null) { throw new ArgumentException("Linear unit was null"); } var info = new List <AxisInfo>(2); info.Add(axis0); info.Add(axis1); return(new ProjectedCoordinateSystem(null, gcs, linearUnit, projection, info, name, string.Empty, -1, string.Empty, string.Empty, string.Empty)); }
/// <summary> /// Creates an <see cref="Ellipsoid"/> from an major radius, and inverse flattening. /// </summary> /// <seealso cref="CreateEllipsoid"/> /// <param name="name">Name of ellipsoid</param> /// <param name="semiMajorAxis">Semi major-axis</param> /// <param name="inverseFlattening">Inverse flattening</param> /// <param name="linearUnit">Linear unit</param> /// <returns>Ellipsoid</returns> public Ellipsoid CreateFlattenedSphere(string name, double semiMajorAxis, double inverseFlattening, LinearUnit linearUnit) { if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException("Invalid name"); } return(new Ellipsoid(semiMajorAxis, -1, inverseFlattening, true, linearUnit, name, string.Empty, -1, string.Empty, string.Empty, string.Empty)); }
/* * /// <summary> * /// Creates a <see cref="ILocalCoordinateSystem">local coordinate system</see>. * /// </summary> * /// <remarks> * /// The dimension of the local coordinate system is determined by the size of * /// the axis array. All the axes will have the same units. If you want to make * /// a coordinate system with mixed units, then you can make a compound * /// coordinate system from different local coordinate systems. * /// </remarks> * /// <param name="name">Name of local coordinate system</param> * /// <param name="datum">Local datum</param> * /// <param name="unit">Units</param> * /// <param name="axes">Axis info</param> * /// <returns>Local coordinate system</returns> * public ILocalCoordinateSystem CreateLocalCoordinateSystem(string name, ILocalDatum datum, IUnit unit, List<AxisInfo> axes) * { * throw new NotImplementedException(); * } */ /// <summary> /// Creates an <see cref="Ellipsoid"/> from radius values. /// </summary> /// <seealso cref="CreateFlattenedSphere"/> /// <param name="name">Name of ellipsoid</param> /// <param name="semiMajorAxis"></param> /// <param name="semiMinorAxis"></param> /// <param name="linearUnit"></param> /// <returns>Ellipsoid</returns> public Ellipsoid CreateEllipsoid(string name, double semiMajorAxis, double semiMinorAxis, LinearUnit linearUnit) { double ivf = 0; if (semiMajorAxis != semiMinorAxis) { ivf = semiMajorAxis / (semiMajorAxis - semiMinorAxis); } return(new Ellipsoid(semiMajorAxis, semiMinorAxis, ivf, false, linearUnit, name, string.Empty, -1, string.Empty, string.Empty, string.Empty)); }