日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两经纬度之间的距离计算

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两经纬度之间的距离计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下是計算兩經緯度之間距離的代碼,分為:頭文件、源代碼和測試代碼三部分。
具體如下:

1 // LatLonDistanceDlg.h : 頭文件 2 // 3 4 #pragma once 5 6 typedef struct 7 { 8 double dLongitude; 9 double dLatitude; 10 }MyLatLong_T,*pMyLatLong_T; 11 12 // CLatLonDistanceDlg 對話框 13 class CLatLonDistanceDlg : public CDialog 14 { 15 ...... 16 17 void DistanceOfTwoPositions(MyLatLong_T ll_PosStart, MyLatLong_T ll_PosEnd, double &dis); 18 // 實現 19 protected: 20 ...... 21 }; 22 23 // LatLonDistanceDlg.cpp : 實現文件 24 // 25 26 // 常量定義 27 const double gConstPI = 3.1415926536; 28 // WGS-84 長軸半徑 29 #define EARTH_LONG_RADIUS_WGS84 6378137.0 // 單位: 米 30 // WGS-84 地球扁率(earth flattening) 31 #define EARTH_FLATTENING_WGS84 298.257223563 32 // meters per sea mile 33 #define METERS_PER_SEA_MILE 1852.0 34 35 // 輸入參數: MyLatLong_T 是個結構,包括經度和緯度 36 // 輸出參數: dDistance 就是返回的大圓距離 37 void CLatLonDistanceDlg::DistanceOfTwoPositions(MyLatLong_T StartLatLong, MyLatLong_T EndLatLong, double &dDistance) 38 { 39 double DInRadians; 40 double dTmpVal = 0.0; 41 double dFi = 0.0; 42 double dFi2 = 0.0; 43 double dDrda = EndLatLong.dLongitude - StartLatLong.dLongitude; 44 double dTmp = 0.0; 45 double dTmp2 = 0.0; 46 47 dDrda = dDrda * gConstPI / 180.0; // in radians 48 dFi = StartLatLong.dLatitude; 49 dFi2 = EndLatLong.dLatitude; 50 51 dFi = dFi * gConstPI / 180.0; // in radians 52 dFi2 = dFi2 * gConstPI / 180.0; // in radians 53 54 dTmpVal = sin(dFi) * sin(dFi2) + cos(dFi) * cos(dFi2) * cos(dDrda); 55 if(fabs(dTmpVal) > 1.0) 56 { 57 AfxMessageBox(L"Invalidate value of arccos!"); // Use Unicode Character Set 58 return ; 59 } 60 DInRadians = acos(dTmpVal); // in radians 61 dTmp = (sin(dFi) + sin(dFi2)); 62 dTmp2 = (sin(dFi) - sin(dFi2)); 63 dTmpVal = ((3 * sin(DInRadians) - DInRadians) * dTmp * dTmp ) / (1 + cos(DInRadians)); 64 dTmpVal = dTmpVal - ((3 * sin(DInRadians) + DInRadians) * dTmp2 * dTmp2) / (1 - cos(DInRadians)); 65 66 dDistance = EARTH_LONG_RADIUS_WGS84 * DInRadians + (EARTH_LONG_RADIUS_WGS84 / (4 * EARTH_FLATTENING_WGS84)) * dTmpVal;//in meters 67 } 68 69 // 測試代碼 70 // TODO: 在此添加額外的初始化代碼 71 { 72 // 深圳百合酒店 緯度:22.601369,經度114.115145 73 // 深圳百合星城 緯度:22.601334,經度114.115807 74 // 深圳布吉農批 緯度:22.583596,經度114.112227 75 MyLatLong_T LatLon; 76 MyLatLong_T LatLon2; 77 MyLatLong_T LatLon3; 78 double dDis = 0.0; 79 80 LatLon.dLatitude = 22.601369; 81 LatLon.dLongitude = 114.115145; 82 LatLon2.dLatitude = 22.601334; 83 LatLon2.dLongitude = 114.115807; 84 LatLon3.dLatitude = 22.583596; 85 LatLon3.dLongitude = 114.112227; 86 87 DistanceOfTwoPositions(LatLon,LatLon2,dDis); 88 TRACE("%f\r\n",dDis); // 68.177865 89 DistanceOfTwoPositions(LatLon,LatLon3,dDis); 90 TRACE("%f\r\n",dDis); // 1990.891295 91 }

?

轉載于:https://www.cnblogs.com/91program/p/5206700.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的两经纬度之间的距离计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。