生活随笔
收集整理的這篇文章主要介紹了
两经纬度之间的距离计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下是計算兩經緯度之間距離的代碼,分為:頭文件、源代碼和測試代碼三部分。
具體如下:
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年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的两经纬度之间的距离计算的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。