Skip to content

Commit a0e5f69

Browse files
Use tileVector for std::vector<std::pair<uint32_t, uint32_t>>
1 parent 89cfad3 commit a0e5f69

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

src/OpenStreetMap-esp32.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ void OpenStreetMap::PNGDraw(PNGDRAW *pDraw)
3636
currentInstance->png.getLineAsRGB565(pDraw, destRow, PNG_RGB565_BIG_ENDIAN, 0x0000);
3737
}
3838

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)
4040
{
4141
// Compute exact tile coordinates
4242
const double exactTileX = lon2tile(longitude, zoom);
@@ -106,7 +106,7 @@ bool OpenStreetMap::isTileCached(uint32_t x, uint32_t y, uint8_t z)
106106
return false;
107107
}
108108

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)
110110
{
111111
for (auto &tile : tilesCache)
112112
{
@@ -161,6 +161,23 @@ bool OpenStreetMap::resizeTilesCache(uint8_t cacheSize)
161161
return true;
162162
}
163163

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+
164181
bool OpenStreetMap::fetchMap(LGFX_Sprite &mapSprite, double longitude, double latitude, uint8_t zoom)
165182
{
166183
if (!zoom || zoom > 18)
@@ -185,7 +202,7 @@ bool OpenStreetMap::fetchMap(LGFX_Sprite &mapSprite, double longitude, double la
185202
longitude = fmod(longitude + 180.0, 360.0) - 180.0;
186203
latitude = std::clamp(latitude, -90.0, 90.0);
187204

188-
std::vector<std::pair<uint32_t, uint32_t>> requiredTiles;
205+
tileVector requiredTiles;
189206
computeRequiredTiles(longitude, latitude, zoom, requiredTiles);
190207

191208
if (tilesCache.capacity() < requiredTiles.size())

src/OpenStreetMap-esp32.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
constexpr int16_t OSM_TILESIZE = 256;
1616

17+
using tileVector = std::vector<std::pair<uint32_t, uint32_t>>;
18+
1719
class OpenStreetMap
1820
{
1921
uint16_t mapWidth = 320;
@@ -42,6 +44,7 @@ class OpenStreetMap
4244

4345
void setResolution(uint16_t w, uint16_t h);
4446
bool resizeTilesCache(uint8_t cacheSize);
47+
void updateCache(tileVector &requiredTiles, uint8_t zoom);
4548
void freeTilesCache();
4649
bool fetchMap(LGFX_Sprite &sprite, double longitude, double latitude, uint8_t zoom);
4750
bool saveMap(const char *filename, LGFX_Sprite &display, String &result, uint8_t sdPin = SS);
@@ -51,8 +54,8 @@ class OpenStreetMap
5154
static void PNGDraw(PNGDRAW *pDraw);
5255
double lon2tile(double lon, uint8_t zoom);
5356
double lat2tile(double lat, uint8_t zoom);
54-
void computeRequiredTiles(double longitude, double latitude, uint8_t zoom, std::vector<std::pair<uint32_t, uint32_t>> &requiredTiles);
55-
CachedTile *findUnusedTile(const std::vector<std::pair<uint32_t, uint32_t>> &requiredTiles, uint8_t zoom);
57+
void computeRequiredTiles(double longitude, double latitude, uint8_t zoom, tileVector &requiredTiles);
58+
CachedTile *findUnusedTile(const tileVector &requiredTiles, uint8_t zoom);
5659
bool isTileCached(uint32_t x, uint32_t y, uint8_t z);
5760
bool downloadAndDecodeTile(CachedTile &tile, uint32_t x, uint32_t y, uint8_t zoom, String &result);
5861
};

0 commit comments

Comments
 (0)