两经纬度之间的距离计算

【生活经历分享】华师国培 华师伴学 合同都是坑 消费者付款后无法退款
和华师国培签合同需小心,合同中都是保护华师的条款,没有保护消费者的条款。
收到钱,就算你因对培训质量不满意,也不能退款。因合同消费者维权肯定十分艰难。
华师伴学的授课方式是看录制的视频,不是真人现场教学。是否是您和孩子想要的学习方式?
各位打算报名的,交费要谨慎!
其他人在小红书上发的,转:

深圳市华师国培教育科技有限公司,黑心机构,大家擦亮眼睛,别被骗了,消费欺诈,虚假承诺,签合同各种坑,收到钱了不履行承诺不退款,乱扣费,维权艰难! - 小红书

 

以下是计算两经纬度之间距离的代码,分为:头文件、源代码和测试代码三部分。
具体如下:

 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 }  

 

posted @ 2016-02-22 11:59  91program  阅读(1211)  评论(0)    收藏  举报