// Convert.cpp : Defines the entry point for the console application.
//



#include "coordcnv.h" /*including coordinate convertor*/
#include <stdio.h>
#include <stdlib.h>

// Test
void Test();
void Help();


int main(int argc, char* argv[])
{
	int     nCorrection = 1;
    char    **p_end=NULL;
	int     verbose=0;

	TCoordinate  Coord_src;
    TProjected   Projected;
printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10); //Kokeilu cgi-skriptiksi muuntamiseksi. J.kuittinen 3.11.2007
    if(argc < 2)
	{
	   Test();
	   Help();
	   
	   return 0;
	}

    Coord_src.Latitude  = strtod(argv[1], p_end);
	Coord_src.Longitude = strtod(argv[2], p_end);
	Coord_src.Datum = WGS84; //International;

	if(verbose == 1)
	{
	   printf ("Original coordinate: lat=%f, long=%f.\n",
		        Coord_src.Latitude, Coord_src.Longitude);
	}

	ForwardTransform(&Coord_src, &Projected, pKKJ, nCorrection); //Muunnetaan KKJ, muutos 6.11.2007 JK

	if(verbose == 1)
	{
   	   printf("YKJ:  N=%f, E=%f\n", Projected.Northing, Projected.Easting);
	}
	else
	{
       printf("%.0f %.f\n", Projected.Northing, Projected.Easting);
	}


    return 0;
}


void Test()
{
	int     nCorrection = 1;
    double  d1, d2, a, D1, D2, A; 

	TCoordinate  ResultCoord;
	TCoordinate  Coord= {62.6000833333333,29.747383333333,International};
	TProjected   Projected;

    TProjected   Proj_src_1 = {6889797, 3622933, 3, International};
	TProjected   Proj_src_2 = {6890686, 3623506, 3, International};
    TProjected   Proj_dst_1;
	TProjected   Proj_dst_2;
    TCoordinate  Coord_dst_1, Coord_dst_2;

	printf("TEST #1\n");

	printf ("Original coordinate: lat=%f, long=%f.\n",Coord.Latitude,
													Coord.Longitude);
	printf("\n");
	printf("	Northing	Easting\n");

	ForwardTransform(&Coord,&Projected, pYKJ, nCorrection);
	InverseTransform(&Projected, &ResultCoord, pYKJ, nCorrection);

	printf("YKJ:	%f, %f,   Inverse=(%f,%f)\n",Projected.Northing,
		     Projected.Easting, ResultCoord.Latitude, ResultCoord.Longitude);

	ForwardTransform(&Coord, &Projected, pUTM, nCorrection);
	InverseTransform(&Projected, &ResultCoord,pUTM, nCorrection);

	printf("UTM:	%f, %f,   Inverse=(%f,%f)\n",Projected.Northing,
	  	    Projected.Easting, ResultCoord.Latitude, ResultCoord.Longitude);

	ForwardTransform(&Coord, &Projected,pKKJ, nCorrection);
	InverseTransform(&Projected, &ResultCoord,pKKJ, nCorrection);

	printf("KKJ:	%f, %f,   Inverse=(%f,%f)\n",Projected.Northing,
		    Projected.Easting, ResultCoord.Latitude, ResultCoord.Longitude);

    /****************************************************/

    printf("TEST #2\n");
    printf ("Original data: N1=%f, E1=%f.\n", Proj_src_1.Northing, Proj_src_1.Easting);
	printf ("             : N2=%f, E2=%f.\n", Proj_src_2.Northing, Proj_src_2.Easting);

	// Conversion
	InverseTransform(&Proj_src_1, &Coord_dst_1, pKKJ, 0);
    InverseTransform(&Proj_src_2, &Coord_dst_2, pKKJ, 0);

    ForwardTransform(&Coord_dst_1, &Proj_dst_1, pKKJ, 1);
	ForwardTransform(&Coord_dst_2, &Proj_dst_2, pKKJ, 1);

	// Results
	printf("Geo:	%f, %f \n", Coord_dst_1.Longitude,  Coord_dst_1.Latitude);
	printf("     	%f, %f \n", Coord_dst_2.Longitude,  Coord_dst_2.Latitude);


	printf("KKJ:	%f, %f \n", Proj_dst_1.Northing,  Proj_dst_1.Easting);
	printf("     	%f, %f \n", Proj_dst_2.Northing,  Proj_dst_2.Easting);

	// Slope
	d1 = Proj_src_1.Northing - Proj_src_2.Northing;
	d2 = Proj_src_1.Easting  - Proj_src_2.Easting;
    
	a =  d1/d2;

	D1 = Proj_dst_1.Northing - Proj_dst_2.Northing;
	D2 = Proj_dst_1.Easting  - Proj_dst_2.Easting;
    
	A =  D1/D2;
    
	printf("Slope: %.3f -> %.3f \n", a, A);

}


void Help()
{
	printf("\n\nUsage:   Convert Lat Lon [> fname]\n");
    printf("Example: Convert 65.123 30.123 \n");
	printf("         Convert 65.123 30.123 > dump\n");
	
    printf("\nCopyright (C) 2005 Alexander Kolesnikov\n");
}
