⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readgpsdlg.cpp

📁 一套GPS系统源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//	$GPRMC,161135.000,V,2446.5222,N,12100.1590,E,,,161204,,*19
	//	检查时间数据,eg:204700,A,
	if(	m_Buffer[i+1]<'0'||m_Buffer[i+1]>'9'		||
		m_Buffer[i+2]<'0'||m_Buffer[i+2]>'9'		||
		m_Buffer[i+3]<'0'||m_Buffer[i+3]>'9'		||
		m_Buffer[i+4]<'0'||m_Buffer[i+4]>'9'		||
		m_Buffer[i+5]<'0'||m_Buffer[i+5]>'9'		||
		m_Buffer[i+6]<'0'||m_Buffer[i+6]>'9'		||
		m_Buffer[i+7]!='.'							||
		m_Buffer[i+8]<'0'||m_Buffer[i+8]>'9'		||
		m_Buffer[i+9]<'0'||m_Buffer[i+9]>'9'		||
		m_Buffer[i+10]<'0'||m_Buffer[i+10]>'9'		||
		m_Buffer[i+11]!=','							||
		m_Buffer[i+12]!='A'&&m_Buffer[i+12]!='V'	||
		m_Buffer[i+13]!=','							||
	//	检查纬度数据,eg:3403.868,N,
		m_Buffer[i+14]<'0'||m_Buffer[i+14]>'9'		||
		m_Buffer[i+15]<'0'||m_Buffer[i+15]>'9'		||
		m_Buffer[i+16]<'0'||m_Buffer[i+16]>'9'		||
		m_Buffer[i+17]<'0'||m_Buffer[i+17]>'9'		||
		m_Buffer[i+18]!='.'							||
		m_Buffer[i+19]<'0'||m_Buffer[i+19]>'9'		||
		m_Buffer[i+20]<'0'||m_Buffer[i+20]>'9'		||
		m_Buffer[i+21]<'0'||m_Buffer[i+21]>'9'		||
		m_Buffer[i+22]<'0'||m_Buffer[i+22]>'9'		||
		m_Buffer[i+23]!=','							||
		m_Buffer[i+24]!='N'&&m_Buffer[i+24]!='S'	||
		m_Buffer[i+25]!=','							||
	//	检查经度数据,eg:11709.432,W,
		m_Buffer[i+26]<'0'||m_Buffer[i+26]>'9'		||
		m_Buffer[i+27]<'0'||m_Buffer[i+27]>'9'		||
		m_Buffer[i+28]<'0'||m_Buffer[i+28]>'9'		||
		m_Buffer[i+29]<'0'||m_Buffer[i+29]>'9'		||
		m_Buffer[i+30]<'0'||m_Buffer[i+30]>'9'		||
		m_Buffer[i+31]!='.'							||
		m_Buffer[i+32]<'0'||m_Buffer[i+32]>'9'		||
		m_Buffer[i+33]<'0'||m_Buffer[i+33]>'9'		||
		m_Buffer[i+34]<'0'||m_Buffer[i+34]>'9'		||
		m_Buffer[i+35]<'0'||m_Buffer[i+35]>'9'		||
		m_Buffer[i+36]!=','							||
		m_Buffer[i+37]!='W'&&m_Buffer[i+37]!='E'	||
		m_Buffer[i+38]!=',')
	//	检查其它数据,eg:001.9,336.9,170698,013.6,E*6E
		goto DATA_ERR;
	xHour=(m_Buffer[i+1]-'0')*10+(m_Buffer[i+2]-'0');
	xMin =(m_Buffer[i+3]-'0')*10+(m_Buffer[i+4]-'0');
	xSec =(m_Buffer[i+5]-'0')*10+(m_Buffer[i+6]-'0');
	bNorth=(m_Buffer[i+24]=='N');
	bEast =(m_Buffer[i+37]=='E');
	xJindu=	(m_Buffer[i+26]-'0')*10000+
			(m_Buffer[i+27]-'0')*1000+
			(m_Buffer[i+28]-'0')*100+
			(m_Buffer[i+29]-'0')*10+
			(m_Buffer[i+30]-'0')+
			(m_Buffer[i+32]-'0')*0.1+
			(m_Buffer[i+33]-'0')*0.01+
			(m_Buffer[i+34]-'0')*0.001+
			(m_Buffer[i+35]-'0')*0.0001;
	xWeidu=	(m_Buffer[i+14]-'0')*1000+
			(m_Buffer[i+15]-'0')*100+
			(m_Buffer[i+16]-'0')*10+
			(m_Buffer[i+17]-'0')+
			(m_Buffer[i+19]-'0')*0.1+
			(m_Buffer[i+20]-'0')*0.01+
			(m_Buffer[i+21]-'0')*0.001+
			(m_Buffer[i+22]-'0')*0.0001;
	//	int		xYear,xMonth,xDay;
	i=45;
	while(m_Buffer[i]!=',') i++;
	i++;
	while(m_Buffer[i]!=',') i++;
	i++;
	if(	m_Buffer[i+0]<'0'||m_Buffer[i+0]>'9'		||
		m_Buffer[i+1]<'0'||m_Buffer[i+1]>'9'		||
		m_Buffer[i+2]<'0'||m_Buffer[i+2]>'9'		||
		m_Buffer[i+3]<'0'||m_Buffer[i+3]>'9'		||
		m_Buffer[i+4]<'0'||m_Buffer[i+4]>'9'		||
		m_Buffer[i+5]<'0'||m_Buffer[i+5]>'9')
		goto DATA_ERR;
	xYear =(m_Buffer[i+4]-'0')*10+m_Buffer[i+5]-'0';
	xMonth=(m_Buffer[i+2]-'0')*10+m_Buffer[i+3]-'0';
	xDay  =(m_Buffer[i+0]-'0')*10+m_Buffer[i+1]-'0';

