亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? datum.c

?? 給予QT的qps開源最新源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
 
  /* Set WGS84 ellipsoid params */
  WGS84_Parameters(&a_84, &f_84);
  Set_Geocentric_Parameters(a_84, f_84);
  Convert_Geocentric_To_Geodetic(X_WGS84, Y_WGS84, Z_WGS84, &Lat_84, &Lon_84, &Hgt_84);
  Geodetic_Shift_WGS84_To_WGS72(Lat_84, Lon_84, Hgt_84, &Lat_72, &Lon_72,
                                &Hgt_72);
  /* Set WGS72 ellipsoid params */
  WGS72_Parameters(&a_72, &f_72);
  Set_Geocentric_Parameters(a_72, f_72);
  Convert_Geodetic_To_Geocentric(Lat_72, Lon_72, Hgt_72, X, Y, Z);
} /* End Geocentric_Shift_WGS84_To_WGS72 */


long Geocentric_Shift_To_WGS84(const long Index,
                               const double X,
                               const double Y,
                               const double Z,
                               double *X_WGS84,
                               double *Y_WGS84,
                               double *Z_WGS84)

{ /* Begin Geocentric_Shift_To_WGS84 */
  /*
   *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
   *  to the datum referenced by index to a geocentric coordinate (X, Y, Z in
   *  meters) relative to WGS84.
   *
   *  Index   : Index of source datum                         (input)
   *  X       : X coordinate relative to the source datum     (input)
   *  Y       : Y coordinate relative to the source datum     (input)
   *  Z       : Z coordinate relative to the source datum     (input)
   *  X_WGS84 : X coordinate relative to WGS84                (output)
   *  Y_WGS84 : Y coordinate relative to WGS84                (output)
   *  Z_WGS84 : Z coordinate relative to WGS84                (output)
   */
  Datum_Row *local;
  long error_code = DATUM_NO_ERROR;

  if (Datum_Initialized)
  {
    if ((Index < 1) || (Index > Number_of_Datums))
      error_code |= DATUM_INVALID_SRC_INDEX_ERROR;
    if (!error_code)
    {
      local = Datum_Table[Index-1];
      switch (local->Type)
      {
      case WGS72_Datum:
        {
          Geocentric_Shift_WGS72_To_WGS84(X, Y, Z, X_WGS84, Y_WGS84, Z_WGS84);
          break;
        }
      case WGS84_Datum:
        {          
          *X_WGS84 = X;
          *Y_WGS84 = Y;
          *Z_WGS84 = Z;
          break;
        }
      case Seven_Param_Datum:
        {
          *X_WGS84 = X + local->Parameters[0] + local->Parameters[5] * Y
                     - local->Parameters[4] * Z + local->Parameters[6] * X;
          *Y_WGS84 = Y + local->Parameters[1] - local->Parameters[5] * X
                     + local->Parameters[3] * Z + local->Parameters[6] * Y;
          *Z_WGS84 = Z + local->Parameters[2] + local->Parameters[4] * X
                     - local->Parameters[3] * Y + local->Parameters[6] * Z;
          break;
        }
      case Three_Param_Datum:
        {
          *X_WGS84 = X + local->Parameters[0];
          *Y_WGS84 = Y + local->Parameters[1];
          *Z_WGS84 = Z + local->Parameters[2];
          break;
        }
      } /* End switch */
    }
  }
  else
  {
    error_code |= DATUM_NOT_INITIALIZED_ERROR;
  }
  return (error_code);
} /* End Geocentric_Shift_To_WGS84 */


long Geocentric_Shift_From_WGS84(const double X_WGS84,
                                 const double Y_WGS84,
                                 const double Z_WGS84,
                                 const long Index,
                                 double *X,
                                 double *Y,
                                 double *Z)

