📄 geotrans_base.cpp
字号:
}
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 + -