6#include <QtCore/QLocale>
8#include <QtLocation/private/qgeomaptype_p.h>
15static_assert(static_cast<
int>(
MapProvider::NoMap) == static_cast<
int>(QGeoMapType::NoMap));
16static_assert(static_cast<
int>(
MapProvider::StreetMap) == static_cast<
int>(QGeoMapType::StreetMap));
17static_assert(static_cast<
int>(
MapProvider::SatelliteMapDay) == static_cast<
int>(QGeoMapType::SatelliteMapDay));
18static_assert(static_cast<
int>(
MapProvider::SatelliteMapNight)== static_cast<
int>(QGeoMapType::SatelliteMapNight));
19static_assert(static_cast<
int>(
MapProvider::TerrainMap) == static_cast<
int>(QGeoMapType::TerrainMap));
20static_assert(static_cast<
int>(
MapProvider::HybridMap) == static_cast<
int>(QGeoMapType::HybridMap));
21static_assert(static_cast<
int>(
MapProvider::TransitMap) == static_cast<
int>(QGeoMapType::TransitMap));
22static_assert(static_cast<
int>(
MapProvider::GrayStreetMap) == static_cast<
int>(QGeoMapType::GrayStreetMap));
23static_assert(static_cast<
int>(
MapProvider::PedestrianMap) == static_cast<
int>(QGeoMapType::PedestrianMap));
24static_assert(static_cast<
int>(
MapProvider::CarNavigationMap) == static_cast<
int>(QGeoMapType::CarNavigationMap));
25static_assert(static_cast<
int>(
MapProvider::CycleMap) == static_cast<
int>(QGeoMapType::CycleMap));
26static_assert(static_cast<
int>(
MapProvider::CustomMap) == static_cast<
int>(QGeoMapType::CustomMap));
32 const QString &mapName,
33 const QString &referrer,
34 const QString &imageFormat,
39 , _imageFormat(imageFormat)
40 , _averageSize(averageSize)
42 , _language(!QLocale::system().uiLanguages().isEmpty() ? QLocale::system().uiLanguages().constFirst() : "en")
43 , _mapId(_mapIdIndex++)
55 return QUrl(
_getURL(x, y, zoom));
60 if (image.size() < 3) {
64 static constexpr QByteArrayView pngSignature(
"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A");
65 if (image.startsWith(pngSignature)) {
66 return QStringLiteral(
"png");
69 static constexpr QByteArrayView jpegSignature(
"\xFF\xD8\xFF");
70 if (image.startsWith(jpegSignature)) {
71 return QStringLiteral(
"jpg");
74 static constexpr QByteArrayView gifSignature(
"\x47\x49\x46\x38");
75 if (image.startsWith(gifSignature)) {
76 return QStringLiteral(
"gif");
85 for (
int i = levelOfDetail; i > 0; i--) {
87 const int mask = 1 << (i - 1);
89 if ((tileX & mask) != 0) {
92 if ((tileY & mask) != 0) {
96 (void) quadKey.append(digit);
104 return (x + 2 * y) % max;
109 return static_cast<int>(floor((lon + 180.0) / 360.0 * pow(2.0, z)));
114 return static_cast<int>(floor((1.0 - log(tan(lat * M_PI / 180.0) + 1.0 / cos(lat * M_PI / 180.0)) / M_PI) / 2.0 * pow(2.0, z)));
119 return x / std::pow(2.0, z) * 360.0 - 180.0;
124 const double n = M_PI - 2.0 * M_PI * y / std::pow(2.0, z);
125 return qRadiansToDegrees(std::atan(std::sinh(n)));
129 double topleftLat,
double bottomRightLon,
130 double bottomRightLat)
const
139 static_cast<quint64
>(set.
tileX0) + 1) *
140 (
static_cast<quint64
>(set.
tileY1) -
141 static_cast<quint64
>(set.
tileY0) + 1);
#define QGC_LOGGING_CATEGORY(name, categoryStr)
int _getServerNum(int x, int y, int max) const
QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail) const
const QString _imageFormat
virtual double tileY2lat(int y, int z) const
virtual QGCTileSet getTileCount(int zoom, double topleftLon, double topleftLat, double bottomRightLon, double bottomRightLat) const
quint32 getAverageSize() const
virtual int long2tileX(double lon, int z) const
QString getImageFormat(QByteArrayView image) const
virtual double tileX2long(int x, int z) const
QUrl getTileURL(int x, int y, int zoom) const
virtual int lat2tileY(double lat, int z) const
virtual QString _getURL(int x, int y, int zoom) const =0