{ /* Begin Geocentric_Shift_From_WGS84 */
  /*
   *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
   *  to WGS84 to a geocentric coordinate (X, Y, Z in meters) relative to the
   *  local datum referenced by index.
   *
   *  X_WGS84 : X coordinate relative to WGS84                      (input)
   *  Y_WGS84 : Y coordinate relative to WGS84                      (input)
   *  Z_WGS84 : Z coordinate relative to WGS84                      (input)
   *  Index   : Index of destination datum                          (input)
   *  X       : X coordinate relative to the destination datum      (output)
   *  Y       : Y coordinate relative to the destination datum      (output)
   *  Z       : Z coordinate relative to the destination datum      (output)
   */
  Datum_Row *local;
  long error_code = DATUM_NO_ERROR;

  if (Datum_Initialized)
  {
    if ((Index < 1) || (Index > Number_of_Datums))
      error_code |= DATUM_INVALID_DEST_INDEX_ERROR;
    if (!error_code)
    {
      local = Datum_Table[Index-1];
      switch (local->Type)
      {
      case WGS72_Datum:
        {
          Geocentric_Shift_WGS84_To_WGS72(X_WGS84, Y_WGS84, Z_WGS84, X, Y, Z);
          break;
        }
      case WGS84_Datum:
        {
          *X = X_WGS84;
          *Y = Y_WGS84;
          *Z = Z_WGS84;    
          break;
        }
      case Seven_Param_Datum:
        {
          *X = X_WGS84 - local->Parameters[0] - local->Parameters[5] * Y_WGS84
               + local->Parameters[4] * Z_WGS84 - local->Parameters[6] * X_WGS84;
          *Y = Y_WGS84 - local->Parameters[1] + local->Parameters[5] * X_WGS84
               - local->Parameters[3] * Z_WGS84 - local->Parameters[6] * Y_WGS84;
          *Z = Z_WGS84 - local->Parameters[2] - local->Parameters[4] * X_WGS84
               + local->Parameters[3] * Y_WGS84 - local->Parameters[6] * Z_WGS84;
          break;
        }
      case Three_Param_Datum:
        {
          *X = X_WGS84 - local->Parameters[0];
          *Y = Y_WGS84 - local->Parameters[1];
          *Z = Z_WGS84 - local->Parameters[2];
          break;
        }
      } /* End switch */
    }
  }
  else
  {
    error_code |= DATUM_NOT_INITIALIZED_ERROR;
  }
  return (error_code);
} /* End Geocentric_Shift_From_WGS84 */


long Geocentric_Datum_Shift (const long Index_in,
                             const double X_in,
                             const double Y_in,
                             const double Z_in,
                             const long Index_out,
                             double *X_out,
                             double *Y_out,
                             double *Z_out)

{ /* Begin Geocentric_Datum_Shift */
  /*
   *  This function shifts a geocentric coordinate (X, Y, Z in meters) relative
   *  to the source datum to geocentric coordinate (X, Y, Z in meters) relative
   *  to the destination datum.
   *
   *  Index_in  : Index of source datum                      (input)
   *  X_in      : X coordinate relative to source datum      (input)
   *  Y_in      : Y coordinate relative to source datum      (input)
   *  Z_in      : Z coordinate relative to source datum      (input)
   *  Index_out : Index of destination datum                 (input)
   *  X_out     : X coordinate relative to destination datum (output)
   *  Y_out     : Y coordinate relative to destination datum (output)
   *  Z_out     : Z coordinate relative to destination datum (output)
   */
  long error_code = DATUM_NO_ERROR;
  double X_WGS84;
  double Y_WGS84;
  double Z_WGS84;

  if (Datum_Initialized)
  {
    if ((Index_in < 1) || (Index_in > Number_of_Datums))
      error_code |= DATUM_INVALID_SRC_INDEX_ERROR;
    if ((Index_out < 1) || (Index_out > Number_of_Datums))
      error_code |= DATUM_INVALID_DEST_INDEX_ERROR;
    if (!error_code)
    {
      if (Index_in == Index_out)
      {
        *X_out = X_in;
        *Y_out = Y_in;
        *Z_out = Z_in;  
      }
      else
      {
        Geocentric_Shift_To_WGS84(Index_in, X_in, Y_in, Z_in, &X_WGS84,
                                  &Y_WGS84,&Z_WGS84);
        Geocentric_Shift_From_WGS84(X_WGS84, Y_WGS84, Z_WGS84, Index_out,
                                    X_out, Y_out, Z_out);      
      }
    }
  }
  else
  {
    error_code |= DATUM_NOT_INITIALIZED_ERROR;
  }
  return (error_code);
} /* End Geocentric_Datum_Shift */


void Geodetic_Shift_WGS72_To_WGS84( const double WGS72_Lat,
                                    const double WGS72_Lon,
                                    const double WGS72_Hgt,
                                    double *WGS84_Lat,
                                    double *WGS84_Lon,
                                    double *WGS84_Hgt)

