You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
2.9 KiB
C

1 month ago
// Ellipsoid.h: interface for the CProjectionGaussKruger class.
/////////////////////////////////////////////////////////////////////////////
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
// ͶӰת<D3B0><D7AA>
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2008-11-09
//
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_ELLIPSOID_H__B996064A_B913_4EA7_8BEF_846B8208C897__INCLUDED_)
#define AFX_ELLIPSOID_H__B996064A_B913_4EA7_8BEF_846B8208C897__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ConversionParameter.h"
/* ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
c:>type Projection.ini
[ellipsoid]
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1967<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
1975<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
1980<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
WGS-84(GPS<EFBFBD><EFBFBD>λϵͳ)
[WGS-84(GPS<EFBFBD><EFBFBD>λϵͳ)]
a=6378137
1/f=298.257223563
date=1984
append=GPS<EFBFBD><EFBFBD>λϵͳ
[1967<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ]
a=6378160
1/f=298.247167
date=1967
append=1971<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD>ֵ
[1975<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ]
a=6378140
1/f=298.257
date=1975
append=1975<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD>ֵ
[1980<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ]
a=6378137
1/f=298.257
date=1979
append=1979<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>Ƽ<EFBFBD>ֵ
[<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
a=6378245
1/f=298.3
date=1942
append=<EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>
Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>CProjectionGaussKruger::Initial("Projection.ini","<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
*/
//#define PI 3.14159265358979324
//#define RHO (180.0/PI)
class AFX_EXT_CLASS CEllipsoid
{
public:
CEllipsoid();
virtual ~CEllipsoid();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>岻ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
//<2F><><EFBFBD><EFBFBD>: Initial("Projection.ini","1967<36><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ","1980<38><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ");
int Initial(CString lpFileName, CString lpAppName, CString other);
//lpFileNameΪͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>, lpAppNameͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int Initial(CString lpFileName,CString lpAppName);
int Initial(double m_a,double m_f);
CEllipsoid& operator =(CEllipsoid &es);
//L=<3D><><EFBFBD>ȣ<EFBFBD>B=γ<>ȣ<EFBFBD>(X,Y,Z)ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void toBLH(double &XX,double &YY,double &ZZ); //
void toXYZ(double &B,double &L,double &H); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double GetB(double &XX,double &YY,double &ZZ);
double GetM(double B); //<2F><><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6><EFBFBD>ʰ뾶
double GetN(double B); //î<><C3AE>Ȧ<EFBFBD><C8A6><EFBFBD>ʰ뾶
double GetR(double B); //ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD>ʰ뾶
double GetRA(double B); //<2F><><EFBFBD><EFBFBD><E2B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʰ뾶
public:
CConversionParameter cp;//<2F><>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double pre;
double A0,B0,C0,D0;
double e2; //<2F><>
double a; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double f; //<2F><>ƽ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD> f=(a-b)/a f=1/f
protected:
int Initial();
double arc_length_of_meridian(double B); //<2F><><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB><EFBFBD>
double arc_length_of_meridian_reverse(double s);
};
//***************************** <20><>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD>񣨺<EFBFBD><F1A3A8BA><EFBFBD>ī<EFBFBD><C4AB><EFBFBD>У<EFBFBD>ͶӰ *******************
class AFX_EXT_CLASS CProjectionGaussKruger : public CEllipsoid
{
public:
CProjectionGaussKruger();
CProjectionGaussKruger(double m_a,double m_f); //m_aΪ<61><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򳤰<EFBFBD><F2B3A4B0><EFBFBD>,m_fΪ<66><CEAA>ƽ<EFBFBD><C6BD>
virtual ~CProjectionGaussKruger();
//<2F><>˹ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD>
int GaussBL(double &x,double &y); //<2F><>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>
int GaussXY(double &B,double &L);
int GaussXY(double &B, double &L,double L0); //<2F><>λΪ<CEBB><CEAA>
};
#endif // !defined(AFX_ELLIPSOID_H__B996064A_B913_4EA7_8BEF_846B8208C897__INCLUDED_)