private void createVerticalCoordinateSystem()
        {
            ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            IVerticalDatum            verticalDatum           = spatialReferenceFactory.CreateVerticalDatum((int)esriSRVerticalDatumType.esriSRVertDatum_Taranaki);
            IHVDatum    hvDatum    = verticalDatum as IHVDatum;
            ILinearUnit linearUnit = spatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit;
            IVerticalCoordinateSystemEdit verticalCoordinateSystemEdit = new VerticalCoordinateSystemClass();
            object name              = "New VCoordinateSystem";
            object alias             = "VCoordinateSystem alias";
            object abbreviation      = "abbr";
            object remarks           = "Test for options";
            object usage             = "New Zealand";
            object hvDatumObject     = hvDatum as object;
            object unitObject        = linearUnit as object;
            object verticalShift     = 40 as object;
            object positiveDirection = -1 as object;

            verticalCoordinateSystemEdit.Define(ref name, ref alias, ref abbreviation, ref remarks, ref usage, ref hvDatumObject, ref unitObject, ref verticalShift, ref positiveDirection);
            IVerticalCoordinateSystem verticalCoordinateSystem = verticalCoordinateSystemEdit as IVerticalCoordinateSystem;


            m_map.SpatialReference = verticalCoordinateSystem as ISpatialReference;
            m_activeView.Refresh();
            MessageBox.Show("自定义verticalCoordinateSystem完成!");
        }
        private static IVerticalCoordinateSystem ReadVerticalCoordinateSystem(WktStreamTokenizer tokenizer)
        {
            /*
             * VERT_CS["Newlyn",
             * VERT_DATUM["Ordnance Datum Newlyn",2005,AUTHORITY["EPSG","5101"]]
             * UNIT["metre",1,AUTHORITY["EPSG","9001"]]
             * AUTHORITY["EPSG","5701"]
             */
            tokenizer.ReadToken("[");
            string name = tokenizer.ReadDoubleQuotedWord();

            tokenizer.ReadToken(",");
            tokenizer.ReadToken("VERT_DATUM");
            IVerticalDatum verticalDatum = ReadVerticalDatum(tokenizer);

            tokenizer.ReadToken("UNIT");
            IUnit  unit          = ReadUnit(tokenizer);
            string authority     = "";
            string authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");

            IVerticalCoordinateSystem verticalCS = new VerticalCoordinateSystem(name, verticalDatum, "", authority, authorityCode, "", "");

            return(verticalCS);
        }
 private static void WriteVerticalDatum(IVerticalDatum verticalDatum, XmlTextWriter writer)
 {
     writer.WriteStartElement("CS_VerticalDatum");
     writer.WriteAttributeString("DatumType", DatumTypeAsCode(verticalDatum.DatumType));
     WriteCSInfo(verticalDatum, writer);
     writer.WriteEndElement();
 }
Exemple #4
0
 private static void WriteVerticalDatum(IVerticalDatum verticalDatum, IndentedTextWriter writer)
 {
     writer.WriteLine("VERT_DATUM[");
     writer.Indent = writer.Indent + 1;
     writer.WriteLine(String.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\",{1},", verticalDatum.Name, DatumTypeAsCode(verticalDatum.DatumType)));
     writer.WriteLine(String.Format(System.Globalization.CultureInfo.InvariantCulture, "AUTHORITY[\"{0}\",\"{1}\"]", verticalDatum.Authority, verticalDatum.AuthorityCode));
     writer.Indent = writer.Indent - 1;
     writer.WriteLine("]");
 }
Exemple #5
0
 private static void WriteVerticalDatum(IVerticalDatum verticalDatum, IndentedTextWriter writer)
 {
     writer.WriteLine("VERT_DATUM[");
     writer.Indent = writer.Indent + 1;
     writer.WriteLine(String.Format("\"{0}\",{1},", verticalDatum.Name, DatumTypeAsCode(verticalDatum.DatumType)));
     writer.WriteLine(String.Format("AUTHORITY[\"{0}\",\"{1}\"]", verticalDatum.Authority, verticalDatum.AuthorityCode));
     writer.Indent = writer.Indent - 1;
     writer.WriteLine("]");
 }
