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(); }
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("]"); }
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 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); }
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; }
/// <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); }
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; }
/// <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); }
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("]"); }
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); }