ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Geometry Namespace / ProjectionTransformation Class / FindTransformations Method
The input spatial reference.
The output spatial reference.
(Optional) The bounding box of the area of interest. If provided, the extent of interest is used to return the most applicable transformations for the area. The spatial reference for the extent of interest is assumed to be the inputSR. The default value is null.
(Optional) The number of transformations to return. If numResults has a value of -1, then all applicable transformations are returned. The default value is 1.
(Optional) Specifies whether to check for vertical transformations or not. If vertical is set to true, both inputSR and outputSR must have a vertical coordinate system. The transformation in each ProjectionTransformation in the list is a CompositeHVDatumTransformation in this case. If vertical is set to false, the transformation in each ProjectionTransformation in the list is a CompositeGeographicTransformation. The default value is false.
Example

In This Topic
    FindTransformations Method
    In This Topic
    Gets the list of applicable transformations to use when projecting geometries from the input spatial reference to the output spatial reference.
    Syntax
    Public Shared Function FindTransformations( _
       ByVal inputSR As SpatialReference, _
       ByVal outputSR As SpatialReference, _
       Optional ByVal extentOfInterest As Envelope, _
       Optional ByVal numResults As Integer, _
       Optional ByVal vertical As Boolean _
    ) As List(Of ProjectionTransformation)

    Parameters

    inputSR
    The input spatial reference.
    outputSR
    The output spatial reference.
    extentOfInterest
    (Optional) The bounding box of the area of interest. If provided, the extent of interest is used to return the most applicable transformations for the area. The spatial reference for the extent of interest is assumed to be the inputSR. The default value is null.
    numResults
    (Optional) The number of transformations to return. If numResults has a value of -1, then all applicable transformations are returned. The default value is 1.
    vertical
    (Optional) Specifies whether to check for vertical transformations or not. If vertical is set to true, both inputSR and outputSR must have a vertical coordinate system. The transformation in each ProjectionTransformation in the list is a CompositeHVDatumTransformation in this case. If vertical is set to false, the transformation in each ProjectionTransformation in the list is a CompositeGeographicTransformation. The default value is false.

    Return Value

    Exceptions
    ExceptionDescription
    inputSR or outputSR is null.
    The vertical parameter is set to true and inputSR or outputSR does not have a vertical coordinate system.
    Remarks
    A geographic transformation is not needed when the input and output spatial references have the same underlying geographic coordinate systems. A vertical transformation is not needed if both datums (for ellipsoidal heights) or vertical datums (for gravity-related heights) are the same. In these cases an empty list is returned.
    Example
    Determine Transformations
    // methods need to run on the MCT
    ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
    {
      //
      // find the first transformation used between spatial references 4267 and 4326
      //
      SpatialReference sr4267 = 
           SpatialReferenceBuilder.CreateSpatialReference(4267);
      SpatialReference sr4326 = SpatialReferences.WGS84;
    
      List<ProjectionTransformation> transformations = 
             ProjectionTransformation.FindTransformations(sr4267, sr4326);
      // transformations.Count = 1
      ProjectionTransformation projTrans = transformations[0];
      CompositeGeographicTransformation compositeGT = 
           projTrans.Transformation as CompositeGeographicTransformation;
      GeographicTransformation gt = compositeGT[0];
      // gt.Wkid = 15851
      // gt.Name = "NAD_1927_To_WGS_1984_79_CONUS"
      // gt.IsForward = true
    
    
      //
      // find the first five transformation used between spatial references 4267 and 4326
      //
      transformations = ProjectionTransformation.FindTransformations(
                                         sr4267, sr4326, numResults: 5);
      // transformations.Count = 5
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 15851
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_79_CONUS"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[1];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 1173
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_4"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[2];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 1172
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_3"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[3];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1241
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_NADCON"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 108190
      // compositeGT[1].Name = "WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[1].IsForward = false
    
      projTrans = transformations[4];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1241
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_NADCON"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 1515
      // compositeGT[1].Name = "NAD_1983_To_WGS_1984_5"
      // compositeGT[1].IsForward = true
    
    
      //
      // find the first transformation used between spatial
      // references 4267 and 4326 within Alaska
      //
    
      // Alaska
      Envelope envelope = EnvelopeBuilderEx.CreateEnvelope(-161, 61, -145, 69);
      transformations = ProjectionTransformation.FindTransformations(
                                                  sr4267, sr4326, envelope);
      // transformations.Count = 1
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1243
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_Alaska"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 108190
      // compositeGT[1].Name = "WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[1].IsForward = false
    
    
      //
      // find the first geographic transformation used between two spatial references with VCS  (use vertical = false)
      //
      SpatialReference inSR = 
                      SpatialReferenceBuilder.CreateSpatialReference(4269, 115702);
      SpatialReference outSR = 
                      SpatialReferenceBuilder.CreateSpatialReference(4326, 3855);
    
      // Even though each spatial reference has a VCS,
      // vertical = false should return geographic transformations.
      transformations = ProjectionTransformation.FindTransformations(inSR, outSR);
      // transformations.Count = 1
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 108190
      // compositeGT[0].Name = ""WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[0].IsForward = false
    
      //
      // find the first vertical transformation used between two spatial references with VCS  (use vertical = true)
      //
    
      transformations = 
                ProjectionTransformation.FindTransformations(
                                        inSR, outSR, vertical: true);
      // transformations.Count = 1
      projTrans = transformations[0];
    
      CompositeHVDatumTransformation compositeHV = 
              projTrans.Transformation as CompositeHVDatumTransformation;
      // compositeHV.Count = 2
      // compositeHV[0].Wkid = 1188
      // compositeHV[0].Name = "NAD_1983_To_WGS_1984_1"
      // compositeHV[0].IsForward = true
    
      // compositeHV[1].Wkid = 110019
      // compositeHV[1].Name = "WGS_1984_To_WGS_1984_EGM2008_2.5x2.5_Height"
      // compositeHV[1].IsForward = true
    });
    Determine Transformations
    // methods need to run on the MCT
    ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
    {
      //
      // find the first transformation used between spatial references 4267 and 4326
      //
      SpatialReference sr4267 = 
           SpatialReferenceBuilder.CreateSpatialReference(4267);
      SpatialReference sr4326 = SpatialReferences.WGS84;
    
      List<ProjectionTransformation> transformations = 
             ProjectionTransformation.FindTransformations(sr4267, sr4326);
      // transformations.Count = 1
      ProjectionTransformation projTrans = transformations[0];
      CompositeGeographicTransformation compositeGT = 
           projTrans.Transformation as CompositeGeographicTransformation;
      GeographicTransformation gt = compositeGT[0];
      // gt.Wkid = 15851
      // gt.Name = "NAD_1927_To_WGS_1984_79_CONUS"
      // gt.IsForward = true
    
    
      //
      // find the first five transformation used between spatial references 4267 and 4326
      //
      transformations = ProjectionTransformation.FindTransformations(
                                         sr4267, sr4326, numResults: 5);
      // transformations.Count = 5
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 15851
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_79_CONUS"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[1];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 1173
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_4"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[2];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 1172
      // compositeGT[0].Name = "NAD_1927_To_WGS_1984_3"
      // compositeGT[0].IsForward = true
    
      projTrans = transformations[3];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1241
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_NADCON"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 108190
      // compositeGT[1].Name = "WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[1].IsForward = false
    
      projTrans = transformations[4];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1241
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_NADCON"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 1515
      // compositeGT[1].Name = "NAD_1983_To_WGS_1984_5"
      // compositeGT[1].IsForward = true
    
    
      //
      // find the first transformation used between spatial
      // references 4267 and 4326 within Alaska
      //
    
      // Alaska
      Envelope envelope = EnvelopeBuilderEx.CreateEnvelope(-161, 61, -145, 69);
      transformations = ProjectionTransformation.FindTransformations(
                                                  sr4267, sr4326, envelope);
      // transformations.Count = 1
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 2
      // compositeGT[0].Wkid = 1243
      // compositeGT[0].Name = "NAD_1927_To_NAD_1983_Alaska"
      // compositeGT[0].IsForward = true
    
      // compositeGT[1].Wkid = 108190
      // compositeGT[1].Name = "WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[1].IsForward = false
    
    
      //
      // find the first geographic transformation used between two spatial references with VCS  (use vertical = false)
      //
      SpatialReference inSR = 
                      SpatialReferenceBuilder.CreateSpatialReference(4269, 115702);
      SpatialReference outSR = 
                      SpatialReferenceBuilder.CreateSpatialReference(4326, 3855);
    
      // Even though each spatial reference has a VCS,
      // vertical = false should return geographic transformations.
      transformations = ProjectionTransformation.FindTransformations(inSR, outSR);
      // transformations.Count = 1
      projTrans = transformations[0];
      compositeGT = projTrans.Transformation as CompositeGeographicTransformation;
      // compositeGT.Count = 1
      // compositeGT[0].Wkid = 108190
      // compositeGT[0].Name = ""WGS_1984_(ITRF00)_To_NAD_1983"
      // compositeGT[0].IsForward = false
    
      //
      // find the first vertical transformation used between two spatial references with VCS  (use vertical = true)
      //
    
      transformations = 
                ProjectionTransformation.FindTransformations(
                                        inSR, outSR, vertical: true);
      // transformations.Count = 1
      projTrans = transformations[0];
    
      CompositeHVDatumTransformation compositeHV = 
              projTrans.Transformation as CompositeHVDatumTransformation;
      // compositeHV.Count = 2
      // compositeHV[0].Wkid = 1188
      // compositeHV[0].Name = "NAD_1983_To_WGS_1984_1"
      // compositeHV[0].IsForward = true
    
      // compositeHV[1].Wkid = 110019
      // compositeHV[1].Name = "WGS_1984_To_WGS_1984_EGM2008_2.5x2.5_Height"
      // compositeHV[1].IsForward = true
    });
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also