{ /* Begin Geodetic_Shift_WGS72_To_WGS84 */
  /*
   *  This function shifts a geodetic coordinate (latitude, longitude in radians
   *  and height in meters) relative to WGS72 to a geodetic coordinate 
   *  (latitude, longitude in radians and height in meters) relative to WGS84.
   *
   *  WGS72_Lat : Latitude in radians relative to WGS72     (input)
   *  WGS72_Lon : Longitude in radians relative to WGS72    (input)
   *  WGS72_Hgt : Height in meters relative to WGS72        (input)
   *  WGS84_Lat : Latitude in radians relative to WGS84     (output)
   *  WGS84_Lon : Longitude in radians relative to WGS84    (output)
   *  WGS84_Hgt : Height in meters  relative to WGS84       (output)
   */
  double Delta_Lat;
  double Delta_Lon;
  double Delta_Hgt;
  double WGS84_a;       /* Semi-major axis of WGS84 ellipsoid               */
  double WGS84_f;       /* Flattening of WGS84 ellipsoid                    */
  double WGS72_a;       /* Semi-major axis of WGS72 ellipsoid               */
  double WGS72_f;       /* Flattening of WGS72 ellipsoid                    */
  double da;            /* WGS84_a - WGS72_a                                */
  double df;            /* WGS84_f - WGS72_f                                */
  double Q;
  double sin_Lat;
  double sin2_Lat;

  WGS84_Parameters( &WGS84_a, &WGS84_f );  
  WGS72_Parameters( &WGS72_a, &WGS72_f );  
  da = WGS84_a - WGS72_a;
  df = WGS84_f - WGS72_f;
  Q = PI /  648000;
  sin_Lat = sin(WGS72_Lat);
  sin2_Lat = sin_Lat * sin_Lat;

  Delta_Lat = (4.5 * cos(WGS72_Lat)) / (WGS72_a*Q) + (df * sin(2*WGS72_Lat)) / Q;
  Delta_Lat /= SECONDS_PER_RADIAN;
  Delta_Lon = 0.554 / SECONDS_PER_RADIAN;
  Delta_Hgt = 4.5 * sin_Lat + WGS72_a * df * sin2_Lat - da + 1.4;

  *WGS84_Lat = WGS72_Lat + Delta_Lat;
  *WGS84_Lon = WGS72_Lon + Delta_Lon;
  *WGS84_Hgt = WGS72_Hgt + Delta_Hgt;
} /* End Geodetic_Shift_WGS72_To_WGS84 */


void Geodetic_Shift_WGS84_To_WGS72( const double WGS84_Lat,
                                    const double WGS84_Lon,
                                    const double WGS84_Hgt,
                                    double *WGS72_Lat,
                                    double *WGS72_Lon,
                                    double *WGS72_Hgt)

{ /* Begin Geodetic_Shift_WGS84_To_WGS72 */
  /*
   *  This function shifts a geodetic coordinate (latitude, longitude in radians
   *  and height in meters) relative to WGS84 to a geodetic coordinate 
   *  (latitude, longitude in radians and height in meters) relative to WGS72.
   *
   *  WGS84_Lat : Latitude in radians relative to WGS84     (input)
   *  WGS84_Lon : Longitude in radians relative to WGS84    (input)
   *  WGS84_Hgt : Height in meters  relative to WGS84       (input)
   *  WGS72_Lat : Latitude in radians relative to WGS72     (output)
   *  WGS72_Lon : Longitude in radians relative to WGS72    (output)
   *  WGS72_Hgt : Height in meters relative to WGS72        (output)
   */
  double Delta_Lat;
  double Delta_Lon;
  double Delta_Hgt;
  double WGS84_a;       /* Semi-major axis of WGS84 ellipsoid               */
  double WGS84_f;       /* Flattening of WGS84 ellipsoid                    */
  double WGS72_a;       /* Semi-major axis of WGS72 ellipsoid               */
  double WGS72_f;       /* Flattening of WGS72 ellipsoid                    */
  double da;            /* WGS72_a - WGS84_a                                */
  double df;            /* WGS72_f - WGS84_f                                */
  double Q;
  double sin_Lat;
  double sin2_Lat;

  WGS84_Parameters( &WGS84_a, &WGS84_f );  
  WGS72_Parameters( &WGS72_a, &WGS72_f );  
  da = WGS72_a - WGS84_a;
  df = WGS72_f - WGS84_f;
  Q = PI / 648000;
  sin_Lat = sin(WGS84_Lat);
  sin2_Lat = sin_Lat * sin_Lat;

  Delta_Lat = (-4.5 * cos(WGS84_Lat)) / (WGS84_a*Q)
              + (df * sin(2*WGS84_Lat)) / Q;
  Delta_Lat /= SECONDS_PER_RADIAN;
  Delta_Lon = -0.554 / SECONDS_PER_RADIAN;
  Delta_Hgt = -4.5 * sin_Lat + WGS84_a * df * sin2_Lat - da - 1.4;

  *WGS72_Lat = WGS84_Lat + Delta_Lat;
  *WGS72_Lon = WGS84_Lon + Delta_Lon;
  *WGS72_Hgt = WGS84_Hgt + Delta_Hgt;
} /* End Geodetic_Shift_WGS84_To_WGS72 */