Exemple #6
0
        public void TestReadVerticalDatum()
        {
            string         testFile      = Global.GetUnitTestRootDirectory() + @"\IO\VerticalDatum.txt";
            string         wkt1          = FileToString(testFile);
            IVerticalDatum verticalDatum = CoordinateSystemWktReader.Create(wkt1) as IVerticalDatum;
            string         wkt2          = verticalDatum.WKT;
            bool           same          = Compare.CompareAgainstString(testFile, wkt2);

            Assertion.AssertEquals("Vertical Datum 1", true, same);
        }
        public void TestWriteVerticalDatum()
        {
            IVerticalDatum     verticalDatum      = _factory.CreateVerticalDatum("5101");
            TextWriter         textwriter         = new StringWriter();
            IndentedTextWriter indentedTextWriter = new IndentedTextWriter(textwriter);

            CoordinateSystemWktWriter.Write(verticalDatum, indentedTextWriter);
            bool same = Compare.CompareAgainstString(Global.GetUnitTestRootDirectory() + @"\IO\VerticalDatum.txt", textwriter.ToString());

            Assertion.AssertEquals("test 1", true, same);
        }
Exemple #8
0
        public void TestCreateVerticalCoordinateSystem1()
        {
            IAxisInfo                 axis          = AxisInfo.Altitude;
            ILinearUnit               unit          = LinearUnit.Meters;
            IVerticalDatum            verticalDatum = _csFactory.CreateVerticalDatum("vertdatum", DatumType.IVD_Ellipsoidal);
            IVerticalCoordinateSystem verticalCS    = _csFactory.CreateVerticalCoordinateSystem("test", verticalDatum, unit, axis);

            Assertion.AssertEquals("ctor. 1", "test", verticalCS.Name);
            Assertion.AssertEquals("ctor. 2", verticalDatum, verticalCS.VerticalDatum);
            Assertion.AssertEquals("ctor. 3", unit, verticalCS.VerticalUnit);
            Assertion.AssertEquals("ctor. 4", axis, verticalCS.GetAxis(0));
        }
 /// <summary>
 /// Initializes a new instance of the Projection class. The units are set to meters and the axis is set to represent altitude.
 /// </summary>
 /// <param name="verticaldatum"></param>
 /// <param name="remarks">Remarks about this object.</param>
 /// <param name="authority">The name of the authority.</param>
 /// <param name="authorityCode">The code the authority uses to identidy this object.</param>
 /// <param name="name">The name of the object.</param>
 /// <param name="alias">The alias of the object.</param>
 /// <param name="abbreviation">The abbreviated name of this object.</param>
 internal VerticalCoordinateSystem(
     string name,
     IVerticalDatum verticaldatum,
     string remarks, string authority, string authorityCode, string alias, string abbreviation)
     : base(remarks, authority, authorityCode, name, alias, abbreviation)
 {
     if (verticaldatum == null)
     {
         throw new ArgumentNullException("verticaldatum");
     }
     _verticaldatum = verticaldatum;
     _units         = LinearUnit.Meters;
     _axisinfo      = new IAxisInfo[1] {
         AxisInfo.Altitude
     };
 }
        /// <summary>
        /// Initializes a new instance of the Projection class.
        /// </summary>
        /// <param name="verticaldatum">The vertical datum the coordiniate system is to use.</param>
        /// <param name="axisinfo">Axis information.</param>
        /// <param name="linearUnit">The units this coordinate system uses.</param>
        /// <param name="remarks">Remarks about this object.</param>
        /// <param name="authority">The name of the authority.</param>
        /// <param name="authorityCode">The code the authority uses to identidy this object.</param>
        /// <param name="name">The name of the object.</param>
        /// <param name="alias">The alias of the object.</param>
        /// <param name="abbreviation">The abbreviated name of this object.</param>
        public VerticalCoordinateSystem(	string name,
			IVerticalDatum verticaldatum,
			IAxisInfo axisinfo,
			ILinearUnit linearUnit,
			string remarks, string authority, string authorityCode, string alias, string abbreviation)
            : base(remarks, authority,  authorityCode,name, alias, abbreviation)
        {
            if (verticaldatum==null)
            {
                throw new ArgumentNullException("verticaldatum");
            }

            _verticaldatum = verticaldatum;
            _axisinfo = new IAxisInfo[1]{axisinfo};
            _units = linearUnit;
        }
        /// <summary>
        /// Initializes a new instance of the Projection class.
        /// </summary>
        /// <param name="name">The name of the coordinate system.</param>
        /// <param name="verticaldatum">The vertical datum the coordiniate system is to use.</param>
        /// <param name="axisinfo">Axis information.</param>
        /// <param name="units">The units this coordinae system uses.</param>
        internal VerticalCoordinateSystem(string name, IVerticalDatum verticaldatum, IAxisInfo axisinfo, ILinearUnit units)
            : base(name,"","","","","")
        {
            if (verticaldatum==null)
            {
                throw new ArgumentNullException("verticaldatum");
            }
            if (units==null)
            {
                throw new ArgumentNullException("units");
            }

            _name = name;
            _verticaldatum = verticaldatum;
            _axisinfo= new IAxisInfo[1]{axisinfo};
            _units = units;
        }
        /// <summary>
        /// Initializes a new instance of the Projection class.
        /// </summary>
        /// <param name="verticaldatum">The vertical datum the coordiniate system is to use.</param>
        /// <param name="axisinfo">Axis information.</param>
        /// <param name="linearUnit">The units this coordinate system uses.</param>
        /// <param name="remarks">Remarks about this object.</param>
        /// <param name="authority">The name of the authority.</param>
        /// <param name="authorityCode">The code the authority uses to identidy this object.</param>
        /// <param name="name">The name of the object.</param>
        /// <param name="alias">The alias of the object.</param>
        /// <param name="abbreviation">The abbreviated name of this object.</param>
        public VerticalCoordinateSystem(string name,
                                        IVerticalDatum verticaldatum,
                                        IAxisInfo axisinfo,
                                        ILinearUnit linearUnit,
                                        string remarks, string authority, string authorityCode, string alias, string abbreviation)
            : base(remarks, authority, authorityCode, name, alias, abbreviation)
        {
            if (verticaldatum == null)
            {
                throw new ArgumentNullException("verticaldatum");
            }

            _verticaldatum = verticaldatum;
            _axisinfo      = new IAxisInfo[1] {
                axisinfo
            };
            _units = linearUnit;
        }
