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

📄 geotrans_base.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CGEOTRANS_Base::Set_Transformation(bool bShow_Dialog)
{
	int			Type_Index, Datum_Index;
	CSG_Parameters	*pParms;

	//-----------------------------------------------------
	// 1. Input...

	Datum_Index	= pProjection->Get_Parameter("SOURCE_DATUM")		->asInt() + 1;
	Type_Index	= pProjection->Get_Parameter("SOURCE_PROJECTION")	->asInt() + 1;

	if(	Get_Coordinate_System_Type(Type_Index, &Type_Input)		!= 0 )
	{
		Message_Dlg(_TL("Source Coordinate System Type Error"));
		return( false );
	}

	if(	Set_Datum(Interactive, Input, Datum_Index)				!= 0 )
	{
		Message_Dlg(_TL("Source Datum Error"));
		return( false );
	}

	if(	Set_Coordinate_System(Interactive, Input, Type_Input)	!= 0 )
	{
		Message_Dlg(_TL("Source Coordinate System Error"));
		return( false );
	}

	if(	(pParms = Get_Projection_Parameters(true, Type_Input, bShow_Dialog))	== NULL )
	{
		return( false );
	}

	if(	Set_Projection_Parameters(Input, Type_Input, pParms)	== false )
	{
		Message_Dlg(_TL("Source Projection Error"));
		return( false );
	}


	//-----------------------------------------------------
	// 2. Output...

	Datum_Index	= pProjection->Get_Parameter("TARGET_DATUM")		->asInt() + 1;
	Type_Index	= pProjection->Get_Parameter("TARGET_PROJECTION")	->asInt() + 1;

	if(	Get_Coordinate_System_Type(Type_Index, &Type_Output)	!= 0 )
	{
		Message_Dlg(_TL("Target Coordinate System Type Error"));
		return( false );
	}

	if(	Set_Datum(Interactive, Output, Datum_Index)				!= 0 )
	{
		Message_Dlg(_TL("Target Datum Error"));
		return( false );
	}

	if(	Set_Coordinate_System(Interactive, Output, Type_Output)	!= 0 )
	{
		Message_Dlg(_TL("Target Coordinate System Error"));
		return( false );
	}

	if(	(pParms = Get_Projection_Parameters(false, Type_Output, bShow_Dialog))	== NULL )
	{
		return( false );
	}

	if(	Set_Projection_Parameters(Output, Type_Output, pParms)	== false )
	{
		Message_Dlg(_TL("Target Projection Error"));
		return( false );
	}

	return( true );
}

//---------------------------------------------------------
bool CGEOTRANS_Base::Set_Transformation_Inverse(void)
{
	long			Datum_Input, Datum_Output;
	Coordinate_Type	Type;
	CSG_Parameters		*pParms_Input, *pParms_Output;

//	if( Set_Transformation(false) )
	{
		pParms_Input	= Get_Projection_Parameters(true , Type_Input , false);
		pParms_Output	= Get_Projection_Parameters(false, Type_Output, false);

		Get_Datum(Interactive,  Input, &Datum_Input);
		Get_Datum(Interactive, Output, &Datum_Output);

		Type			= Type_Input;
		Type_Input		= Type_Output;
		Type_Output		= Type;

		return(	Set_Datum(Interactive,  Input,  Datum_Output)					== 0
			&&	Set_Coordinate_System(Interactive,  Input, Type_Input)			== 0
			&&	Set_Projection_Parameters( Input, Type_Input , pParms_Output)	== true

			&&	Set_Datum(Interactive, Output,  Datum_Input)					== 0
			&&	Set_Coordinate_System(Interactive, Output, Type_Output)			== 0
			&&	Set_Projection_Parameters(Output, Type_Output, pParms_Input)	== true
		);
	}

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CGEOTRANS_Base::Set_Projection_Parameters(Input_Output dir, Coordinate_Type Type, CSG_Parameters *pParms)
{
	if( pParms )
	{
		switch( Type )	// Get_Parms()...
		{
		//-------------------------------------------------
		case Albers_Equal_Area_Conic:		// Layout 4*2*2
			{	Albers_Equal_Area_Conic_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.std_parallel_1	= pParms->Get_Parameter("PARALLEL_1")	->asDouble() * M_DEG_TO_RAD;
				params.std_parallel_2	= pParms->Get_Parameter("PARALLEL_2")	->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Albers_Equal_Area_Conic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Azimuthal_Equidistant:			// Layout 2*2*2
			{	Azimuthal_Equidistant_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Azimuthal_Equidistant_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Bonne:							// Layout 2*2*2
			{	Bonne_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Bonne_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case BNG:							// Layout:0*0*1
			break;

		//-------------------------------------------------
		case Cassini:						// Layout 2*2*2
			{	Cassini_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Cassini_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Cylindrical_Equal_Area:		// Layout 2*2*2
			{	Cylindrical_Equal_Area_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Cylindrical_Equal_Area_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Eckert4:						// Layout 1*2*2
			{	Eckert4_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Eckert4_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Eckert6:						// Layout 1*2*2
			{	Eckert6_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Eckert6_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Equidistant_Cylindrical:		// Layout 2*2*2
			{	Equidistant_Cylindrical_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.std_parallel		= pParms->Get_Parameter("PARALLEL")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Equidistant_Cylindrical_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Geocentric:					// Layout:0*0*3
			break;

		//-------------------------------------------------
		case Geodetic:						// Layout:0*0*3		// height type
			{	Geodetic_Parameters						params;

				switch( pParms->Get_Parameter("HEIGHT")->asInt() )
				{
				case 0:	default:
					params.height_type	= No_Height;
					break;

				case 1:
					params.height_type	= Ellipsoid_Height;
					break;

				case 2:
					params.height_type	= Geoid_or_MSL_Height;
					break;
				}

				Set_Geodetic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case GEOREF:						// Layout: 0*0*1
			break;

		//-------------------------------------------------
		case Gnomonic:						// Layout: 2*2*2
			{	Gnomonic_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Gnomonic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Lambert_Conformal_Conic:		// Layout: 4*2*2
			{	Lambert_Conformal_Conic_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.std_parallel_1	= pParms->Get_Parameter("PARALLEL_1")	->asDouble() * M_DEG_TO_RAD;
				params.std_parallel_2	= pParms->Get_Parameter("PARALLEL_2")	->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Lambert_Conformal_Conic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Local_Cartesian:				// Layout: 3*1*3
			{	Local_Cartesian_Parameters				params;

				params.origin_longitude	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.origin_height	= pParms->Get_Parameter("HEIGHT")		->asDouble();
				params.orientation		= pParms->Get_Parameter("ORIENT")		->asDouble() * M_DEG_TO_RAD;

				Set_Local_Cartesian_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Mercator:						// Layout: 3*2*2
			{	Mercator_Parameters					params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.scale_factor		= pParms->Get_Parameter("SCALE")		->asDouble();
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Mercator_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case MGRS:							// Layout:0*0*1
			break;

		//-------------------------------------------------
		case Miller_Cylindrical:			// Layout:1*2*2
			{	Miller_Cylindrical_Parameters		params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Miller_Cylindrical_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Mollweide:						// Layout:1*2*2
			{	Mollweide_Parameters				params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

				Set_Mollweide_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Neys:							// Layout: 4*2*2
			{	Neys_Parameters						params;

				params.central_meridian	= pParms->Get_Parameter("MERIDIAN")		->asDouble() * M_DEG_TO_RAD;

⌨️ 快捷键说明

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