//	if(xJindu!=m_Longitude||xWeidu!=m_Latitude)		MessageBeep(0);
	xJindu/=100;
	xWeidu/=100;
	if(xJindu!=m_Longitude)	{m_Longitude=xJindu;m_CurLongitude=xJindu;}
	if(xWeidu!=m_Latitude)	{m_Latitude=xWeidu;m_CurLatitude=xWeidu;}
//	if(xJindu!=m_Longitude||xWeidu!=m_Latitude)
	//	按时区调整时间
	m_dwDate=(xYear*16+xMonth)*32+xDay;
	xTime=(xHour*60+xMin)*60+xSec+TIME_ADJ;
	m_dwDate+=xTime/86400;
	xTime=xTime%86400;

	xHour=xTime/3600;
	xMin=(xTime%3600)/60;
	xSec=xTime%60;

	m_dwTime=xHour*3600+xMin*60+xSec;

	xYear=m_dwDate/512;
	xMonth=(m_dwDate%512)/32;
	xDay=m_dwDate%32;

	m_CurTime.Format("%02d:%02d:%02d",xHour,xMin,xSec);
	m_CurDate.Format("20%02d-%02d-%02d",xYear,xMonth,xDay);

	UpdateData(FALSE);

	//	显示位置
	m_PositionX=(int)(xJindu);
	m_PositionY=(int)(xWeidu);
	if(bNorth)	m_PositionY*=-1;
	if(!bEast)	m_PositionX*=-1;

	sprintf(m_ShowStr,"[%04d]时间 %02d-%02d-%02d %02d:%02d:%02d %s经%5.3f° %s纬%4.3f°",m_DCnt++,xYear,xMonth,xDay,xHour,xMin,xSec,bEast?"东":"西",xJindu,bNorth?"北":"南",xWeidu);
//	TRACE("%s\n",m_ShowStr);
	/*
	if(m_PositionList.GetCount()<8)
		m_PositionList.AddString(m_ShowStr);
	else
	{
		m_PositionList.DeleteString(0);
		m_PositionList.AddString(m_ShowStr);
	}
	*/
	GetDlgItem(IDC_MAP)->Invalidate();
	memcpy(m_Buffer,&m_Buffer[26],m_BufPos-26);
	m_BufPos-=26;
	goto MAINLOOP;
CONNECT_GGA:
//	正常数据
//	$GPGGA,213912.000,2446.5222,N,12100.1590,E,0,00,,,M,,M,,*45
//	TRACE("%s\n",m_Buffer);
	xHour=0;
	i=6;