Exemple #13
0
        /// <summary>
        /// Creates a vertical coordinate system from a datum and linear units
        /// </summary>
        /// <param name="name">The name of the vertical coordinate system.</param>
        /// <param name="verticalDatum">The vertical datum to use.</param>
        /// <param name="verticalUnit">The units to use.</param>
        /// <param name="axis">The axis to use.</param>
        /// <returns>An an object that implements the IVerticalCoordinateSystem interface.</returns>
        public IVerticalCoordinateSystem CreateVerticalCoordinateSystem(string name, IVerticalDatum verticalDatum, ILinearUnit verticalUnit, IAxisInfo axis)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (verticalDatum == null)
            {
                throw new ArgumentNullException("verticalDatum");
            }
            if (verticalUnit == null)
            {
                throw new ArgumentNullException("verticalUnit");
            }
            VerticalCoordinateSystem verticalCS = new VerticalCoordinateSystem(name, verticalDatum, axis, verticalUnit);

            return(verticalCS);
        }
Exemple #14
0
        private static IVerticalCoordinateSystem ReadVerticalCoordinateSystem(XmlTextReader reader)
        {
            /*
             * <?xml version="1.0"?>
             *      <IVerticalCoordinateSystem>
             * <IInfo AuthorityCode="5701" Abbreviation="ODN" Authority="EPSG" Name="Newlyn"/>
             * <IAxisInfo Name="Up" Orientation="UP"/>
             * <IVerticalDatum DatumType="2005">
             * <IInfo AuthorityCode="5101" Abbreviation="ODN" Authority="EPSG" Name="Ordnance Datum Newlyn"/>
             * </IVerticalDatum>
             * <ILinearUnit MetersPerUnit="1">
             * <IInfo AuthorityCode="9001" Abbreviation="m" Authority="EPSG" Name="metre"/>
             * </ILinearUnit>
             * </IVerticalCoordinateSystem>
             */
            if (!(reader.NodeType == XmlNodeType.Element && reader.Name == "CS_VerticalCoordinateSystem"))
            {
                throw new ParseException(String.Format("Expected a IVerticalCoordinateSystem but got a {0} at line {1} col {2}", reader.Name, reader.LineNumber, reader.LinePosition));
            }
            string authority = "", authorityCode = "", abbreviation = "", name = "";

            reader.Read();
            ReadInfo(reader, ref authority, ref authorityCode, ref abbreviation, ref name);
            //reader.Read();
            ArrayList list = new ArrayList();

            while (reader.NodeType == XmlNodeType.Element && reader.Name == "CS_AxisInfo")
            {
                IAxisInfo axis = ReadAxisInfo(reader);
                list.Add(axis);
                reader.Read();
            }
            IAxisInfo[] axisInfos = new IAxisInfo[list.Count];
            axisInfos = (IAxisInfo[])list.ToArray(typeof(IAxisInfo));
            IVerticalDatum verticalDatum = ReadVerticalDatum(reader);
            ILinearUnit    linearUnit    = ReadLinearUnit(reader);

            reader.Read();
            reader.Read();
            VerticalCoordinateSystem verticalCoordinateSystem = new VerticalCoordinateSystem(name, verticalDatum, axisInfos[0], linearUnit, "", authority, authorityCode, "", abbreviation);

            return(verticalCoordinateSystem);
        }
        /// <summary>
        /// Initializes a new instance of the Projection class.
        /// </summary>
        /// <param name="name">The name of the coordinate system.</param>
        /// <param name="verticaldatum">The vertical datum the coordiniate system is to use.</param>
        /// <param name="axisinfo">Axis information.</param>
        /// <param name="units">The units this coordinae system uses.</param>
        internal VerticalCoordinateSystem(string name, IVerticalDatum verticaldatum, IAxisInfo axisinfo, ILinearUnit units)
            : base(name, "", "", "", "", "")
        {
            if (verticaldatum == null)
            {
                throw new ArgumentNullException("verticaldatum");
            }
            if (units == null)
            {
                throw new ArgumentNullException("units");
            }

            _name          = name;
            _verticaldatum = verticaldatum;
            _axisinfo      = new IAxisInfo[1] {
                axisinfo
            };
            _units = units;
        }
        /// <summary>
        /// Creates a new vertical coordinate system object from a code.
        /// </summary>
        /// <param name="code">The EPSG code.</param>
        /// <returns>An object that implements the IVerticalCoordinateSystem interface.</returns>
        public IVerticalCoordinateSystem CreateVerticalCoordinateSystem(string code)
        {
            if (code == null)
            {
                throw new ArgumentNullException("code");
            }
            string sqlQuery = "SELECT COORD_REF_SYS_NAME, COORD_REF_SYS_CODE, AREA_OF_USE_CODE, " +
                              "	COORD_REF_SYS_KIND, DATUM_CODE, COORD_SYS_CODE, " +
                              "	SOURCE_GEOGCRS_CODE, PROJECTION_CONV_CODE, CMPD_VERTCRS_CODE, CRS_SCOPE, CMPD_HORIZCRS_CODE, DATA_SOURCE, REMARKS " +
                              "FROM  [Coordinate Reference System] " +
                              "WHERE COORD_REF_SYS_CODE = {0}";


            sqlQuery = String.Format(System.Globalization.CultureInfo.InvariantCulture, sqlQuery, code);
            IDataReader reader = Database.ExecuteQuery(_databaseConnection, sqlQuery);

            if (!reader.Read())
            {
                throw new ArgumentException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "Geographic Coordinate System with a code {0} not found in the CRS table in the EPSG database.", code));
            }


            string coordSysCode      = reader["COORD_SYS_CODE"].ToString().ToLower();
            string coordSysName      = reader["COORD_REF_SYS_NAME"].ToString();
            string name              = reader["COORD_REF_SYS_NAME"].ToString();
            string verticalDatumCode = reader["DATUM_CODE"].ToString();
            string coordRefKind      = reader["COORD_REF_SYS_KIND"].ToString();
            string remarks           = reader["REMARKS"].ToString();
            string datasource        = reader["DATA_SOURCE"].ToString();      // should always be EPSG??


            Database.CheckOneRow(reader, code, "Coordinate Reference System");
            if (coordRefKind.ToLower() != "vertical")
            {
                throw new ArgumentException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "CRS code {0} is not a projected coordinate system but a {1}.", code, coordRefKind));
            }

            IVerticalDatum           verticalDatum = this.CreateVerticalDatum(verticalDatumCode);
            VerticalCoordinateSystem vrs           = new VerticalCoordinateSystem(coordSysName, verticalDatum, remarks, datasource, code, "", "");

            return(vrs);
        }
		/// <summary>
		/// Creates a vertical coordinate system from a datum and linear units
		/// </summary>
		/// <param name="name">The name of the vertical coordinate system.</param>
		/// <param name="verticalDatum">The vertical datum to use.</param>
		/// <param name="verticalUnit">The units to use.</param>
		/// <param name="axis">The axis to use.</param>
		/// <returns>An an object that implements the IVerticalCoordinateSystem interface.</returns>
		public IVerticalCoordinateSystem CreateVerticalCoordinateSystem(string name, IVerticalDatum verticalDatum, ILinearUnit verticalUnit, IAxisInfo axis)
		{
			if (name==null)
			{
				throw new ArgumentNullException("name");
			}
			if (verticalDatum==null)
			{
				throw new ArgumentNullException("verticalDatum");
			}
			if (verticalUnit==null)
			{
				throw new ArgumentNullException("verticalUnit");
			}
			VerticalCoordinateSystem verticalCS = new VerticalCoordinateSystem(name, verticalDatum, axis, verticalUnit);
			return verticalCS; 
		}
