Esempio n. 1
0
void CcsTest::UpdateTarget ()
{
	int prec;
	long frmtXLat, frmtYLng, frmtZHgt;
	char ctemp [24];

	// Is this a geographic coordinate???
	if (CS_isgeo (m_TrgKeyName))
	{
		if (m_DecimalDegrees)
		{
			prec = m_HighPrecision ? 13 : 9;
			frmtXLat = prec;
			frmtYLng = prec;
		}
		else
		{
			prec = m_HighPrecision ? 6 : 2;
			frmtXLat = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | (prec + 1);
			frmtYLng = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | cs_ATOF_XEAST | (prec + 1);
		}
		prec = m_HighPrecision ? 4 : 2;
		frmtZHgt = cs_ATOF_COMMA | (prec + 1);

		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [1],frmtXLat);
		m_TrgXLatitude = ctemp;
		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [0],frmtYLng);
		m_TrgYLongitude = ctemp;
		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [2],frmtZHgt);
		m_TrgZHeight = ctemp;
		m_TrgGridScale = "Not Applicable";
		m_TrgConvergence = "Not Applicable";
	}
	else
	{
		prec = m_HighPrecision ? 5 : 3;
		frmtXLat = cs_ATOF_COMMA | (prec + 1);
		frmtYLng = cs_ATOF_COMMA | (prec + 1);
		frmtZHgt = cs_ATOF_COMMA | (prec + 1);
		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [0],frmtXLat);
		m_TrgXLatitude = ctemp;
		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [1],frmtYLng);
		m_TrgYLongitude = ctemp;
		CS_ftoa (ctemp,sizeof (ctemp),m_TargetXY [2],frmtZHgt);
		m_TrgZHeight = ctemp;
		// Grid Scale for the target system.
		if (m_TargetScale >= 9999.00)
		{
			m_TrgGridScale = "Infinite";
		}
		else if (m_TargetScale > 0.0)
		{
			prec = m_HighPrecision ? 9 : 5;
			CS_ftoa (ctemp,sizeof (ctemp),m_TargetScale,(prec + 1));
			m_TrgGridScale = ctemp;
		}
		else if (m_TargetScale < 0.0)
		{
			m_TrgGridScale = "Domain Err";
		}
		else
		{
			m_TrgGridScale = "";
		}
		// Convergence for the source system.
		if (m_TargetConvergence > -360.0)
		{
			if (m_DecimalDegrees)
			{
				prec = m_HighPrecision ? 9 : 5;
				CS_ftoa (ctemp,sizeof (ctemp),m_TargetConvergence,(prec + 1));
				m_TrgConvergence = ctemp;
			}
			else
			{
				prec = m_HighPrecision ? 4 : 0;
				frmtYLng = cs_ATOF_MINSEC | cs_ATOF_DIRCHR | cs_ATOF_XEAST | (prec + 1);
				CS_ftoa (ctemp,sizeof (ctemp),m_TargetConvergence,frmtYLng);
				m_TrgConvergence = ctemp;
			}
		}
		else if (m_TargetConvergence == -360.0)
		{
			m_TrgConvergence = "Domain Err";
		}
		else
		{
			m_TrgConvergence = "";
		}
	}
	return;
}
Esempio n. 2
0
int CStestF (bool verbose,long32_t duration)
{
    int err_cnt;
    int idx;
    int prec;

    size_t localeSize;
    long32_t il;

    char* localeIdPtr;
    char* localePtr;

    double dbl1, dbl2, tol;

    char bufr [32];

    localePtr = 0;
    duration *= 2000L;
    if (verbose)
    {
        printf ("Setting locale to \"C\".\n");
    }
    localeIdPtr = setlocale (LC_ALL,NULL);
    if (localeIdPtr != 0)
    {
        localeSize = strlen (localeIdPtr) + 1;
        localePtr = (char*)malloc (localeSize);
        if (localePtr != 0)
        {
            CS_stncp (localePtr,localeIdPtr,(int)localeSize);
        }
    }
    setlocale (LC_ALL,"C");

    printf ("Using sprintf to check CS_atof (no DMS).\n");
    err_cnt = 0;
    for (il = 0; il < duration && err_cnt == 0; il += 1)
    {
        dbl1 = CStestRN (-1E+12,1E+12);
        if (fabs (dbl1) < 1E-23) continue;
        sprintf	(bufr,"%28.14f",dbl1);
        CS_atof (&dbl2,bufr);
        prec = (int)log10 (fabs (dbl1));
        prec = (int)log10 (fabs (dbl1)) - 14;
        tol = pow (10.0,(double)prec);
        if (fabs (dbl1 -dbl2) > tol)
        {
            printf ("CS_atof produced %f from %s.\n",dbl2,bufr);
            err_cnt += 1;
        }
    }
    printf ("Using CS_atof to check CS_ftoa.\n");
    for (il = 0; il < duration && err_cnt < 4; il += 1)
    {
        idx = il % 7;
        dbl1 = CStestRN (fTable [idx].min,fTable [idx].max);
        CS_ftoa (bufr,sizeof (bufr),dbl1,fTable [idx].format);
        CS_atof (&dbl2,bufr);
        if (fabs (dbl1 - dbl2) > fTable [idx].tol)
        {
            printf ("CS_atof/ftoa failed: %f -> %s ->%f\n",dbl1,bufr,dbl2);
            err_cnt += 1;
        }
    }
    if (localePtr != 0)
    {
        if (verbose)
        {
            printf ("Resetting locale to \"%s\".\n",localePtr);
        }
        setlocale (LC_ALL,localePtr);
        free (localePtr);
    }
    return (err_cnt);
}