// ShowHZDistanceDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "ShowHZDistanceDlg.h"
//#include "afxdialogex.h"
#include "Globe.h"
#include <math.h>





// CShowHZDistanceDlg 对话框
//
IMPLEMENT_DYNAMIC(CShowHZDistanceDlg, CDialog)

CShowHZDistanceDlg::CShowHZDistanceDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CShowHZDistanceDlg::IDD, pParent)
{

	ResetCoordinateData();

}

CShowHZDistanceDlg::~CShowHZDistanceDlg()
{
	
}

void CShowHZDistanceDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_PT1_LAT, m_pt1Lat);
	DDX_Text(pDX, IDC_PT2_LAT, m_pt2Lat);
	DDX_Text(pDX, IDC_PT1_LON, m_pt1Lon);
	DDX_Text(pDX, IDC_PT2_LON, m_pt2Lon);
	DDX_Text(pDX, IDC_HZ_DISTANCE, m_strHZDistance);
	DDX_Text(pDX, IDC_AZ_ANGLE, m_strAZAngle);
	
}


BEGIN_MESSAGE_MAP(CShowHZDistanceDlg, CDialog)
END_MESSAGE_MAP()


// CShowHZDistanceDlg 消息处理程序


void CShowHZDistanceDlg::OnCancel()
{
	ResetCoordinateData();

	// TODO: 在此添加专用代码和/或调用基类
	//发送主程序,标识已经关闭
	if (g_mapHwnd != NULL)
	{
		::PostMessage(g_mapHwnd, WM_CLOSE_DISTANCE_DIALOG, 0, 0);
	}
	
	CDialog::OnCancel();
}


//输入点的坐标
//输入:经度lon(以度为单位),纬度lat(以度为单位)
void CShowHZDistanceDlg::SetPtCoordinate(const double lon, const double lat)
{
	if (!m_bHaveOnePoint)
	{
		m_bHaveOnePoint = true;

		m_pt1Lon = lon;
		m_pt1Lat = lat;

		m_pt2Lon = 0.0;
		m_pt2Lat = 0.0;

		m_strHZDistance = _T("");
		m_strAZAngle  = _T("");
	}
	else
	{
		m_bHaveOnePoint = false;

		m_pt2Lon = lon;
		m_pt2Lat = lat;

		//计算两点之间的水平距离
		Cal2PtsDisAZ();
	}

	UpdateData(FALSE);
}


//功能:计算两点之间的水平距离
void CShowHZDistanceDlg::Cal2PtsDisAZ()
{
	double distance = 0;
	double azValue = 0;

	//计算两点之间的距离和方位角
	CalculateTwoPtsDistanceAzimuth(distance, azValue, m_pt1Lon, m_pt1Lat,  m_pt2Lon, m_pt2Lat, 3);

	m_strHZDistance.Format("%.4fkm", distance*0.001);
	m_strAZAngle.Format("%.1f", azValue);
}


//功能:初始化所有数据
void CShowHZDistanceDlg::ResetCoordinateData()
{
	m_hzDistance = 0.0;

	m_pt1Lat = 0.0;
	m_pt2Lat = 0.0;
	m_pt1Lon = 0.0;
	m_pt2Lon = 0.0;

	m_bHaveOnePoint = false;
	m_strHZDistance = _T("");

	//方位角
	m_strAZAngle = _T("");
}



//功能:移动对话框到给定的显示区域
//输入:显示区域rcArea
void CShowHZDistanceDlg::MoveToGivenArea(const CRect rcArea)
{
	m_rcHZDistanceDlg = rcArea;
	m_rcHZDistanceDlg.top += 20;
}


BOOL CShowHZDistanceDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	//移动到固定的显示区域
	SetWindowPos( &CWnd::wndTop, m_rcHZDistanceDlg.left, m_rcHZDistanceDlg.top, 0, 0,	SWP_NOSIZE | SWP_NOACTIVATE | SWP_HIDEWINDOW );

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}