Našel jsem na netu tuto funkci, nevím v jakém je jazyce ale vypadá to podobné jako v C/C++ ale nejsou tam typy:
public static List<double> GetBoundingCoordinates(uint boundingValue)
{
var list = new List<double>();
var shiftValue = 15;
var work = boundingValue;
var latitudeData = (uint)0;
var longitudeData = (uint)0;
while (work < 0x80000000 && shiftValue >= 0)
{
shiftValue--;
work *= 4;
}
work &= 0x7FFFFFFF; // Remove negative flag, if any
var powerOfTwo = shiftValue;
while (shiftValue >= 0)
{
if (work >= 0x80000000)
{
latitudeData += (uint)(1 << shiftValue);
}
if ((work & 0x40000000) != 0)
{
longitudeData += (uint)(1 << shiftValue);
}
work *= 4;
shiftValue--;
}
// factor = 1.0 / (2^i)
var factor = 1.0 / (1 << powerOfTwo);
// Calc bounding coordinates
var minLatitudeDeg = 90.0 - ((latitudeData + 1.0) * factor * 360.0);
var maxLatitudeDeg = 90.0 - (latitudeData * factor * 360.0);
var minLongitude = (longitudeData * factor * 480.0) - 180.0;
var maxLongitude = ((longitudeData + 1.0) * factor * 480.0) - 180.0;
list.Add(minLatitudeDeg);
list.Add(maxLatitudeDeg);
list.Add(minLongitude);
list.Add(maxLongitude);
return list;
}
Načetl jsem z hlavičky binárního souboru tuto hex hodnotu: E8 07 02 00 a to by zřejmě mělo odpovídat tomuto: MinLatitude(Deg) = 46.40625. Mám celkem 4 čísla, které potřebuju převést, ale to číslo už mám načtené v uint_32 (případně bych to mohl načíst jako int). Mohli byste mi s tím pomoct převést do C?
PS:
Možná jsem to nepochopil správně, ale z toho čísla E8 07 02 00 asi ta funkce má vytáhnout 4 hodnoty:
MinLatitude(Deg) = 46.40625
MaxLatitude(Deg) = 47.8125
MinLongitude(Deg) = -75.0
MaxLongitude(Deg) = -73.125
Nechápu výpočet...