//	$GPRMC,161135.000,V,2446.5222,N,12100.1590,E,,,161204,,*19
	//	检查时间数据,eg:204700,A,
	if(	m_Buffer[i+1]<'0'||m_Buffer[i+1]>'9'		||
		m_Buffer[i+2]<'0'||m_Buffer[i+2]>'9'		||
		m_Buffer[i+3]<'0'||m_Buffer[i+3]>'9'		||
		m_Buffer[i+4]<'0'||m_Buffer[i+4]>'9'		||
		m_Buffer[i+5]<'0'||m_Buffer[i+5]>'9'		||
		m_Buffer[i+6]<'0'||m_Buffer[i+6]>'9'		||
		m_Buffer[i+7]!='.'							||
		m_Buffer[i+8]<'0'||m_Buffer[i+8]>'9'		||
		m_Buffer[i+9]<'0'||m_Buffer[i+9]>'9'		||
		m_Buffer[i+10]<'0'||m_Buffer[i+10]>'9'		||
		m_Buffer[i+11]!=','							||
	//	检查纬度数据,eg:3403.868,N,
		m_Buffer[i+12]<'0'||m_Buffer[i+12]>'9'		||
		m_Buffer[i+13]<'0'||m_Buffer[i+13]>'9'		||
		m_Buffer[i+14]<'0'||m_Buffer[i+14]>'9'		||
		m_Buffer[i+15]<'0'||m_Buffer[i+15]>'9'		||
		m_Buffer[i+16]!='.'							||
		m_Buffer[i+17]<'0'||m_Buffer[i+17]>'9'		||
		m_Buffer[i+18]<'0'||m_Buffer[i+18]>'9'		||
		m_Buffer[i+19]<'0'||m_Buffer[i+19]>'9'		||
		m_Buffer[i+20]<'0'||m_Buffer[i+20]>'9'		||
		m_Buffer[i+21]!=','							||
		m_Buffer[i+22]!='N'&&m_Buffer[i+22]!='S'	||
		m_Buffer[i+23]!=','							||
	//	检查经度数据,eg:11709.432,W,
		m_Buffer[i+24]<'0'||m_Buffer[i+24]>'9'		||
		m_Buffer[i+25]<'0'||m_Buffer[i+25]>'9'		||
		m_Buffer[i+26]<'0'||m_Buffer[i+26]>'9'		||
		m_Buffer[i+27]<'0'||m_Buffer[i+27]>'9'		||
		m_Buffer[i+28]<'0'||m_Buffer[i+28]>'9'		||
		m_Buffer[i+29]!='.'							||
		m_Buffer[i+30]<'0'||m_Buffer[i+30]>'9'		||
		m_Buffer[i+31]<'0'||m_Buffer[i+31]>'9'		||
		m_Buffer[i+32]<'0'||m_Buffer[i+32]>'9'		||
		m_Buffer[i+33]<'0'||m_Buffer[i+33]>'9'		||
		m_Buffer[i+34]!=','							||
		m_Buffer[i+35]!='W'&&m_Buffer[i+35]!='E'	||
		m_Buffer[i+36]!=',')
	//	检查其它数据,eg:001.9,336.9,170698,013.6,E*6E
		goto DATA_ERR;
	xHour=(m_Buffer[i+1]-'0')*10+(m_Buffer[i+2]-'0');
	xMin =(m_Buffer[i+3]-'0')*10+(m_Buffer[i+4]-'0');
	xSec =(m_Buffer[i+5]-'0')*10+(m_Buffer[i+6]-'0');
	bNorth=(m_Buffer[i+22]=='N');
	bEast =(m_Buffer[i+35]=='E');
	xJindu=	(m_Buffer[i+24]-'0')*10000+
			(m_Buffer[i+25]-'0')*1000+
			(m_Buffer[i+26]-'0')*100+
			(m_Buffer[i+27]-'0')*10+
			(m_Buffer[i+28]-'0')+
			(m_Buffer[i+30]-'0')*0.1+
			(m_Buffer[i+31]-'0')*0.01+
			(m_Buffer[i+32]-'0')*0.001+
			(m_Buffer[i+33]-'0')*0.0001;
	xWeidu=	(m_Buffer[i+12]-'0')*1000+
			(m_Buffer[i+13]-'0')*100+
			(m_Buffer[i+14]-'0')*10+
			(m_Buffer[i+15]-'0')+
			(m_Buffer[i+17]-'0')*0.1+
			(m_Buffer[i+18]-'0')*0.01+
			(m_Buffer[i+19]-'0')*0.001+
			(m_Buffer[i+20]-'0')*0.0001;
