GeoTransform.cs
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:5k
源码类别:

GIS编程

开发平台:

C#

  1. /*
  2.  * Erstellt mit SharpDevelop.
  3.  * Benutzer: Christian
  4.  * Datum: 11.01.2007
  5.  * Zeit: 20:38
  6.  * 
  7.  * Sie k鰊nen diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader 鋘dern.
  8.  */
  9. using System;
  10. namespace SharpMap.Layers
  11. {
  12.     /// <summary>
  13.     /// The coefficients for transforming between pixel/line (X,Y) raster space, and projection coordinates (Xp,Yp) space.<br/>
  14.     /// Xp = T[0] + T[1]*X + T[2]*Y<br/>
  15.     /// Yp = T[3] + T[4]*X + T[5]*Y<br/>
  16.     /// In a north up image, T[1] is the pixel width, and T[5] is the pixel height.
  17.     /// The upper left corner of the upper left pixel is at position (T[0],T[3]).
  18.     /// </summary>
  19.     internal class GeoTransform
  20.     {
  21.         internal double[] transform = new double[6];
  22. #region public properties
  23.         /// <summary>
  24.         /// returns value of the transform array
  25.         /// </summary>
  26.         /// <param name="i">place in array</param>
  27.         /// <returns>value depedent on i</returns>
  28. public double this[int i]
  29. {
  30. get { return transform[i]; }
  31. set { transform[i] = value; }
  32. }
  33.         /// <summary>
  34.         /// returns true if no values were fetched
  35.         /// </summary>
  36. bool IsTrivial
  37. {
  38. get
  39. {
  40. return transform[0] == 0 && transform[1] == 1 &&
  41. transform[2] == 0 && transform[3] == 0 &&
  42. transform[4] == 0 && transform[5] == 1;
  43. }
  44. }
  45.          /// <summary>
  46.         /// left value of the image
  47.         /// </summary>       
  48.         public double Left
  49.         {
  50.             get { return transform[0]; }
  51.         }
  52.         /// <summary>
  53.         /// top value of the image
  54.         /// </summary>
  55.         public double Top
  56.         {
  57.             get { return transform[3]; }
  58.         }       
  59.         /// <summary>
  60.         /// west to east pixel resolution
  61.         /// </summary>
  62.         public double HorizontalPixelResolution
  63.         {
  64.             get { return transform[1]; }
  65.         }
  66.         /// <summary>
  67.         /// north to south pixel resolution
  68.         /// </summary>
  69.         public double VerticalPixelResolution
  70.         {
  71.             get { return transform[5]; }
  72.         }
  73. #endregion
  74. #region constructors
  75.         /// <summary>
  76.         /// Constructor
  77.         /// </summary>
  78. public GeoTransform()
  79.         {
  80.             transform = new double[6];
  81.             transform[0] = 0; /* top left x */
  82.             transform[1] = 1; /* w-e pixel resolution */
  83.             transform[2] = 0; /* rotation, 0 if image is "north up" */
  84.             transform[3] = 0; /* top left y */
  85.             transform[4] = 0; /* rotation, 0 if image is "north up" */
  86.             transform[5] = 1; /* n-s pixel resolution */
  87.         }
  88.         /// <summary>
  89.         /// Constructor
  90.         /// </summary>
  91.         /// <param name="array"></param>
  92.         public GeoTransform(double[] array)
  93.         {
  94.             if (array.Length != 6)
  95.                 throw new ApplicationException("GeoTransform constructor invoked with invalid sized array");
  96.             transform = array;
  97. }
  98. #endregion
  99. #region public methods
  100.         /// <summary>
  101.         /// converts image point into projected point
  102.         /// </summary>
  103.         /// <param name="imgX">image x value</param>
  104.         /// <param name="imgY">image y value</param>
  105.         /// <returns>projected x coordinate</returns>
  106.         public double ProjectedX(double imgX, double imgY)
  107.         {
  108.             return transform[0] + transform[1] * imgX + transform[2] * imgY;
  109.         }
  110.         /// <summary>
  111.         /// converts image point into projected point
  112.         /// </summary>
  113.         /// <param name="imgX">image x value</param>
  114.         /// <param name="imgY">image y value</param>
  115.         /// <returns>projected y coordinate</returns>
  116.         public double ProjectedY(double imgX, double imgY)
  117.         {
  118.             return transform[3] + transform[4] * imgX + transform[5] * imgY;
  119. }
  120.         /// <summary>
  121.         /// converts latitude into pixel
  122.         /// </summary>
  123.         /// <param name="lat"></param>
  124.         /// <returns></returns>
  125.         public double PixelX(double lat)
  126.         {
  127.             return Math.Abs(transform[0] - lat) / transform[1];
  128.         }
  129.         /// <summary>
  130.         /// converts longitude into pixel
  131.         /// </summary>
  132.         /// <param name="lon"></param>
  133.         /// <returns></returns>
  134.         public double PixelY(double lon)
  135.         {
  136.             return Math.Abs(Math.Abs(transform[3] - lon) / transform[5]);
  137.         }
  138.         /// <summary>
  139.         /// 
  140.         /// </summary>
  141.         /// <param name="lat"></param>
  142.         /// <returns></returns>
  143.         public double PixelXwidth(double lat)
  144.         {
  145.             return Math.Abs(lat / transform[1]);
  146.         }
  147.         /// <summary>
  148.         /// 
  149.         /// </summary>
  150.         /// <param name="lon"></param>
  151.         /// <returns></returns>
  152.         public double PixelYwidth(double lon)
  153.         {
  154.             return Math.Abs(lon / transform[5]);
  155.         }
  156. #endregion
  157. }
  158. }