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

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

?? gpsfunc.pas

?? gps通訊程序,能夠運行在delphi7下
?? PAS
字號:
unit GpsFunc;

interface

uses SysUtils,Math;

const
  ER = 6378137;           // 地球半徑(長軸)
  FLAT = 0.0033528106648; // 扁率

// 函數集合
// 經緯度坐標到屏幕坐標的轉換
// 經緯度單位換算
// 從NEMA語句中分離值

type
  TSatInfo = Record
    PRN: integer;         // 衛星號碼
    EL,AZ: integer;       // 仰角、方位
    SN: integer;          // 信號噪音比
  end;

  TWayPoint = Record
    Lat,Lon: Double;
    LatHemi,LonHemi: Char;
    Alt: Single;
  end;
  
  TGPSInfo = Record
    Fix: String[10];       // 定位方式
    Lat,Lon: Double;      // 經緯度
    LatHemi,LonHemi: Char;// N、S、E、W
    UTC: String[6];
    Alt : Single;         // 海拔
    Speed: Single;        // 速度
    Course: Single;       // 方向
    SatInfo: Array [1..12] of TSatInfo;
  end;

function Do_GPSString(Str: string; var gps: TGpsInfo):boolean;
function Dists(sLon,sLat,tLon,tLat: Double; var El: double):Double;    // 計算大圓距離和方位角

implementation

//$PGRME,45.3,M,,M,45.3,M*00
//Estimated Error Information (PGRME)
//The GARMIN Proprietary sentence $PGRME reports estimated position error
//information.
//$PGRME,<1>,M,<2>,M,<3>,M*hh<CR><LF>
//<1> Estimated horizontal position error (HPE), 0.0 to 999.9 meters
//<2> Estimated vertical position error (VPE), 0.0 to 999.9 meters
//<3> Estimated position error (EPE), 0.0 to 999.9 meters

// 處理GPS發來的所有數據
//$GPGSV,3,1,09,05,18,043,43,11,04,290,44,14,59,034,43,15,01,184,*70
//$GPGSV,3,2,09,16,13,200,,18,22,153,,23,44,160,,25,54,288,51*7E
//$GPGSV,3,3,09,30,46,061,30,,,,,,,,,,,,*45
//$PGRME,45.3,M,,M,45.3,M*00
//$GPRMC,131558,A,2818.7145,N,10944.4235,E,000.0,000.0,1n0503,002.0,W*61
//$GPGGA,131558,2818.7145,N,10944.4235,E,1,04,4.6,238.2,M,-25.4,M,,*66
//$GPGSA,A,2,05,11,14,,,,,25,,,,,4.6,4.6,*1A
function Do_GPSString(Str: string; var gps: TGpsInfo):boolean;
  function GetNextItem(start: integer; len: integer; var tmp: string):integer;
  var
    i: integer;
  begin
    tmp := '';
    result := 0;
    i := start + 1;
    while (Str[i] <> '$') and (Str[i] <> ',') and (Str[i] <> '*') and (i<Len) do begin
      tmp := tmp + Str[i];
      inc(i);
      inc(result);
    end;
  end;

  function CountChar(start: integer; len: integer):integer;
  var
    i: integer;
  begin
    i:=start;
    Result := 0;
    while (Str[i] <> Chr($0d)) and (Str[i] <> Chr($0a)) and (Str[i] <> '$') and (i<Len) do begin
      if Str[i] = ',' then inc(Result);
      inc(i);
    end;
  end;
var
  CurPos,strLen: integer;
  tmpStr: string;
  tmpFloat: Double;
  tmpi,i: integer;
