Coordinates TCXParser::position() { Coordinates pos; qreal val; bool res; while (_reader.readNextStartElement()) { if (_reader.name() == "LatitudeDegrees") { val = _reader.readElementText().toDouble(&res); if (!res || (val < -90.0 || val > 90.0)) _reader.raiseError("Invalid LatitudeDegrees"); else pos.setLat(val); } else if (_reader.name() == "LongitudeDegrees") { val = _reader.readElementText().toDouble(&res); if (!res || (val < -180.0 || val > 180.0)) _reader.raiseError("Invalid LongitudeDegrees"); else pos.setLon(val); } else _reader.skipCurrentElement(); } return pos; }
static QPointF tile2mercator(const QPoint &tile, int z) { Coordinates m; m.setLon(tile.x() / pow(2.0, z) * 360.0 - 180); qreal n = M_PI - 2.0 * M_PI * tile.y() / pow(2.0, z); m.setLat(rad2deg(atan(0.5 * (exp(n) - exp(-n))))); return m.toMercator(); }