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

📄 geotrans_base.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;

				switch( pParms->Get_Parameter("PARALLEL_1")->asInt() )
				{
				case 0:	default:
					params.std_parallel_1 = 71.0 * M_DEG_TO_RAD;
					break;

				case 1:
					params.std_parallel_1 = 74.0 * M_DEG_TO_RAD;
					break;
				}

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

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

		//-------------------------------------------------
		case NZMG:							// Layout:0*0*2
			break;

		//-------------------------------------------------
		case Oblique_Mercator:				// Layout:4*4*2
			{	Oblique_Mercator_Parameters			params;

				params.origin_latitude	= pParms->Get_Parameter("LATITUDE")		->asDouble() * M_DEG_TO_RAD;
				params.scale_factor		= pParms->Get_Parameter("SCALE")		->asDouble();
				params.longitude_1		= pParms->Get_Parameter("LONGITUDE_1")	->asDouble() * M_DEG_TO_RAD;
				params.latitude_1		= pParms->Get_Parameter("LATITUDE_1")	->asDouble() * M_DEG_TO_RAD;
				params.longitude_2		= pParms->Get_Parameter("LONGITUDE_2")	->asDouble() * M_DEG_TO_RAD;
				params.latitude_2		= pParms->Get_Parameter("LATITUDE_2")	->asDouble() * M_DEG_TO_RAD;
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

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

		//-------------------------------------------------
		case Orthographic:					// Layout:2*2*2
			{	Orthographic_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_Orthographic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Polar_Stereo:					// Layout:2*2*2
			{	Polar_Stereo_Parameters				params;

				params.longitude_down_from_pole	= pParms->Get_Parameter("LONGITUDE")->asDouble() * M_DEG_TO_RAD;
				params.latitude_of_true_scale	= 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_Polar_Stereo_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Polyconic:						// Layout:2*2*2
			{	Polyconic_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_Polyconic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Sinusoidal:					// Layout:1*2*2
			{	Sinusoidal_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_Sinusoidal_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Stereographic:					// Layout 2*2*2
			{	Stereographic_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_Stereographic_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case Transverse_Cylindrical_Equal_Area:	// Layout:3*2*2
			{	Transverse_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.scale_factor		= pParms->Get_Parameter("SCALE")		->asDouble();
				params.false_easting	= pParms->Get_Parameter("EASTING")		->asDouble();
				params.false_northing	= pParms->Get_Parameter("NORTHING")		->asDouble();

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

		//-------------------------------------------------
		case Transverse_Mercator:			// Layout:3*2*2
			{	Transverse_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_Transverse_Mercator_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		case UPS:							// Layout:0*0*2		// Hemisphere
			{
				flag_Hemisphere	= pParms->Get_Parameter("HEMISPHERE")->asInt() == 1 ? 'S' : 'N';
			}
			break;

		//-------------------------------------------------
		case UTM:							// Layout:0*0*2		// Hemisphere		// Zone
			{	UTM_Parameters					params;

				flag_Hemisphere	= pParms->Get_Parameter("HEMISPHERE")	->asInt() == 1 ? 'S' : 'N';
				UTM_Zone		= pParms->Get_Parameter("ZONE")			->asInt();

				if( pParms->Get_Parameter("TOGCHECK")->asBool() && UTM_Zone >= 1 && UTM_Zone <= 60 )
				{
					params.override	= 1;
					params.zone		= UTM_Zone;
				}
				else
				{
					params.override	= 0;
					params.zone		= UTM_Zone	= 0;
				}

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

		//-------------------------------------------------
		case Van_der_Grinten:				//Layout: 1*2*2
			{	Van_der_Grinten_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_Van_der_Grinten_Params(Interactive, dir, params);
				break;
			}

		//-------------------------------------------------
		default:
			{
				return( false );
			}
		}	// end of switch...

		return( true );
	}

	return( false );
}


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

//---------------------------------------------------------
bool CGEOTRANS_Base::Get_Converted(double &x, double &y, double &z)
{
	return( Convert_Set(x, y, z) && Convert(Interactive) == 0 && Convert_Get(x, y, z) );
}

bool CGEOTRANS_Base::Get_Converted(TSG_Point &Point)
{
	return( Get_Converted(Point.x, Point.y) );
}

bool CGEOTRANS_Base::Get_Converted(double &x, double &y)
{
	return( Convert_Set(x, y) && Convert(Interactive) == 0 && Convert_Get(x, y) );
}

//---------------------------------------------------------
bool CGEOTRANS_Base::Convert_Set(double x, double y, double z)
{
	long	error_code	= -1;

	if( bInitialized )
	{
		switch( Type_Input )
		{
		default:
			return( Convert_Set(x, y) );

		case Geocentric:
			{
				Geocentric_Tuple coord;
				coord.x				= x;
				coord.y				= y;
				coord.z				= z;
				error_code			= Set_Geocentric_Coordinates(Interactive, Input, coord);
				break;
			}

		case Geodetic:
			{
				Geodetic_Tuple coord;
				coord.longitude		= x * M_DEG_TO_RAD;
				coord.latitude		= y * M_DEG_TO_RAD;
				coord.height		= z;
				error_code			= Set_Geodetic_Coordinates(Interactive, Input, coord);
				break;
			}

		case Local_Cartesian:
			{
				Local_Cartesian_Tuple coord;
				coord.x				= x;
				coord.y				= y;
				coord.z				= z;
				error_code			= Set_Local_Cartesian_Coordinates(Interactive, Input, coord);
				break;
			}
		}
	}

	return( error_code == 0 );
}

//---------------------------------------------------------
bool CGEOTRANS_Base::Convert_Set(double x, double y)
{
	long	error_code	= -1;

	if( bInitialized )
	{
		switch( Type_Input )
		{
		default:	// case BNG: case GEOREF: case MGRS:
			return( false );

		case Geocentric:
		case Geodetic:
		case Local_Cartesian:
			return( Convert_Set(x, y, 0.0) );

		case Albers_Equal_Area_Conic:
			{
				Albers_Equal_Area_Conic_Tuple	coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Albers_Equal_Area_Conic_Coordinates(Interactive, Input, coord);
				break;
			}

		case Azimuthal_Equidistant:
			{
				Azimuthal_Equidistant_Tuple		coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Azimuthal_Equidistant_Coordinates(Interactive, Input, coord);
				break;
			}

		case Bonne:
			{
				Bonne_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Bonne_Coordinates(Interactive, Input, coord);
				break;
			}

		case Cassini:
			{
				Cassini_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Cassini_Coordinates(Interactive, Input, coord);
				break;
			}
	
		case Cylindrical_Equal_Area:
			{
				Cylindrical_Equal_Area_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Cylindrical_Equal_Area_Coordinates(Interactive, Input, coord);
				break;
			}

		case Eckert4:
			{
				Eckert4_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Eckert4_Coordinates(Interactive, Input, coord);
				break;
			}

		case Eckert6:
			{
				Eckert6_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Eckert6_Coordinates(Interactive, Input, coord);
				break;
			}

		case Equidistant_Cylindrical:
			{
				Equidistant_Cylindrical_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Equidistant_Cylindrical_Coordinates(Interactive, Input, coord);
				break;
			}

		case Gnomonic:
			{
				Gnomonic_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Gnomonic_Coordinates(Interactive, Input, coord);
				break;
			}

		case Lambert_Conformal_Conic:
			{
				Lambert_Conformal_Conic_Tuple coord;
				coord.easting		= x;
				coord.northing		= y;
				error_code			= Set_Lambert_Conformal_Conic_Coordinates(Interactive, Input, coord);
				break;
			}

		case Mercator:

⌨️ 快捷键说明

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