begin
  CurPos := 0;
  strLen := Length(Str);
  while CurPos<strLen do begin
    while (Str[CurPos] <> '$') and (CurPos<strLen) do inc(CurPos);
    CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
    if tmpStr = 'GPGGA' then begin
      if CountChar(CurPos,strLen) = 14 then begin
        //$GPGGA,131558,2818.7145,N,10944.4235,E,1,04,4.6,238.2,M,-25.4,M,,*66
        //$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
        //<1> UTC時間, hhmmss
        //<2> 緯度, ddmm.mmmm (輸出前導零)
        //<3> 南北, N or S
        //<4> 經度, dddmm.mmmm (輸出前導零)
        //<5> 東西, E or W
        //<6> GPS質量評估, 0 = 不能定位, 1 = 非差分定位
        //, 2 = 差分定位(DGPS), 6 = 估計
        //<7> 使用中的衛星數量, 00 to 12 (輸出前導零)
        //<8> Horizontal dilution of precision, 0.5 to 99.9
        //<9> 海拔高度, -9999.9 to 99999.9 米
        //<10> Geoidal height, -999.9 to 9999.9 meters
        //<11> 差分GPS(RTCM SC-104)數據壽命, number of seconds since last valid
        //RTCM transmission (非差分時為空)
        //<12> 差分GPS參考站ID, 0000 to 1023 (輸出前導零,非差分時為空)
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.UTC := tmpStr;
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        tmpFloat := StrToFloatDef(tmpStr,0) / 100;
        gps.Lat := Int(tmpFloat) + (Frac(tmpFloat) * 5) / 3;
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.LatHemi := tmpStr[1];
        if gps.LatHemi = 'S' then gps.Lat := -1 * gps.Lat;
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        tmpFloat := StrToFloatDef(tmpStr,0) / 100;
        gps.Lon := Int(tmpFloat) + (Frac(tmpFloat) * 5) / 3;
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.LonHemi := tmpStr[1];
        if gps.LonHemi = 'W' then gps.Lon := -1 * gps.Lon;
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.Alt := StrToFloatDef(tmpStr,0);
      end;
    end else if tmpStr = 'GPGSA' then begin
      if CountChar(CurPos,strLen) = 17 then begin
        //衛星狀態表
        //$GPGSA,A,2,05,11,14,,,,,25,,,,,4.6,4.6,*1A
        //$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>
        //*hh<CR><LF>
        //<1> Mode, M = manual, A = automatic
        //<2> 定位狀態, 1 = not available, 2 = 2D, 3 = 3D
        //<3> 衛星號碼,最多12個
        //<4> Position dilution of precision, 0.5 to 99.9
        //<5> Horizontal dilution of precision, 0.5 to 99.9
        //<6> Vertical dilution of precision, 0.5 to 99.9
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        case StrToIntDef(tmpStr,0) of
          2: gps.Fix := '2D Fix';
          3: gps.Fix := '3D Fix';
        else
          gps.Fix := 'No Fix';
        end;
      end;
    end else if tmpStr = 'GPRMC' then begin
      if CountChar(CurPos,strLen) = 11 then begin
        //Recommended Minimum Specific GPS/TRANSIT Data (RMC)
        //$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
        //$GPRMC,131558,A,2818.7145,N,10944.4235,E,000.0,000.0,1n0503,002.0,W*61
        //<1> UTC time of position fix, hhmmss format
        //<2> Status, A = Valid position, V = NAV receiver warning
        //<3> Latitude, ddmm.mmmm format (leading zeros will be transmitted)
        //<4> Latitude hemisphere, N or S
        //<5> Longitude, dddmm.mmmm format (leading zeros will be transmitted)
        //<6> Longitude hemisphere, E or W
        //<7> Speed over ground, 000.0 to 999.9 knots (leading zeros will be transmitted)
        //<8> Course over ground, 000.0 to 359.9 degrees, true (leading zeros will be
        //transmitted)
        //<9> UTC date of position fix, ddmmyy format
        //<10> Magnetic variation, 000.0 to 180.0 degrees (leading zeros will be transmitted)
        //<11> Magnetic variation direction, E or W (westerly variation adds to true course)
        //<12> Mode indicator (only output if NMEA 2.30 active), A = Autonomous, D =
        //Differential, E = Estimated, N = Data not valid
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.Speed := StrToFloatDef(tmpStr,0);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        gps.Course := StrToFloatDef(tmpStr,0);
      end;
    end else if tmpStr = 'GPGSV' then begin
      if CountChar(CurPos,strLen) = 19 then begin
        //$GPGSV,3,1,09,05,18,043,43,11,04,290,44,14,59,034,43,15,01,184,*70
        //$GPGSV,3,2,09,16,13,200,,18,22,153,,23,44,160,,25,54,288,51*7E
        //$GPGSV,3,3,09,30,46,061,30,,,,,,,,,,,,*45
        //$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,...<4>,<5>,<6>,<7>*hh<CR><LF>
        //<1> Total number of GSV sentences to be transmitted
        //<2> Number of current GSV sentence
        //<3> Total number of satellites in view, 00 to 12 (leading zeros will be transmitted)
        //<4> Satellite PRN number, 01 to 32 (leading zeros will be transmitted)
        //<5> 衛星仰角, 00-90度
        //<6> 衛星方位角, 000-359度
        //<7> 衛星信號噪音比 00-99db
        //NOTE: Items <4>,<5>,<6> and <7> repeat for each satellite in view to a maximum of
        //four (4) satellites per sentence. Additional satellites in view information must be
        //sent in subsequent sentences. These fields will be null if unused.
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        tmpi := StrToIntDef(tmpStr,1);
        CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
        for i:=1 to 4 do begin
          CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
          gps.SatInfo[(tmpi-1)*4 + i].PRN := StrToIntDef(tmpStr,0);
          CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
          gps.SatInfo[(tmpi-1)*4 + i].EL := StrToIntDef(tmpStr,0);
          CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
          gps.SatInfo[(tmpi-1)*4 + i].AZ := StrToIntDef(tmpStr,0);
          CurPos:= CurPos + 1 + GetNextItem(CurPos,strLen,tmpStr);
          gps.SatInfo[(tmpi-1)*4 + i].SN := StrToIntDef(tmpStr,0);
        end;
      end;
    end;
    inc(CurPos);
  end;
  Result := True;
