nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit 6f636b07a73604e01ecd2b3a4fc54add96e6acb0
parent 8d8da7972b1cd7710c8a89a12ba593e6cdeb116b
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Tue, 27 Dec 2022 00:35:17 +0100

[wikimapia] Fix loading more detailed tiles

Wikimapia tiles sometimes are mistakenly marked as having no tiles on
more detailed levels. If such tile was found in cache, it was displayed
for all more detailed zoom levels.
Now instead we check if tile coordinates are same as were requested and
if they differ, we mark that tile does not have more detailed tiles
and update it in cache.

Diffstat:
Msrc/lib/leaflet.layer.wikimapia/wikimapia-loader.js | 4++--
Msrc/lib/leaflet.layer.wikimapia/wm-utils.js | 12++++++++++--
2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/lib/leaflet.layer.wikimapia/wikimapia-loader.js b/src/lib/leaflet.layer.wikimapia/wikimapia-loader.js @@ -63,8 +63,8 @@ class WikimapiaLoader extends TiledDataLoader { }; } - processResponse(xhr) { - return wmUtils.parseTile(xhr.response, this._projectObj) + processResponse(xhr, requestedCoords) { + return wmUtils.parseTile(xhr.response, this._projectObj, requestedCoords) .then((tileData) => ({ tileData, coords: tileData.coords diff --git a/src/lib/leaflet.layer.wikimapia/wm-utils.js b/src/lib/leaflet.layer.wikimapia/wm-utils.js @@ -61,6 +61,14 @@ function decodeTitles(s) { return titles; } +function tileCoordsEqual(tile1, tile2) { + return ( + tile1.x === tile2.x && + tile1.y === tile2.y && + tile1.z === tile2.z + ); +} + function chooseTitle(titles) { var popularLanguages = ['1', '0', '3', '2', '5', '4', '9', '28', '17', '27']; for (let langCode of popularLanguages) { @@ -146,7 +154,7 @@ function simplifyPolygon(latlngs, tileCoords, tileHasChildren, projectObj) { return latlngs; } -async function parseTile(s, projectObj) { +async function parseTile(s, projectObj, requestedCoords) { const tile = {}; const places = tile.places = []; const lines = s.split('\n'); @@ -160,7 +168,7 @@ async function parseTile(s, projectObj) { } tile.tileId = tileId; tile.coords = tileIdToCoords(tileId); - tile.hasChildren = fields[1] === '1'; + tile.hasChildren = tileCoordsEqual(requestedCoords, tile.coords); // FIXME: ignore some errors let prevTime = Date.now();