Creating a predefined vertical coordinate system


Summary
This topic shows how to create an existing vertical coordinate system (VCS) or a list of an existing VCS.

About creating a predefined vertical coordinate system

The ISpatialReferenceFactory3 interface provides access for creating the VCS available in ArcGIS. You can return a single VCS with ISpatialReferenceFactory3.CreateVerticalCoordinateSystem. Similar to other coordinate system types, a list of VCS can be returned using ISpatialReferenceFactory3.CreatePredefinedVerticalCoordinateSystems.
See the following code example:
[C#]
private static void GetVCSList()
{

    // Set up the SpatialReferenceEnvironment.
    // SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.

    Type factoryType = Type.GetTypeFromProgID(
        "esriGeometry.SpatialReferenceEnvironment");
    System.Object obj = Activator.CreateInstance(factoryType);
    ISpatialReferenceFactory3 srFact3 = obj as ISpatialReferenceFactory3;

    ISet vcsSet = srFact3.CreatePredefinedVerticalCoordinateSystems();
    vcsSet.Reset();
    IVerticalCoordinateSystem vcs;

    for (int i = 0; i < vcsSet.Count; i++)
    {
        vcs = vcsSet.Next()as IVerticalCoordinateSystem;
        Console.WriteLine("VCS Name: {0} (Code: {1})", vcs.Name, vcs.FactoryCode);
    }

}
[VB.NET]
Private Sub GetVCSList()
    
    ' Set up the SpatialReferenceEnvironment.
    ' SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.
    
    ' Set up the SpatialReferenceEnvironment.
    ' SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.
    Dim factoryType As Type = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment")
    Dim spatialReferenceFactory As ISpatialReferenceFactory3 = CType(Activator.CreateInstance(factoryType), ISpatialReferenceFactory3)
    
    Dim vcsSet As ISet = spatialReferenceFactory.CreatePredefinedVerticalCoordinateSystems()
    vcsSet.Reset()
    Dim vcs As IVerticalCoordinateSystem
    
    For i As Integer = 0 To vcsSet.Count - 1
        vcs = CType(vcsSet.Next(), IVerticalCoordinateSystem)
        Console.WriteLine("VCS Name: {0} (Code: {1})", vcs.Name, vcs.FactoryCode)
    Next i
    
End Sub
The list of predefined vertical datums can also be accessed using a method similar to ISpatialReferenceFactory3.CreatePredefinedVerticalCoordinateSystems. The following code example retrieves the list of vertical datums defined by ArcGIS. This method is useful when populating a control with all the available VCS definitions.
[C#]
private static void GetVerticalDatumList()
{
    // Set up the SpatialReferenceEnvironment.
    // SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.

    Type t = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
    System.Object obj = Activator.CreateInstance(t);
    ISpatialReferenceFactory srFact = obj as ISpatialReferenceFactory;
    ISpatialReferenceFactory3 srFact3 = srFact as ISpatialReferenceFactory3;

    ISet vDatumSet = srFact3.CreatePredefinedVerticalDatums();
    vDatumSet.Reset();
    IVerticalDatum vDatum;

    for (int i = 0; i < vDatumSet.Count; i++)
    {
        vDatum = vDatumSet.Next()as IVerticalDatum;
        Console.WriteLine("VDatum Name: {0} (Code: {1})", vDatum.Name,
            vDatum.FactoryCode);
    }
}
[VB.NET]
Private Sub GetVerticalDatumList()
    ' Set up the SpatialReferenceEnvironment.
    ' SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.
    
    Dim t As Type = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment")
    Dim obj As System.Object = Activator.CreateInstance(t)
    Dim srFact As ESRI.ArcGIS.Geometry.ISpatialReferenceFactory = obj
    Dim srFact3 As ISpatialReferenceFactory3 = srFact
    
    Dim vDatumSet As ISet = srFact3.CreatePredefinedVerticalDatums();
    vDatumSet.Reset()
    Dim vDatum As IVerticalDatum
    
    For i As Integer = 0 To vDatumSet.Count - 1
        vDatum = vDatumSet.Next()
        Console.WriteLine("VDatum Name: {0} (Code: {1})", vDatum.Name, vDatum.FactoryCode)
    Next i
End Sub
If you know the VCS or vertical datum you want to work with, use ISpatialReferenceFactory3.CreateVerticalCoordinateSystem or ISpatialReferenceFactory3.CreateVerticalDatum, then pass in the appropriate factory code. See the following code example:
[C#]
private void CreateVerticalReferenceSystem()
{
    // Set up the SpatialReferenceEnvironment.
    // SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.

    Type t = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
    System.Object obj = Activator.CreateInstance(t);
    ISpatialReferenceFactory3 srFact3 = obj as ISpatialReferenceFactory3;

    // Dimension a vertical datum and VCS.
    // Use the enumerations to create instances of the predefined objects.

    IVerticalDatum verticalDatum = srFact3.CreateVerticalDatum((int)
        esriSRVerticalDatumType.esriSRVertDatum_Alicante);
    IVerticalCoordinateSystem verticalCoordinateSystem =
        srFact3.CreateVerticalCoordinateSystem((int)
        esriSRVerticalCSType.esriSRVertCS_Alicante);
}
[VB.NET]
Private Sub CreateVerticalReferenceSystem()
    ' Set up the SpatialReferenceEnvironment.
    ' SpatialReferenceEnvironment is a singleton object and needs to use the Activator class.
    
    Dim t As Type = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment")
    Dim obj As System.Object = Activator.CreateInstance(t)
    Dim srFact3 As ESRI.ArcGIS.Geometry.ISpatialReferenceFactory3 = obj
    
    ' Dimension a vertical datum and VCS.
    ' Use the enumerations to create instances of the predefined objects.
    
    Dim verticalDatum As IVerticalDatum = srFact3.CreateVerticalDatum(esriSRVerticalDatumType.esriSRVertDatum_Alicante)
    Dim verticalCoordinateSystem As IVerticalCoordinateSystem = srFact3.CreateVerticalCoordinateSystem(esriSRVerticalCSType.esriSRVertCS_Alicante)
End Sub


See Also:

Creating a custom vertical coordinate system




To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing Deployment licensing
ArcGIS for Desktop Basic ArcGIS for Desktop Basic
ArcGIS for Desktop Standard ArcGIS for Desktop Standard
ArcGIS for Desktop Advanced ArcGIS for Desktop Advanced
Engine Developer Kit Engine