end;

// sLon,sLat:原點經緯度 tLon,tLat: 目標點經緯度
// 經緯度單位為 ddd.dddddddd 度表示,東經、北緯為正
// El: 方位角
// 返回值: 距離,單位米
function Dists(sLon,sLat,tLon,tLat: Double; var El: double):Double;    // 計算大圓距離和方位角
var
  dLon: double;               // 經度差
  gcd,btr: double;
  tmp: double;
begin
  sLon := DegToRad(sLon);
  tLon := DegToRad(tLon);
  if sLon < 0 then sLon := sLon + 2 * Pi;
  if tLon < 0 then tLon := tLon + 2 * Pi;
  dLon := sLon - tLon;
  if abs(dLon) > Pi then dLon := dLon - 2*Pi*Sign(dLon);

  gcd := ArcCos(sin(sLat)*sin(tLat) + cos(sLat)*cos(tLat)*cos(dLon));
  if gcd < 0.000000000001 then gcd := 0.000000000001;

  if cos(sLat) > 0.000000000001 then begin
    tmp := cos(sLat) * sin(gcd);
    if abs(tmp) > 0.0000001 then
      btr := ArcCos((sin(tLat) - sin(sLat)*cos(gcd)) / tmp);
    if dLon>0 then btr := 2 * Pi - btr;
  end else if sLat >=0 then btr := 0 else btr := Pi;

  //if cos(tLat) > 0.0000001 then begin
  //  brt := ArcCos((sin(sLat) - sin(tLat) * cos(gcd)) / (cos(tLat)*sin(gcd)));
  //  if dLon < 0 then brt := 2 * Pi - brt;
  //end else if tLat >=0 then brt := 0 else brt := Pi;

  btr := btr * 180 / Pi;
  //brt := brt * 180 / Pi;
  gcd := gcd * ER;

  El := btr;
  Result := gcd;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色中文一区二区在线播放| 精品国产乱码久久久久久牛牛| 99在线热播精品免费| 国产成人在线观看| 国产白丝网站精品污在线入口| 国产成人综合在线| 丁香五精品蜜臀久久久久99网站| 国产乱码精品一区二区三区忘忧草| 六月丁香婷婷色狠狠久久| 久国产精品韩国三级视频| 伦理电影国产精品| 国产aⅴ精品一区二区三区色成熟| 国内精品久久久久影院薰衣草| 精品一区二区免费看| 亚洲va欧美va天堂v国产综合| 午夜精品一区二区三区免费视频| 天堂久久一区二区三区| 日韩国产精品久久| 国产在线不卡一卡二卡三卡四卡| 国内成人精品2018免费看| 国产成人午夜精品5599| 成人免费视频视频| 91免费观看视频| 欧美日韩一区二区三区免费看| 欧美日本一区二区三区四区 | 91色九色蝌蚪| 91久久国产最好的精华液| 欧美午夜电影一区| 欧美一区二区三区在线观看| 久久一区二区视频| 中文字幕一区二区三区视频 | jlzzjlzz亚洲女人18| 97久久超碰国产精品电影| 欧亚洲嫩模精品一区三区| 91精品在线观看入口| 国产日韩欧美一区二区三区综合| 亚洲男人都懂的| 美女视频一区二区三区| 成人晚上爱看视频| 欧美日韩免费一区二区三区视频| 日韩欧美激情四射| 亚洲色图第一区| 免费观看一级欧美片| jlzzjlzz国产精品久久| 日韩一区二区在线播放| 国产精品三级av| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲欧美在线高清| 欧美a一区二区| 99久久99久久精品国产片果冻 | 久久蜜臀中文字幕| 亚洲色图第一区| 国产一区激情在线| 欧美色成人综合| 国产精品区一区二区三| 奇米精品一区二区三区在线观看 | 日本va欧美va瓶| 99久久国产免费看| 欧美不卡视频一区| 一级中文字幕一区二区| 韩国毛片一区二区三区| 欧洲国内综合视频| 国产精品理伦片| 激情欧美一区二区三区在线观看| 91亚洲精品一区二区乱码| 精品国产乱码久久久久久影片| 亚洲精品va在线观看| 国产一区激情在线| 91精品国产色综合久久不卡电影 | 免费在线一区观看| 在线一区二区三区做爰视频网站| 久久这里只有精品视频网| 亚洲一二三专区| 成人的网站免费观看| 久久天天做天天爱综合色| 视频一区中文字幕| 在线影院国内精品| 亚洲色图在线视频| 成人久久18免费网站麻豆 | 婷婷六月综合网| 色综合天天综合网天天看片| 午夜精品福利一区二区三区av| 国产91精品入口| 精品久久久久香蕉网| 亚洲成人av福利| 欧美视频一区二区三区| 亚洲特级片在线| 99久久精品免费精品国产| 中文久久乱码一区二区| 懂色一区二区三区免费观看| 久久婷婷成人综合色| 国产一区在线观看视频| 欧美r级电影在线观看| 免费在线观看一区二区三区| 在线不卡一区二区| 丝袜脚交一区二区| 777亚洲妇女| 日本少妇一区二区| 日韩情涩欧美日韩视频| 日韩高清欧美激情| 日韩三级免费观看| 久久99久久久欧美国产| 精品久久久久久久人人人人传媒| 美国欧美日韩国产在线播放| 日韩欧美自拍偷拍| 激情综合色播激情啊| 欧美精品一区在线观看| 国产激情一区二区三区桃花岛亚洲| 久久精品视频网| www.成人在线| 亚洲黄色小说网站| 欧美日韩激情在线| 蜜臀99久久精品久久久久久软件 | 午夜天堂影视香蕉久久| 欧美三级电影在线观看| 亚洲18女电影在线观看| 91精品国产麻豆国产自产在线| 三级一区在线视频先锋 | 日本一区二区三区国色天香| 国产成人综合网| 亚洲欧美日韩国产另类专区| 色琪琪一区二区三区亚洲区| 亚洲成a人在线观看| 欧美大片国产精品| 大陆成人av片| 亚洲激情自拍视频| 日韩一区二区在线看| 国产99久久久久久免费看农村| 亚洲欧美日韩在线不卡| 91精品国产91综合久久蜜臀| 日韩一区二区免费在线电影| 国产一区二区调教| 最近中文字幕一区二区三区| 在线观看国产一区二区| 免费成人在线观看视频| 亚洲国产电影在线观看| 色婷婷久久一区二区三区麻豆| 日韩电影一区二区三区四区| 久久婷婷久久一区二区三区| 97久久人人超碰| 丝袜美腿亚洲色图| 国产亚洲成av人在线观看导航| 91丨porny丨中文| 美女视频第一区二区三区免费观看网站| 国产无人区一区二区三区| 91麻豆国产香蕉久久精品| 日本一不卡视频| 中文字幕中文在线不卡住| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲精品高清在线| 欧美电影免费观看高清完整版在线观看| 成人精品国产免费网站| 天堂午夜影视日韩欧美一区二区| 国产日产欧美一区二区三区| 欧美日韩免费观看一区二区三区| 国内久久婷婷综合| 亚洲高清久久久| 国产偷国产偷亚洲高清人白洁| 欧美午夜精品免费| 成人国产精品免费观看视频| 视频在线在亚洲| 亚洲欧美日韩一区二区三区在线观看| 日韩女优视频免费观看| 在线影院国内精品| 国产激情视频一区二区在线观看| 婷婷久久综合九色国产成人 | 国产在线不卡一区| 首页国产丝袜综合| 一区二区三区在线观看视频| 国产欧美日韩视频在线观看| 91麻豆精品国产| 在线免费观看视频一区| thepron国产精品| 美女www一区二区| 香蕉久久夜色精品国产使用方法| 中文字幕在线不卡| 日本一区二区视频在线| 日韩精品一区二区三区视频在线观看| 欧美日韩一区二区欧美激情| 99精品国产热久久91蜜凸| 国产99一区视频免费| 精品综合久久久久久8888| 肉色丝袜一区二区| 亚洲国产精品久久不卡毛片| 国产精品久久毛片av大全日韩| 2023国产精品自拍| 日韩欧美第一区| 日韩一级大片在线| 欧美精选午夜久久久乱码6080| 91一区二区三区在线播放| 大桥未久av一区二区三区中文| 国内成人自拍视频| 精油按摩中文字幕久久| 美腿丝袜在线亚洲一区| 视频在线在亚洲| 日韩国产高清影视| 免费久久99精品国产| 日本成人在线一区| 蜜臀av一区二区三区| 美女脱光内衣内裤视频久久网站|