//	if(xJindu!=m_Longitude||xWeidu!=m_Latitude)		MessageBeep(MB_ICONEXCLAMATION);
	xJindu/=100;
	xWeidu/=100;
	if(xJindu!=m_Longitude)	{m_Longitude=xJindu;m_CurLongitude=xJindu;}
	if(xWeidu!=m_Latitude)	{m_Latitude=xWeidu;m_CurLatitude=xWeidu;}
//	if(xJindu!=m_Longitude||xWeidu!=m_Latitude)
	//	按时区调整时间
	xTime=((xHour*60+xMin)*60+xSec+TIME_ADJ)%86400;
	xHour=xTime/3600;
	xMin=(xTime%3600)/60;
	xSec=xTime%60;

	m_CurTime.Format("%02d:%02d:%02d",xHour,xMin,xSec);

	UpdateData(FALSE);

	//	显示位置
	m_PositionX=(int)(xJindu);
	m_PositionY=(int)(xWeidu);
	if(bNorth)	m_PositionY*=-1;
	if(!bEast)	m_PositionX*=-1;

	sprintf(m_ShowStr,"[%04d]时间 %02d:%02d:%02d %s经%5.3f° %s纬%4.3f°",m_DCnt++,xHour,xMin,xSec,bEast?"东":"西",xJindu,bNorth?"北":"南",xWeidu);
//	TRACE("%s\n",m_ShowStr);
	/*
	if(m_PositionList.GetCount()<8)
		m_PositionList.AddString(m_ShowStr);
	else
	{
		m_PositionList.DeleteString(0);
		m_PositionList.AddString(m_ShowStr);
	}
	*/
	GetDlgItem(IDC_MAP)->Invalidate();
	memcpy(m_Buffer,&m_Buffer[42],m_BufPos-42);
	m_BufPos-=42;
	goto MAINLOOP;
CONNECT_GSV:
	//	$GPGSV, 3,1,09,03,77,217,00,  19,48,207,00,  23,47,284,00,  16,43,028,00  *72
	//	$GPGSV, 3,1,09,	03,77,217,00,
	//					19,48,207,00,
	//					23,47,284,00,
	//					16,43,028,00  *72
	i=13;
	int nSatelliteID;
	int nAngle1,nAngle2;
	do
	{
		if(	m_Buffer[i+1]<'0'||m_Buffer[i+1]>'9'		||
			m_Buffer[i+2]<'0'||m_Buffer[i+2]>'9'		||
			m_Buffer[i+3]!=','							||
			m_Buffer[i+4]<'0'||m_Buffer[i+4]>'9'		||
			m_Buffer[i+5]<'0'||m_Buffer[i+5]>'9'		||
			m_Buffer[i+6]!=','							||
			m_Buffer[i+7]<'0'||m_Buffer[i+7]>'9'		||
			m_Buffer[i+8]<'0'||m_Buffer[i+8]>'9'		||
			m_Buffer[i+9]<'0'||m_Buffer[i+9]>'9'		||
			m_Buffer[i+5]<'0'||m_Buffer[i+10]>'9'		||
			m_Buffer[i+10]!=','							||
			m_Buffer[i+11]<'0'||m_Buffer[i+11]>'9'		||
			m_Buffer[i+12]<'0'||m_Buffer[i+12]>'9')
			goto DATA_ERR;
		//	
		nSatelliteID=(m_Buffer[i+1]-'0')*10+m_Buffer[i+2]-'0';
		if(nSatelliteID<MAX_SATELLITE)
		{
			nAngle1=(m_Buffer[i+4]-'0')*10+m_Buffer[i+5]-'0';
			nAngle2=(m_Buffer[i+7]-'0')*100+(m_Buffer[i+8]-'0')*10+m_Buffer[i+9]-'0';
			if(nAngle1<=90&&nAngle2<360)
			{
				m_Satellite[nSatelliteID].m_LiveTime=MAX_LIVETIME;
				m_Satellite[nSatelliteID].xpos=(int)(BMP_SATELLITE_W/2+(nAngle1*BMP_SATELLITE_R/90)*cos((nAngle2+90)*2*PI/360));
				m_Satellite[nSatelliteID].ypos=(int)(BMP_SATELLITE_H/2-(nAngle1*BMP_SATELLITE_R/90)*sin((nAngle2+90)*2*PI/360));
				GetDlgItem(IDC_SATELLITE)->Invalidate();
			}
		}
		i+=13;
	}while(m_Buffer[i]==',');

	memcpy(m_Buffer,&m_Buffer[28],m_BufPos-28);
	m_BufPos-=28;
	goto MAINLOOP;
