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

📄 gpspos.cpp

📁 GPS定位报警程序
💻 CPP
字号:
// GPSParam.cpp: implementation of the GPSParam class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GpsPos.h"
#include "math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GpsPos::GpsPos()
{
	L0=117+20.0/60.0;
}

GpsPos::~GpsPos()
{

}

bool GpsPos::SetXY(double x0, double y0)
{
	if (true)	//判断合法性
	{
		X=x0;
		Y=y0;
		return true;
	}
}

bool GpsPos::SetBL(double b0, double l0)
{
	if( b0>-90 && b0<90 && l0>-180 && l0<180 ) 	//判断经纬度的合法性
	{
		B=b0;
		L=l0;
		return true;
	}
	else
		return false;
}

bool GpsPos::BLtoXY()
{
	double l,t,ita2,m0,N;
	double Temp1,Temp2,Temp3,Temp4,Temp5,Temp6,Temp7,Temp8;
	double PAI=3.1415926535898;
	double a=6378245.0;
	double e2=0.00669342162297;
	double el2=0.00673852541468;
	double p2=3600.0*180.0/PAI;
	double P0=PAI/180.0;
	//54坐标系常熟
	double C0=6367558.49686;
	double C1=32005.79642;
	double C2=133.86115;
	double C3=0.7031;
	double temp1,temp2,temp3,temp4;//temp5;
	//高斯变换、
	l=(L-L0)*3600;			//??????????
	t=tan(B*P0);
	temp1=t*t;
	ita2=el2*cos(B*P0)*cos(B*P0);
	temp2=ita2*ita2;
	N=a/sqrt(1-e2*sin(B*P0) *sin(B*P0));
	m0=l*cos(B*P0)/p2;		//????????
	temp3=m0*m0;
	temp4=temp3*temp3;
	Temp1=N*m0;
	Temp2=C0*B*P0;
	Temp5=sin(B*P0) * sin(B*P0);
	Temp3=cos(B*P0)*sin(B*P0)*(C1+C2*Temp5+C3*Temp5*Temp5);
	Temp4=1.0/2.0*N*t*temp3;
	Temp5=1/24.0*(5.0-(temp1*temp1)+9*ita2+4*temp2*temp2 )*N*t*temp4;
	Temp6=1/720.0*(61-58*temp1+temp1*temp1)*N*t*temp3*temp4;
	Temp7=1/6.0*( 1-temp1+ita2 )*N*m0*temp3;
	Temp8=1/120.0*(5-18*temp1+temp1*temp1+14*temp2-58*ita2*temp1)*N*m0*temp4;

	X=Temp2+Temp3+Temp4+Temp5+Temp6;
	Y=500000+Temp1+Temp7+Temp8;

	return true;
}

bool GpsPos::XYtoBL()
{

	return true;
}

bool GpsPos::BLtoXY_2()
{
	double l,t,ita2,m0,N;
	double Temp1,Temp2,Temp3,Temp4,Temp5,Temp6;
	double PAI=3.1415926535898;
	double a=6378245.0;
	double e2=0.00669342162297;
	double el2=0.00673852541468;
	double p2=3600.0*180.0/PAI;
	double P0=PAI/180.0;
	
	//54坐标系常熟
	double C0=6367558.49686;
	double C1=32005.79642;
	double C2=133.86115;
	double C3=0.7031;
	
	//高斯变换、
	l=(L-L0);			//??????????
	t=tan(B*P0);
	double t2=t*t;
	ita2=el2*cos(B*P0)*cos(B*P0);
	double ita4=ita2*ita2;
	N=a/sqrt(1-e2*sin(B*P0) *sin(B*P0));
	m0=l*cos(B*P0)/p2;		//????????
	double m02=m0*m0;
	double m04=m02*m02;
	
	Temp1=sin(B*P0) * sin(B*P0);
	double X0
		=C0*B*P0+cos(B*P0)*sin(B*P0)*(C1+C2*Temp1+C3*Temp1*Temp1);

	Temp2=1.0/2.0*N*t*m02;
	Temp3=1/24.0*(5.0-(t2*t2)+9*ita2+4*ita4 )*N*t*m04;
	Temp4=1/720.0*(61-58*t2+t2*t2)*N*t*m02*m04;
	
	Temp5=1/6.0*( 1-t2+ita2 )*N*m0*m02;
	Temp6=1/120.0*(5-18*t2+t2*t2+14*ita2-58*ita2*t2)*N*m0*m04;
	
	X=X0+Temp1+Temp3+Temp4;
	Y=N*m0+Temp5+Temp6+500000;
	
	return true;
}

⌨️ 快捷键说明

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