Exemple #18
0
 /// <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();
 }
Exemple #19
0
 /// <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();
 }
		private static void WriteVerticalDatum(IVerticalDatum verticalDatum, IndentedTextWriter writer)
		{
			writer.WriteLine("VERT_DATUM[");
			writer.Indent=writer.Indent+1;
			writer.WriteLine(String.Format("\"{0}\",{1},", verticalDatum.Name, DatumTypeAsCode(verticalDatum.DatumType)));
			writer.WriteLine(String.Format("AUTHORITY[\"{0}\",\"{1}\"]", verticalDatum.Authority, verticalDatum.AuthorityCode));
			writer.Indent=writer.Indent-1;
			writer.WriteLine("]");
		}
        public void TestCreateVerticalDatumTest1()
        {
            IVerticalDatum verticalDatum = _factory.CreateVerticalDatum("5101");

            Assertion.AssertEquals("VeticalDatum ctor1.", "Ordnance Datum Newlyn", verticalDatum.Name);
        }
Exemple #22
0
 public VerticalCoordinateSystem(string name, string authority, string authorityCode, string alias, string info, ILinearUnit linearUnit, IVerticalDatum verticalDatum, AxisInfo axis1) => throw null;
        /// <summary>
        /// Initializes a new instance of the Projection class. The units are set to meters and the axis is set to represent altitude.
        /// </summary>
        /// <param name="verticaldatum"></param>
        /// <param name="remarks">Remarks about this object.</param>
        /// <param name="authority">The name of the authority.</param>
        /// <param name="authorityCode">The code the authority uses to identidy this object.</param>
        /// <param name="name">The name of the object.</param>
        /// <param name="alias">The alias of the object.</param>
        /// <param name="abbreviation">The abbreviated name of this object.</param>
        internal VerticalCoordinateSystem(
			string name,
			IVerticalDatum verticaldatum,
			string remarks, string authority, string authorityCode, string alias, string abbreviation)
            : base(remarks, authority,  authorityCode,name, alias, abbreviation)
        {
            if (verticaldatum==null)
            {
                throw new ArgumentNullException("verticaldatum");
            }
            _verticaldatum = verticaldatum;
            _units = LinearUnit.Meters;
            _axisinfo= new IAxisInfo[1]{AxisInfo.Altitude};
        }
        /// <summary>
        /// Creates the appropriate object given a string containing XML.
        /// </summary>
        /// <param name="wkt">String containing XML.</param>
        /// <returns>Object representation of the XML.</returns>
        /// <exception cref="ParseException">If a token is not recognised.</exception>
        public static object Create(string wkt)
        {
            object             returnObject = null;
            StringReader       reader       = new StringReader(wkt);
            WktStreamTokenizer tokenizer    = new WktStreamTokenizer(reader);

            tokenizer.NextToken();
            string objectName = tokenizer.GetStringValue();

            switch (objectName)
            {
            case "UNIT":
                IUnit unit = ReadUnit(tokenizer);
                returnObject = unit;
                break;

            case "VERT_DATUM":
                IVerticalDatum verticalDatum = ReadVerticalDatum(tokenizer);
                returnObject = verticalDatum;
                break;

            case "SPHEROID":
                IEllipsoid ellipsoid = ReadEllipsoid(tokenizer);
                returnObject = ellipsoid;
                break;

            case "TOWGS84":
                WGS84ConversionInfo wgsInfo = ReadWGS84ConversionInfo(tokenizer);
                returnObject = wgsInfo;
                break;

            case "DATUM":
                IHorizontalDatum horizontalDatum = ReadHorizontalDatum(tokenizer);
                returnObject = horizontalDatum;
                break;

            case "PRIMEM":
                IPrimeMeridian primeMeridian = ReadPrimeMeridian(tokenizer);
                returnObject = primeMeridian;
                break;

            case "VERT_CS":
                IVerticalCoordinateSystem verticalCS = ReadVerticalCoordinateSystem(tokenizer);
                returnObject = verticalCS;
                break;

            case "GEOGCS":
                IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer);
                returnObject = geographicCS;
                break;

            case "PROJCS":
                IProjectedCoordinateSystem projectedCS = ReadProjectedCoordinateSystem(tokenizer);
                returnObject = projectedCS;
                break;

            case "COMPD_CS":
                ICompoundCoordinateSystem compoundCS = ReadCompoundCoordinateSystem(tokenizer);
                returnObject = compoundCS;
                break;

            case "GEOCCS":
            case "FITTED_CS":
            case "LOCAL_CS":
                throw new NotSupportedException(String.Format("{0} is not implemented.", objectName));

            default:
                throw new ParseException(String.Format("'{0'} is not recongnized.", objectName));
            }
            reader.Close();
            return(returnObject);
        }
 private static void WriteVerticalDatum(IVerticalDatum verticalDatum, IndentedTextWriter writer)
 {
     writer.WriteLine("VERT_DATUM[");
     writer.Indent=writer.Indent+1;
     writer.WriteLine(String.Format(System.Globalization.CultureInfo.InvariantCulture, "\"{0}\",{1},", verticalDatum.Name, DatumTypeAsCode(verticalDatum.DatumType)));
     writer.WriteLine(String.Format(System.Globalization.CultureInfo.InvariantCulture, "AUTHORITY[\"{0}\",\"{1}\"]", verticalDatum.Authority, verticalDatum.AuthorityCode));
     writer.Indent=writer.Indent-1;
     writer.WriteLine("]");
 }
