@@ -36,7 +36,7 @@ void OpenStreetMap::PNGDraw(PNGDRAW *pDraw)
36
36
currentInstance->png .getLineAsRGB565 (pDraw, destRow, PNG_RGB565_BIG_ENDIAN, 0x0000 );
37
37
}
38
38
39
- void OpenStreetMap::computeRequiredTiles (double longitude, double latitude, uint8_t zoom, std::vector<std::pair< uint32_t , uint32_t >> &requiredTiles)
39
+ void OpenStreetMap::computeRequiredTiles (double longitude, double latitude, uint8_t zoom, tileVector &requiredTiles)
40
40
{
41
41
// Compute exact tile coordinates
42
42
const double exactTileX = lon2tile (longitude, zoom);
@@ -106,7 +106,7 @@ bool OpenStreetMap::isTileCached(uint32_t x, uint32_t y, uint8_t z)
106
106
return false ;
107
107
}
108
108
109
- CachedTile *OpenStreetMap::findUnusedTile (const std::vector<std::pair< uint32_t , uint32_t >> &requiredTiles, uint8_t zoom)
109
+ CachedTile *OpenStreetMap::findUnusedTile (const tileVector &requiredTiles, uint8_t zoom)
110
110
{
111
111
for (auto &tile : tilesCache)
112
112
{
@@ -161,6 +161,23 @@ bool OpenStreetMap::resizeTilesCache(uint8_t cacheSize)
161
161
return true ;
162
162
}
163
163
164
+ void OpenStreetMap::updateCache (tileVector &requiredTiles, uint8_t zoom)
165
+ {
166
+ for (const auto &[x, y] : requiredTiles)
167
+ {
168
+ if (!isTileCached (x, y, zoom))
169
+ {
170
+ CachedTile *tileToReplace = findUnusedTile (requiredTiles, zoom);
171
+ String result;
172
+ const bool success = downloadAndDecodeTile (*tileToReplace, x, y, zoom, result);
173
+ if (!success)
174
+ log_e (" %s" , result.c_str ());
175
+
176
+ log_i (" %s" , result.c_str ());
177
+ }
178
+ }
179
+ }
180
+
164
181
bool OpenStreetMap::fetchMap (LGFX_Sprite &mapSprite, double longitude, double latitude, uint8_t zoom)
165
182
{
166
183
if (!zoom || zoom > 18 )
@@ -185,7 +202,7 @@ bool OpenStreetMap::fetchMap(LGFX_Sprite &mapSprite, double longitude, double la
185
202
longitude = fmod (longitude + 180.0 , 360.0 ) - 180.0 ;
186
203
latitude = std::clamp (latitude, -90.0 , 90.0 );
187
204
188
- std::vector<std::pair< uint32_t , uint32_t >> requiredTiles;
205
+ tileVector requiredTiles;
189
206
computeRequiredTiles (longitude, latitude, zoom, requiredTiles);
190
207
191
208
if (tilesCache.capacity () < requiredTiles.size ())
0 commit comments