GeomCoords: fixed charset problem in FormatDegree

git-svn-id: svn://ultimatepp.org/upp/trunk@1707 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2009-11-19 09:27:49 +00:00
parent 58f3aa28d8
commit fb5fd1a78e
2 changed files with 11 additions and 10 deletions

View file

@ -4,7 +4,7 @@ uses
file
GeomCoords.h,
util.cpp,
util.cpp charset "UTF-8",
ellipsoid.cpp,
coords.cpp,
method.h,

View file

@ -137,17 +137,18 @@ String FormatDegree(double d, int decimals)
char sign = (d < 0 ? '-' : '+');
if(d < 0) d = -d;
int deg = ffloor(d);
String cd = ToCharset(CHARSET_DEFAULT, "%c%d°", CHARSET_UTF8);
if(decimals <= -2)
return NFormat("%c%d°", sign, deg);
return NFormat(cd, sign, deg);
d = (d - deg) * 60;
int min = ffloor(d);
if(decimals <= -1)
return NFormat("%c%d° %02d\'", sign, deg, min);
return NFormat(cd + " %02d\'", sign, deg, min);
d = (d - min) * 60;
String sec = FormatDoubleFix(d, decimals);
if(!IsDigit(sec[1]))
sec.Insert(0, '0');
return NFormat("%c%d° %02d\' %s\"", sign, deg, min, sec);
return NFormat(cd + " %02d\' %s\"", sign, deg, min, sec);
}
Value ScanDegree(const char *p)
@ -158,21 +159,21 @@ Value ScanDegree(const char *p)
if(IsNull(deg))
return Null;
if(deg < -360 || deg > 360)
return ErrorValue(NFormat("Neplatný poèet úhlových stupòù: %d", deg));
return ErrorValue(NFormat("Neplatný poèet úhlových stupòù: %d", deg));
while(*p && !IsDigit(*p))
p++;
if(*p)
{
min = ScanInt(p, &p);
if(min < 0 || min >= 60)
return ErrorValue(NFormat("Neplatný poèet úhlových minut: %d", min));
return ErrorValue(NFormat("Neplatný poèet úhlových minut: %d", min));
while(*p && !IsDigit(*p))
p++;
if(*p)
{
sec = ScanDouble(p);
if(IsNull(sec) || sec < 0 || sec > 60)
return ErrorValue(NFormat("Neplatný poèet úhlových sekund: %d", sec));
return ErrorValue(NFormat("Neplatný poèet úhlových sekund: %d", sec));
}
}
return ((sec / 60.0 + min) / 60.0 + tabs(deg)) * (deg >= 0 ? 1 : -1);
@ -199,13 +200,13 @@ Value ConvertDegree::Scan(const Value& v) const
if(IsNull(d))
{
if(not_null)
return ErrorValue("Hodnota nesmí být prázdná.");
return ErrorValue("Hodnota nesmí být prázdná.");
return Null;
}
if(!IsNull(min) && d < min)
return ErrorValue(NFormat("Zadaný úhel je menší než povolená dolní mez, %s.", FormatDegree(min, 0)));
return ErrorValue(NFormat("Zadaný úhel je menší než povolená dolní mez, %s.", FormatDegree(min, 0)));
if(!IsNull(max) && d > max)
return ErrorValue(NFormat("Zadaný úhel je vìtší než povolená horní mez, %s.", FormatDegree(max, 0)));
return ErrorValue(NFormat("Zadaný úhel je vìtší než povolená horní mez, %s.", FormatDegree(max, 0)));
return d;
}