DATA_ERR:
	memcpy(m_Buffer,&m_Buffer[6],m_BufPos-=6);
	m_BufPos-=6;
	goto MAINLOOP;
	return ;
}

void CReadGPSDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	if(nIDCtl==IDC_MAP)
	{
		CDC *pDC = new CDC();
		pDC->Attach(lpDrawItemStruct->hDC);
		CRect rect;
		::GetClientRect(lpDrawItemStruct->hwndItem,&rect);
		CBitmap bmp;
		bmp.LoadBitmap(IDB_MAP);
		CDC memDC;
		memDC.CreateCompatibleDC(pDC);
		CBitmap* pOldBmp;
		BITMAP	 bm;
		bmp.GetBitmap(&bm);
		pOldBmp=(CBitmap*)memDC.SelectObject(&bmp);
		pDC->BitBlt(0,0,rect.Width()<bm.bmWidth?rect.Width():bm.bmWidth,rect.Height()<bm.bmHeight?rect.Height():bm.bmHeight,&memDC,0,0,SRCCOPY);
		bmp.DeleteObject();
		int x,y;
//		m_PositionX=120;
//		m_PositionY=24;
		x=(m_PositionX+180)*680/360-16;
		y=(m_PositionY+90)*341/180-16;
		pDC->DrawIcon(x,y,m_hIconPosition);

//		pDC->BitBlt(100,100,28,28,&memDC,0,0,SRCCOPY);
		memDC.SelectObject(pOldBmp);
		delete pDC;
	}
	else if(nIDCtl==IDC_SATELLITE)
	{
		CDC *pDC = new CDC();
		pDC->Attach(lpDrawItemStruct->hDC);
		CRect rect;
		::GetClientRect(lpDrawItemStruct->hwndItem,&rect);
		CBitmap bmp;
		bmp.LoadBitmap(IDB_SATELLITE);
		CDC memDC;
		memDC.CreateCompatibleDC(pDC);
		CBitmap* pOldBmp;
		BITMAP	 bm;
		bmp.GetBitmap(&bm);
		pOldBmp=(CBitmap*)memDC.SelectObject(&bmp);
		pDC->BitBlt(0,0,rect.Width()<bm.bmWidth?rect.Width():bm.bmWidth,rect.Height()<bm.bmHeight?rect.Height():bm.bmHeight,&memDC,0,0,SRCCOPY);
		bmp.DeleteObject();

		int i,x,y;
		CString str;
		for(i=0;i<32;i++)
		{
			if(m_Satellite[i].m_LiveTime>0)
			{
				x=m_Satellite[i].xpos;
				y=m_Satellite[i].ypos;
				pDC->DrawIcon(x,y,m_hIconSatellite);
				//	pDC->BitBlt((m_Satellite[i].xpos+180)*680/180,(m_Satellite[i].ypos+90)*341/90,28,28,&memDC,0,0,SRCCOPY);
				str.Format("%d",i);
				rect.left=x+1;
				rect.right=x+32;
				rect.top=y+9;
				rect.bottom=y+32+9;
				pDC->SetBkMode(TRANSPARENT);
				pDC->SetTextColor(RGB(255,255,255));
				//	pDC->SetTextAlign(TA_BOTTOM);
				pDC->DrawText(str,&rect,DT_CENTER);
			}
		}
		memDC.SelectObject(pOldBmp);
		delete pDC;
	}
	CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}


double GetDistance(double longitude1,double latitude1,double longitude2,double latitude2)
{
	//	RADIUS_EARTH:地球半径
	double	a,b,c,dlongitude,dlatitude,dis;
	if(longitude1<0)	longitude1=360-longitude1;
	if(longitude2<0)	longitude2=360-longitude2;

	dlongitude=fabs(longitude1-longitude2);
	if(dlongitude<1.0e-9)	dlongitude=0;
	if(dlongitude>180)	dlongitude-=180;

	dlatitude=latitude1-latitude2;
	dlatitude=fabs(dlatitude);
	if(dlatitude<1.0e-9)	dlatitude=0;

	b=sin((90-fabs(latitude1))*2*PI/360)*RADIUS_EARTH;
	b=2*b*sin(dlongitude*PI/360);

	c=sin((90-fabs(latitude2))*2*PI/360)*RADIUS_EARTH;
	c=2*c*sin(dlongitude*PI/360);

	a=sin(dlatitude*PI/360)*RADIUS_EARTH*2;

	dis=sqrt(a*a+b*c);

	dis=RADIUS_EARTH*2*asin(dis/2/RADIUS_EARTH);
	return dis;
}

