10QGeoFileTileCacheMapbox::QGeoFileTileCacheMapbox(
const QList<QGeoMapType> &mapTypes,
11 int scaleFactor,
const QString &directory,
13 :QGeoFileTileCache(directory, parent), m_mapTypes(mapTypes)
15 m_scaleFactor = qBound(1, scaleFactor, 2);
16 for (qsizetype i = 0; i < mapTypes.size(); i++)
17 m_mapNameToId.insert(mapTypes[i].name(), i + 1);
25QString QGeoFileTileCacheMapbox::tileSpecToFilename(
const QGeoTileSpec &spec,
const QString &format,
26 const QString &directory)
const
28 QString filename = spec.plugin();
29 filename += QLatin1String(
"-");
30 filename += m_mapTypes[spec.mapId()-1].name();
31 filename += QLatin1String(
"-");
32 filename += QString::number(spec.zoom());
33 filename += QLatin1String(
"-");
34 filename += QString::number(spec.x());
35 filename += QLatin1String(
"-");
36 filename += QString::number(spec.y());
39 if (spec.version() != -1) {
40 filename += QLatin1String(
"-");
41 filename += QString::number(spec.version());
44 filename += QLatin1String(
"-@");
45 filename += QString::number(m_scaleFactor);
46 filename += QLatin1Char(
'x');
48 filename += QLatin1String(
".");
51 QDir dir = QDir(directory);
53 return dir.filePath(filename);
56QGeoTileSpec QGeoFileTileCacheMapbox::filenameToTileSpec(
const QString &filename)
const
58 QStringList parts = filename.split(
'.');
60 if (parts.length() != 3)
61 return QGeoTileSpec();
63 const QString name = parts.at(0) + QChar(
'.') + parts.at(1);
64 const QStringList fields = name.split(
'-');
66 const qsizetype length = fields.length();
67 if (length != 6 && length != 7)
68 return QGeoTileSpec();
69 const qsizetype scaleIdx = fields.last().indexOf(
"@");
70 if (scaleIdx < 0 || fields.last().size() <= (scaleIdx + 2))
71 return QGeoTileSpec();
72 const int scaleFactor = fields.last()[scaleIdx + 1].digitValue();
73 if (scaleFactor != m_scaleFactor)
74 return QGeoTileSpec();
79 for (qsizetype i = 2; i < length - 1; ++i) {
81 int value = fields.at(i).toInt(&ok);
83 return QGeoTileSpec();
84 numbers.append(value);
88 if (numbers.length() < 4)
91 return QGeoTileSpec(fields.at(0),
92 m_mapNameToId[fields.at(1)],