Exemple #26
0
        public static object Create(XmlTextReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            // we don't want to handle whitespace
            reader.WhitespaceHandling = WhitespaceHandling.None;
            object returnObject = null;

            reader.Read();


            // skip declarions and comments.
            while (reader.NodeType != XmlNodeType.Element)
            {
                reader.Read();
            }

            if (reader.NodeType == XmlNodeType.Element)
            {
                switch (reader.Name)
                {
                case "CS_LinearUnit":
                    ILinearUnit linearUnit = ReadLinearUnit(reader);
                    returnObject = linearUnit;
                    break;

                case "CS_AngularUnit":
                    IAngularUnit angularUnit = ReadAngularUnit(reader);
                    returnObject = angularUnit;
                    break;

                case "CS_VerticalDatum":
                    IVerticalDatum verticalDatum = ReadVerticalDatum(reader);
                    returnObject = verticalDatum;
                    break;

                case "CS_Ellipsoid":
                    IEllipsoid ellipsoid = ReadEllipsoid(reader);
                    returnObject = ellipsoid;
                    break;

                case "CS_WGS84ConversionInfo":
                    WGS84ConversionInfo wgsInfo = ReadWGS84ConversionInfo(reader);
                    returnObject = wgsInfo;
                    break;

                case "CS_HorizontalDatum":
                    IHorizontalDatum horizontalDatum = ReadHorizontalDatum(reader);
                    returnObject = horizontalDatum;
                    break;

                case "CS_PrimeMeridian":
                    IPrimeMeridian primeMeridian = ReadPrimeMeridian(reader);
                    returnObject = primeMeridian;
                    break;

                case "CS_VerticalCoordinateSystem":
                    IVerticalCoordinateSystem verticalCS = ReadVerticalCoordinateSystem(reader);
                    returnObject = verticalCS;
                    break;

                case "CS_GeographicCoordinateSystem":
                    IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(reader);
                    returnObject = geographicCS;
                    break;

                case "CS_ProjectedCoordinateSystem":
                    IProjectedCoordinateSystem projectedCS = ReadProjectedCoordinateSystem(reader);
                    returnObject = projectedCS;
                    break;

                case "CS_CompoundCoordinateSystem":
                    ICompoundCoordinateSystem compoundCS = ReadCompoundCoordinateSystem(reader);
                    returnObject = compoundCS;
                    break;

                case "CS_Projection":
                    IProjection projection = ReadProjection(reader);
                    returnObject = projection;
                    break;

                case "CS_CoordinateSystem":
                    // must be a compound coord sys since all other coord system should have been
                    // taken care of by now.
                    reader.Read();
                    ICoordinateSystem coordinateSystem = ReadCompoundCoordinateSystem(reader);
                    reader.Read();
                    returnObject = coordinateSystem;
                    break;

                case "CS_GEOCCS":
                case "CS_FITTED_CS":
                case "CS_LOCAL_CS":
                    throw new NotSupportedException(String.Format("{0} is not implemented.", reader.Name));

                default:
                    throw new ParseException(String.Format("Element type {0} was is not understoon.", reader.Name));
                }
            }

            return(returnObject);
        }