double GetPrecisionEW(double latitude)
{
	//	0.0001度时的东西方向经度,南北方向经度不变
	double precision=sin((90-fabs(latitude))*2*PI/360)*RADIUS_EARTH*0.0001*2*PI/360;
	TRACE("%f\n",precision);
	return precision;
}

void CReadGPSDlg::OnSavePositon() 
{
//	double	dis;
//	dis=GetDistance(121.001590,24.465222,121.001590,24.465222);
//	TRACE("%f\n",dis);
//	GetPrecision(0);
//	GetPrecision(60);
	char tt[200];
	sprintf(tt,"TIME:%s,%f,%f\r\n",__TIME__,m_Longitude,m_Latitude);
	m_LogFile.Write(tt,strlen(tt));
}
//	#define		RADIUS_EARTH		6370000				//	6.37*1000,000
//	2446.5222,12100.1590

BOOL CReadGPSDlg::DestroyWindow() 
{
#ifdef	FILE_LOG_TEST
	if(m_LogFile.m_hFile!=CFile::hFileNull)	m_LogFile.Close();
#endif
#ifdef	DATA_LOG_TEST
	if(m_DataLogFile.m_hFile!=CFile::hFileNull)	m_DataLogFile.Close();
#endif
	return CDialog::DestroyWindow();
}

void CReadGPSDlg::OnClose() 
{
#ifdef	FILE_LOG_TEST
	if(m_LogFile.m_hFile!=CFile::hFileNull)	m_LogFile.Close();
#endif
#ifdef	DATA_LOG_TEST
	if(m_DataLogFile.m_hFile!=CFile::hFileNull)	m_DataLogFile.Close();
#endif
	CDialog::OnClose();
}

void CReadGPSDlg::OnSetRef1() 
{
	UpdateData();
	m_Longitude1=m_CurLongitude;
	m_Latitude1 =m_CurLatitude;
	m_dwTime1=m_dwTime;
	m_dwDate1=m_dwDate;
	m_Time1.Format("%02d:%02d:%02d",m_dwTime1/3600,(m_dwTime1%3600)/60,m_dwTime1%60);
	m_Date1.Format("20%02d-%02d-%02d",m_dwDate1/512,(m_dwDate1%512)/32,m_dwDate1%32);
	UpdateData(FALSE);
}

void CReadGPSDlg::OnSetRef2() 
{
	UpdateData();
	m_Longitude2=m_CurLongitude;
	m_Latitude2 =m_CurLatitude;
	m_dwTime2=m_dwTime;
	m_dwDate2=m_dwDate;
	m_Time2.Format("%02d:%02d:%02d",m_dwTime2/3600,(m_dwTime2%3600)/60,m_dwTime2%60);
	m_Date2.Format("20%02d-%02d-%02d",m_dwDate2/512,(m_dwDate2%512)/32,m_dwDate2%32);
	UpdateData(FALSE);
}

void CReadGPSDlg::OnComputeRef1() 
{
	UpdateData();
	m_Distant1=GetDistance(m_CurLongitude,m_CurLatitude,m_Longitude1,m_Latitude1);
	UpdateData(FALSE);
}

void CReadGPSDlg::OnComputeRef2() 
{
	UpdateData();
	m_Distant2=GetDistance(m_CurLongitude,m_CurLatitude,m_Longitude2,m_Latitude2);
	UpdateData(FALSE);
}

void CReadGPSDlg::OnTest() 
{
	//	3403.868
	//	dis=GetDistance(121.001590,24.465222,121.001590,24.465222);
	double dis;
	dis=GetDistance(121.001590,24.465222,121.001591,24.465222);
	TRACE("%f\n",dis);
	dis=GetDistance(121.001590,24.465222,121.001590,24.465223);
	TRACE("%f\n",dis);
	dis=GetDistance(121.001590,24.465222,121.001591,24.465223);
	TRACE("%f\n",dis);
	//	0.101195
	//	0.111177
	//	0.150336
	//	TRACE("%f\n",sqrt(0.101195*0.101195+0.111177*0.111177));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -