📄 gpspositiondlg.cpp
字号:
// GPSPositionDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "GPSPosition.h"
#include "GPSPositionDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CGPSPositionDlg 对话框
CGPSPositionDlg::CGPSPositionDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGPSPositionDlg::IDD, pParent)
{
m_a_lat_deg = 0;
m_a_lat_min = 0;
m_a_lat_sec = 0.0;
m_a_lon_deg = 0;
m_a_lon_min = 0;
m_a_lon_sec = 0.0;
m_b_lat_min = 0;
m_b_lat_sec = 0.0;
m_b_lon_deg = 0;
m_b_lon_min = 0;
m_b_lon_sec = 0.0;
m_dist = 0.0;
m_b_lat_deg = 0;
m_edit_lona = 0.0;
m_edit_lata = 0.0;
m_edit_lonb = 0.0;;
m_edit_latb = 0.0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGPSPositionDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT6, m_a_lat_deg);
DDV_MinMaxInt(pDX, m_a_lat_deg, 0, 360);
DDX_Text(pDX, IDC_EDIT7, m_a_lat_min);
DDV_MinMaxInt(pDX, m_a_lat_min, 0, 59);
DDX_Text(pDX, IDC_EDIT8, m_a_lat_sec);
DDV_MinMaxDouble(pDX, m_a_lat_sec, 0., 59.999999999);
DDX_Text(pDX, IDC_EDIT9, m_a_lon_deg);
DDV_MinMaxInt(pDX, m_a_lon_deg, 0, 360);
DDX_Text(pDX, IDC_EDIT10, m_a_lon_min);
DDV_MinMaxInt(pDX, m_a_lon_min, 0, 59);
DDX_Text(pDX, IDC_EDIT11, m_a_lon_sec);
DDV_MinMaxDouble(pDX, m_a_lon_sec, 0., 59.999999999);
DDX_Text(pDX, IDC_EDIT13, m_b_lat_min);
DDX_Text(pDX, IDC_EDIT14, m_b_lat_sec);
DDV_MinMaxDouble(pDX, m_b_lat_sec, 0., 59.999999999);
DDX_Text(pDX, IDC_EDIT12, m_b_lon_deg);
DDV_MinMaxInt(pDX, m_b_lon_deg, 0, 360);
DDX_Text(pDX, IDC_EDIT16, m_b_lon_min);
DDV_MinMaxInt(pDX, m_b_lon_min, 0, 59);
DDX_Text(pDX, IDC_EDIT17, m_b_lon_sec);
DDV_MinMaxDouble(pDX, m_b_lon_sec, 0., 59.999999999);
DDX_Text(pDX, IDC_EDIT_distance, m_dist);
DDX_Text(pDX, IDC_EDIT15, m_b_lat_deg);
DDV_MinMaxInt(pDX, m_b_lat_deg, 0, 360);
DDX_Text(pDX, IDC_EDIT_lona, m_edit_lona);
DDV_MinMaxDouble(pDX, m_edit_lona, 0, 360);
DDX_Text(pDX, IDC_EDIT_lata, m_edit_lata);
DDV_MinMaxDouble(pDX, m_edit_lata, 0, 360);
DDX_Text(pDX, IDC_EDIT_lonb, m_edit_lonb);
DDV_MinMaxDouble(pDX, m_edit_lonb, 0, 360);
DDX_Text(pDX, IDC_EDIT_latb, m_edit_latb);
DDV_MinMaxDouble(pDX, m_edit_latb, 0, 360);
}
BEGIN_MESSAGE_MAP(CGPSPositionDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
/*
ON_BN_CLICKED(IDC_RADIO1, OnButton1)
ON_BN_CLICKED(IDC_RADIO2, OnButton1)
ON_BN_CLICKED(IDC_RADIO3, OnButton1)
ON_BN_CLICKED(IDC_RADIO4, OnButton1)
*/
ON_BN_CLICKED(IDC_BT_Count, &CGPSPositionDlg::OnBnClickedBtCount)
END_MESSAGE_MAP()
// CGPSPositionDlg 消息处理程序
#define PI 3.14159265358979323846
BOOL CGPSPositionDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CGPSPositionDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
DRA::RelayoutDialog(
AfxGetInstanceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_GPSPOSITION_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_GPSPOSITION_DIALOG));
}
#endif
double CGPSPositionDlg::CalDist(double lat_a, double lon_a, double lat_b, double lon_b)
{
double theta = lon_a-lon_b;
double dist;
dist = sin(lat_a)*sin(lat_b)+cos(lat_a)*cos(lat_b)*cos(theta);
dist = acos(dist);
dist = radtodeg(dist);
dist = dist *60 *1.1515;
dist = dist * 1.609344;
return dist;
}
double CGPSPositionDlg::degminsectorad(int deg, int min, double sec)//作用:将度化为弧度
{
double ret,temp;
ret = deg;
temp = min+sec;
temp = temp /60.0;
ret += temp;
ret = ret * PI / 180.0;
return ret;
}
double CGPSPositionDlg::degtorad(double deg)//作用:将度化为弧度
{
double ret;
ret = deg;
//temp = min+sec;
//temp = temp /60.0;
//ret += temp;
ret = ret * PI / 180.0;
return ret;
}
double CGPSPositionDlg::radtodeg(double rad)//作用:将弧度转化为度
{
double ret;
ret = rad / PI * 180.0;
return ret;
}
void CGPSPositionDlg::OnBnClickedBtCount()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
double lat_a, lat_b, lon_a, lon_b;
UINT aSelect = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO2);
UINT bSelect = GetCheckedRadioButton(IDC_RADIO3, IDC_RADIO4);
switch (aSelect)
{
case IDC_RADIO1:
lat_a = degtorad(m_edit_lata);
lon_a = degtorad(m_edit_lona);
break;
case IDC_RADIO2:
lat_a = degminsectorad(m_a_lat_deg, m_a_lat_min, m_a_lat_sec);
lon_a = degminsectorad(m_a_lon_deg, m_a_lon_min, m_a_lon_sec);
break;
default:
break;
}
switch (bSelect)
{
case IDC_RADIO3:
lat_b = degtorad(m_edit_lata);
lon_b = degtorad(m_edit_lona);
break;
case IDC_RADIO4:
lat_b = degminsectorad(m_b_lat_deg, m_b_lat_min, m_b_lat_sec);
lon_b = degminsectorad(m_b_lon_deg, m_b_lon_min, m_b_lon_sec);
break;
default:
break;
}
m_dist = CalDist(lat_a, lon_a, lat_b, lon_b);
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -