Details of axis. This is used to label axes, and indicate the orientation.
		/// <summary>
		/// Creates a <see cref="GeographicCoordinateSystem"/>, which could be Lat/Lon or Lon/Lat.
		/// </summary>
		/// <param name="name">Name of geographical coordinate system</param>
		/// <param name="angularUnit">Angular units</param>
		/// <param name="datum">Horizontal datum</param>
		/// <param name="primeMeridian">Prime meridian</param>
		/// <param name="axis0">First axis</param>
		/// <param name="axis1">Second axis</param>
		/// <returns>Geographic coordinate system</returns>
		public IGeographicCoordinateSystem CreateGeographicCoordinateSystem(string name, IAngularUnit angularUnit, IHorizontalDatum datum, IPrimeMeridian primeMeridian, AxisInfo axis0, AxisInfo axis1)
		{
			if (String.IsNullOrEmpty(name))
			{
				throw new ArgumentException("Invalid name", "name");
			}

			List<AxisInfo> info = new List<AxisInfo>(2);
			info.Add(axis0);
			info.Add(axis1);
			return new GeographicCoordinateSystem(angularUnit, datum, primeMeridian, info, name, String.Empty, -1, String.Empty, String.Empty, String.Empty);
		}
		/// <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="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="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 IProjectedCoordinateSystem CreateProjectedCoordinateSystem(string name, IGeographicCoordinateSystem gcs, IProjection projection, ILinearUnit linearUnit, AxisInfo axis0, AxisInfo axis1)
		{
			if (String.IsNullOrEmpty(name))
			{
				throw new ArgumentException("Invalid name", "name");
			}
			
			if (gcs == null)
			{
				throw new ArgumentNullException("gcs", "Geographic coordinate system was null.");
			}
			
			if (projection == null)
			{
				throw new ArgumentNullException("projection", "Projection was null.");
			}
			
			if (linearUnit == null)
			{
				throw new ArgumentNullException("linearUnit", "Linear unit was null.");
			}

			List<AxisInfo> 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 a <see cref="GeographicCoordinateSystem"/>, which could be Lat/Lon or Lon/Lat.
        /// </summary>
        /// <param name="name">Name of geographical coordinate system</param>
        /// <param name="angularUnit">Angular units</param>
        /// <param name="datum">Horizontal datum</param>
        /// <param name="primeMeridian">Prime meridian</param>
        /// <param name="axis0">First axis</param>
        /// <param name="axis1">Second axis</param>
        /// <returns>Geographic coordinate system</returns>
        public IGeographicCoordinateSystem CreateGeographicCoordinateSystem(string name, IAngularUnit angularUnit, IHorizontalDatum datum, IPrimeMeridian primeMeridian, AxisInfo axis0, AxisInfo axis1)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Invalid name");
            }
            List <AxisInfo> info = new List <AxisInfo>(2);

            info.Add(axis0);
            info.Add(axis1);
            return(new GeographicCoordinateSystem(angularUnit, datum, 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 IProjectedCoordinateSystem CreateProjectedCoordinateSystem(string name, IGeographicCoordinateSystem gcs, IProjection projection, ILinearUnit linearUnit, AxisInfo axis0, AxisInfo axis1)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Invalid name");
            }
            if (gcs == null)
            {
                throw new ArgumentException("Geographic coordinate system was null");
            }
            if (projection == null)
            {
                throw new ArgumentException("Projection was null");
            }
            if (linearUnit == null)
            {
                throw new ArgumentException("Linear unit was null");
            }
            List <AxisInfo> 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));
        }
		private static IProjectedCoordinateSystem createExpectedCoordinateSystem()
		{
			ICoordinateSystemFactory factory = new CoordinateSystemFactory();

			IEllipsoid grs80 = Ellipsoid.GRS80;

			IHorizontalDatum harn = factory.CreateHorizontalDatum("D_North_American_1983_HARN",
			                                                      DatumType.HD_Classic, grs80, null);

			IPrimeMeridian greenwich = PrimeMeridian.Greenwich;

			AxisInfo axis0 = new AxisInfo("Lon", AxisOrientationEnum.East);
			AxisInfo axis1 = new AxisInfo("Lat", AxisOrientationEnum.North);

			IGeographicCoordinateSystem gcs = factory.CreateGeographicCoordinateSystem("GCS_North_American_1983_HARN",
			                                                                           AngularUnit.Degrees, harn, greenwich,
			                                                                           axis0, axis1);

			IProjection prj = factory.CreateProjection(
				"Lambert_Conformal_Conic",
				"Lambert_Conformal_Conic",
				new ProjectionParameter[]
					{
						new ProjectionParameter("False_Easting", 8202099.737532808),
						new ProjectionParameter("False_Northing", 0),
						new ProjectionParameter("Central_Meridian", -120.5),
						new ProjectionParameter("Standard_Parallel_1", 44.33333333333334),
						new ProjectionParameter("Standard_Parallel_2", 46.0),
						new ProjectionParameter("Latitude_Of_Origin", 43.66666666666666)
					});

			IProjectedCoordinateSystem expected =
				factory.CreateProjectedCoordinateSystem("NAD_1983_HARN_StatePlane_Oregon_North_FIPS_3601",
				                                        gcs, prj, LinearUnit.Foot, axis0, axis1);

			// TODO: Check if this is correct, since on line 184 of CoorindateSystemFactory.cs, HorizontalDatum is passed in as null
			expected.HorizontalDatum = harn;
			return expected;
		}
 /// <summary>
 /// Creates a <see cref="T:GeoAPI.CoordinateSystems.IProjectedCoordinateSystem" /> 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>
 /// <exception cref="NotSupportedException"></exception>
 public IProjectedCoordinateSystem CreateProjectedCoordinateSystem(string name, IGeographicCoordinateSystem gcs,
                                                                   IProjection projection, ILinearUnit linearUnit, AxisInfo axis0, AxisInfo axis1)
 {
     throw new NotSupportedException();
 }
 /// <summary>
 /// Creates a <see cref="T:GeoAPI.CoordinateSystems.IGeographicCoordinateSystem" />, which could be Lat/Lon or Lon/Lat.
 /// </summary>
 /// <param name="name">Name of geographical coordinate system</param>
 /// <param name="angularUnit">Angular units</param>
 /// <param name="datum">Horizontal datum</param>
 /// <param name="primeMeridian">Prime meridian</param>
 /// <param name="axis0">First axis</param>
 /// <param name="axis1">Second axis</param>
 /// <returns>Geographic coordinate system</returns>
 /// <exception cref="NotSupportedException"></exception>
 public IGeographicCoordinateSystem CreateGeographicCoordinateSystem(string name, IAngularUnit angularUnit,
                                                                     IHorizontalDatum datum, IPrimeMeridian primeMeridian, AxisInfo axis0, AxisInfo axis1)
 {
     throw new NotSupportedException();
 }