void Molodensky_Shift( const double a,
                       const double da,
                       const double f,
                       const double df,
                       const double dx,
                       const double dy,
                       const double dz,
                       const double Lat_in,
                       const double Lon_in,
                       const double Hgt_in,
                       double *Lat_out,
                       double *Lon_out,
                       double *Hgt_out)

{ /* Begin Molodensky_Shift */
  /*
   *  This function shifts geodetic coordinates using the Molodensky method.
   *
   *    a         : Semi-major axis of source ellipsoid in meters  (input)
   *    da        : Destination a minus source a                   (input)
   *    f         : Flattening of source ellipsoid                 (input)
   *    df        : Destination f minus source f                   (input)
   *    dx        : X coordinate shift in meters                   (input)
   *    dy        : Y coordinate shift in meters                   (input)
   *    dz        : Z coordinate shift in meters                   (input)
   *    Lat_in    : Latitude in radians.                           (input)
   *    Lon_in    : Longitude in radians.                      

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清国产一区二区| 一本色道综合亚洲| 国产老肥熟一区二区三区| 轻轻草成人在线| 亚洲444eee在线观看| 免费在线观看日韩欧美| 激情都市一区二区| 国产999精品久久久久久| 丁香啪啪综合成人亚洲小说| av午夜一区麻豆| 欧美日韩精品欧美日韩精品一 | 国产精品嫩草99a| 一区二区三区在线免费观看 | 99亚偷拍自图区亚洲| 91国产福利在线| 国产欧美中文在线| 亚洲精品国产一区二区精华液| 亚洲国产欧美在线| 久久福利资源站| 色妞www精品视频| 久久色在线观看| 亚洲123区在线观看| 高清国产一区二区| 欧美一区午夜精品| 亚洲精品久久嫩草网站秘色| 激情六月婷婷久久| 欧美精品亚洲二区| 亚洲乱码一区二区三区在线观看| 青娱乐精品在线视频| 欧美最猛黑人xxxxx猛交| 久久夜色精品一区| 精品一区二区三区在线播放视频| 色诱亚洲精品久久久久久| 日本一区二区三级电影在线观看| 水野朝阳av一区二区三区| 欧美亚洲国产bt| 亚洲欧美激情在线| 99re视频精品| 亚洲国产精品成人综合| 国产剧情一区二区| 欧美激情中文字幕| 99在线热播精品免费| 亚洲色图清纯唯美| 色呦呦国产精品| 亚洲精品免费电影| 91福利视频久久久久| 亚洲第一福利一区| 4438亚洲最大| 国产精品自拍在线| 国产欧美日韩视频在线观看| 国产精品羞羞答答xxdd| 国产色婷婷亚洲99精品小说| 国产自产视频一区二区三区| 国产欧美1区2区3区| 99精品国产99久久久久久白柏| 亚洲一区二区三区影院| 久久久久久久网| 高清视频一区二区| 日本不卡视频在线| 欧美高清在线视频| 欧美一区三区二区| 91在线高清观看| 麻豆一区二区三| 一区二区三区四区蜜桃| 91麻豆精品国产91久久久久久久久 | 奇米影视一区二区三区| 久久久不卡网国产精品一区| 欧美亚洲自拍偷拍| 高清在线观看日韩| 国产一区二区不卡在线| 亚洲大尺度视频在线观看| 国产精品电影院| 国产色婷婷亚洲99精品小说| 日韩欧美资源站| 欧美日韩中字一区| 91热门视频在线观看| 国产乱对白刺激视频不卡| 日本成人在线看| 夜夜操天天操亚洲| 亚洲视频一区二区在线| 欧美高清在线视频| 国产精品盗摄一区二区三区| 久久免费看少妇高潮| 91精品午夜视频| 欧美午夜精品久久久| 91精品办公室少妇高潮对白| 成人黄色软件下载| 99久久伊人精品| 99久久er热在这里只有精品66| 国产成人超碰人人澡人人澡| 国产乱码精品一区二区三区av | 成人免费一区二区三区视频 | 欧美乱妇15p| 日韩一区二区三区精品视频| 欧美一二区视频| 亚洲精品一区二区三区香蕉| 日韩欧美一区电影| 国产欧美日韩亚州综合| 亚洲色图丝袜美腿| 五月天亚洲婷婷| 高清不卡一二三区| 欧美人狂配大交3d怪物一区| 日韩欧美精品三级| 国产精品欧美综合在线| 一区二区三区久久| 国产一区欧美二区| 欧美日韩一区在线| 国产欧美日韩另类一区| 一区二区三区资源| 狠狠色丁香久久婷婷综合丁香| www.亚洲在线| 久久亚洲影视婷婷| 五月婷婷综合在线| 色天使久久综合网天天| 欧美精品一区二| 青青草97国产精品免费观看无弹窗版 | 久久99精品久久只有精品| 91网站最新网址| 亚洲国产成人一区二区三区| 亚洲成a人片在线观看中文| 高清beeg欧美| 中文字幕精品综合| 九一久久久久久| 精品人在线二区三区| 日本不卡视频在线观看| 欧美精品在线一区二区三区| 中文字幕在线不卡视频| 国产成人av电影在线| 欧美国产精品中文字幕| 国产在线精品视频| 久久免费视频一区| 国产成人一区二区精品非洲| 久久久一区二区| 国产精品88av| 国产精品美女久久福利网站 | 日韩精品一区二区三区蜜臀| 午夜国产不卡在线观看视频| 欧美日韩国产美女| 久久精品国产精品亚洲红杏| 欧美日韩美女一区二区| 精品一区免费av| 日韩欧美国产综合| 粉嫩久久99精品久久久久久夜| 国产网站一区二区| 欧美在线你懂的| 国内精品视频一区二区三区八戒| 欧美国产精品一区二区| 99re8在线精品视频免费播放| 亚洲一区视频在线| 久久天堂av综合合色蜜桃网| 国产+成+人+亚洲欧洲自线| 亚洲乱码国产乱码精品精的特点| 成人午夜视频网站| 天天综合色天天综合色h| 国产午夜精品一区二区三区嫩草 | 国产日产欧产精品推荐色| 成人h精品动漫一区二区三区| 一区二区三区中文在线观看| 91精品福利在线一区二区三区 | 国产日本欧美一区二区| 欧美日韩一区二区三区在线| 成人午夜电影小说| 久久精品国产第一区二区三区| 亚洲毛片av在线| 国产精品国产精品国产专区不片| 欧美午夜视频网站| 欧美亚洲一区二区三区四区| 国产精品一区2区| 久久97超碰色| 日韩成人免费电影| 亚洲电影你懂得| 亚洲免费在线播放| 中文字幕一区二区在线观看| 精品对白一区国产伦| 91麻豆精品国产91久久久久久久久| 一本高清dvd不卡在线观看| 国产成人综合亚洲91猫咪| 日本不卡高清视频| 精品亚洲成a人| 激情图片小说一区| 久久91精品国产91久久小草| 亚洲成人一区二区在线观看| 三级亚洲高清视频| 日本欧美一区二区三区| 无码av免费一区二区三区试看 | 欧美日韩高清影院| 日韩高清电影一区| 日韩国产欧美三级| 国产综合色视频| av成人免费在线观看| 欧美亚洲国产一区二区三区 | 欧美国产日韩a欧美在线观看 | 国产原创一区二区| 不卡一卡二卡三乱码免费网站| 大桥未久av一区二区三区中文| 国产69精品久久777的优势| 色菇凉天天综合网| 日韩精品一区二区三区四区| 国产精品久久久久久久岛一牛影视 | 中文字幕欧美一|