BadGe Creative Commons License 2001.11.16 0 0 1813
Hát akkor elemezgesd, tényleg mágikus. illetve LCC, amiből valóban egy nagycsomó egyéb adat is következik :)

//**************************************************
//*
//* Kiszámítja egy adott földrajzi szélesség távolságát
//* a pólustól. Sok esetben a vetített földrajzi pontot
//* ezzel a sugárral számítjuk ki.
//*

double CGeoCalc::LatitudeDistance( double l )
{
double sz; // számláló
double n; // nevező
double beta; // komplementer szög;
double m1; // a kúp "kis" magassága

beta = 90 - l;
sz = tan( beta * RAD ) * cone_m;
n = tan( alpha * RAD ) + tan( beta * RAD );
m1 = sz/n;

return m1/cos(alpha*RAD);
}

//**************************************************
//*
//* A szélességi és hosszúsági koordinátákat
//* a kúppalást x,y koordinátáivá transzformálja.
//* Az eredményeket a CEarthCoordinates erre a
//* célra fenntartott x,y változóiban kapjuk.
//*

void CGeoCalc::ConeCoordinates(CEarthCoordinate *a)
{
double n, ld;
//
// a leképezés sugara
//
n = LatitudeDistance( a->Lat );
//
// torzított szélesség
//
ld = a->Long * cone_lambda * RAD * m_Ortographic;
//
// x,y koordináták a kúppaláston
//
a->x = cos( ld ) * n;
a->y = sin( ld ) * n;

return;
}

//**************************************************
//*
//* Bemenő paraméter az A földrajzi koordinátái
//* az eredményeket X,Y-ban kapjuk
//*

void CGeoCalc::EarthToMap( CEarthCoordinate *a )
{
double x,y;
double Lat,Long;

//
// 0. leképezés
//
switch ( m_Projection )
{
case PRJ_CONE :
ConeCoordinates( a );
//
// 1. térkép deviáció korrigálása
//
FlatRotate( &ref1 , a , map_dev + map_dev2 + m_RotationConstant);
//FlatRotate( &ref1 , a , map_dev2);
//
// 2. térkép elhelyezése a középpontban
//
x = a->x - ref1.x;
y = a->y - ref1.y;
//
// 3. átszámítás pixelekbe
//
x = x * km2pixel;
y = y * km2pixel;
//
// 4. elhelyezés a térképen
//
x = x + ref_x;
y = ref_y - y; // képernyő inverz Y felépítése miatt !

//
// 5. eredmény
//
a->x = x;
a->y = y;
break;
case PRJ_ORTO:
//
// bázisponthoz viszonyított koordináták
//
Lat = a->Lat - ref1.Lat;
Long = a->Long - ref1.Long;
//
// skálázzuk az adatokat
//
a->x = Long / OrtoLong;
a->y = Lat / OrtoLat;
//
// bázispontok hozzáadása
//
a->x = a->x + ref_x;
//a->y = ref_y - a->y;
a->y = ref_y + a->y;
break;
}
}

Előzmény: Vgyuri (1812)