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