ArcObjects Library Reference  (Geometry)    

IAffineTransformation2D_Project_Example

[Visual Basic 6.0]
Private Sub Test() 'Set up spatial references Dim pSpatialReferenceEnv As SpatialReferenceEnvironment Set pSpatialReferenceEnv = New SpatialReferenceEnvironment Dim pFromSR As ISpatialReference Set pFromSR = pSpatialReferenceEnv.CreateGeographicCoordinateSystem(esriSRGeoCS_NAD1983) Dim pToSR As ISpatialReference Set pToSR = pSpatialReferenceEnv.CreateProjectedCoordinateSystem(esriSRProjCS_NAD1983UTM_10N) 'Set up Point for transforming Dim pPt As IPoint Dim pT2D As ITransform2D Set pPt = New Point pPt.PutCoords -122, 37 Set pPt.SpatialReference = pFromSR pPt.Project pToSR Set pT2D = pPt 'Set up Comparison Point 'This is the point the transformation should result in Dim pPt2 As IPoint Set pPt2 = New Point pPt2.PutCoords -121, 42 Set pPt2.SpatialReference = pFromSR pPt2.Project pToSR 'Transform Dim pA2D2 As IAffineTransformation2D2 Dim pA2D As IAffineTransformation2D Dim pOrigin As IPoint ' Set up Affine Transformation ' MoveOrigin is at the same location as the Point to be transformed: Yields accurate results Set pA2D2 = New AffineTransformation2D pA2D2.Move 1, 5 Set pA2D = pA2D2 Set pOrigin = New Point pOrigin.PutCoords -122, 37 pA2D.MoveOrigin = pOrigin Set pA2D.SpatialReference = pFromSR pA2D.Project pToSR ' Transform and report results Debug.Print "----Using MoveOrigin at the same location as the Point to be transformed----" Debug.Print "A2D XTrans: " & pA2D.XTranslation & ", YTrans: " & pA2D.YTranslation Debug.Print "A2D MoveOrigin X: " & pA2D2.MoveOrigin.x & ", Y: " & pA2D2.MoveOrigin.y Debug.Print "Before Trans, Point X:" & pPt.x & ", Y:" & pPt.y pT2D.Transform esriTransformForward, pA2D Debug.Print "After Trans, Point X:" & pPt.x & ", Y:" & pPt.y Debug.Print "Comparison, Point X:" & pPt2.x & ", Y:" & pPt2.y Debug.Print "Did X coordinates match? " & (pPt.x = pPt2.x) Debug.Print "Did Y coordinates match? " & (pPt.y = pPt2.y) ' Set up Affine Transformation ' MoveOrigin is at a slightly different location: Yields slightly inaccurate results Set pA2D2 = New AffineTransformation2D pA2D2.Move 1, 5 Set pA2D = pA2D2 Set pOrigin = New Point pOrigin.PutCoords -125, 35 pA2D.MoveOrigin = pOrigin Set pA2D.SpatialReference = pFromSR< BR > pA2D.Project pToSR ' Transform and report results Debug.Print "----Using MoveOrigin at a slightly different location----" Debug.Print "A2D XTrans: " & pA2D.XTranslation & ", YTrans: " & pA2D.YTranslation Debug.Print "A2D MoveOrigin X: " & pA2D2.MoveOrigin.x & ", Y: " & pA2D2.MoveOrigin.y Debug.Print "Before Trans, Point X:" & pPt.x & ", Y:" & pPt.y pT2D.Transform esriTransformForward, pA2D Debug.Print "After Trans, Point X:" & pPt.x & ", Y:" & pPt.y Debug.Print "Comparison, Point X:" & pPt2.x & ", Y:" & pPt2.y Debug.Print "Did X coordinates match? " & (pPt.x = pPt2.x) Debug.Print "Did Y coordinates match? " & (pPt.y = pPt2.y) End Sub

[C#]
public void Driver()
{
  Test(-122, 37);
  // MoveOrigin is at a slightly different location: Yields slightly inaccurate results
  Test(-125, 35);
}
private void Test(double originX, double originY)
{
  //Set up spatial references
  SpatialReferenceEnvironment spatialReferenceEnvironemnt = new SpatialReferenceEnvironment();
  ISpatialReference fromSpatialReference = spatialReferenceEnvironemnt.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
  ISpatialReference toSpatialReference = spatialReferenceEnvironemnt.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983UTM_10N);
  
  //Set up Point for transforming
  IPoint point = new PointClass();
  point.PutCoords(-122, 37);
  point.SpatialReference = fromSpatialReference;
  point.Project(toSpatialReference);
  ITransform2D transformator = point as ITransform2D;
  
  //up Comparison Point
  //This is the point the transformation should result in
  IPoint comparisonPoint = new PointClass();
  comparisonPoint.PutCoords(-121, 42);
  comparisonPoint.SpatialReference = fromSpatialReference;
  comparisonPoint.Project(toSpatialReference);
  
  //Transform
  //Set up Affine Transformation
  //MoveOrigin is at the same location as the Point to be transformed: Yields accurate results
  IAffineTransformation2D2 affineTranformation = new AffineTransformation2DClass() as IAffineTransformation2D2;
  affineTranformation.Move(1, 5);
  IPoint origin = new PointClass();
  origin.PutCoords(originX, originY);
  affineTranformation.MoveOrigin = origin;
  affineTranformation.SpatialReference = fromSpatialReference;
  affineTranformation.Project(toSpatialReference);
  
  //Transform and report results
  System.Windows.Forms.MessageBox.Show(
      "A2D XTrans: " + affineTranformation.XTranslation + ", YTrans: " + affineTranformation.YTranslation + "\n" +
      "A2D MoveOrigin X: " + affineTranformation.MoveOrigin_2.X + ", Y: " + affineTranformation.MoveOrigin_2.Y + "\n" +
      "Before Trans, Point X:" + point.X + ", Y:" + point.Z
  );
	
  transformator.Transform(esriTransformDirection.esriTransformForward, affineTranformation);
  System.Windows.Forms.MessageBox.Show(
      "After Trans,  Point X:" + point.X + ", Y:" + point.Y + "\n" +
      "Comparison,  Point X:" + comparisonPoint.X + ", Y:" + comparisonPoint.Y + "\n" +
      "Did X coordinates match? " + (point.X == comparisonPoint.X) + "\n" +
      "Did Y coordinates match? " + (point.Y == comparisonPoint.Y)
  );
}

[Visual Basic .NET, C++]
No example is available for Visual Basic .NET or C++. To view a Visual Basic 6.0 or C# example, click the Language Filter button Language Filter in the upper-left corner of the page.