add tweaks of data retrieval zoom level, to make better use of the cache and be friendlier to the API in some cases

also, default-intel-detail and show-more-portals plugins fixed - the logic has been moved into IITC core, with the plugins just setting flags to change behaviour
This commit is contained in:
Jon Atkins 2014-02-22 19:30:12 +00:00
parent 8ce28334cc
commit 333c1a6daf
5 changed files with 96 additions and 47 deletions

77
code/map_data_calc_tools.js Normal file → Executable file
View File

@ -26,6 +26,83 @@ window.getMapZoomTileParameters = function(zoom) {
}
window.getDataZoomForMapZoom = function(zoom) {
// we can fetch data at a zoom level different to the map zoom.
//NOTE: the specifics of this are tightly coupled with the above ZOOM_TO_LEVEL and ZOOM_TO_TILES_PER_EDGE arrays
// firstly, some of IITCs zoom levels, depending on base map layer, can be higher than stock. limit zoom level
if (zoom > 18) {
zoom = 18;
}
if (!window.CONFIG_ZOOM_DEFAULT_DETAIL_LEVEL) {
// some reasonable optimisations of data retreival
switch(zoom) {
case 2:
case 3:
// L8 portals - fall back to the furthest out view. less detail, faster retreival. cache advantages when zooming
// (note: iitc + stock both limited so zoom 0 never possible)
zoom = 1;
break;
case 4:
// default is L7 - but this is a crazy number of tiles. fall back to L8 (but higher detail than above)
// (the back-end does, unfortunately, rarely (never?) returns large fields with L8-only portals
zoom = 3;
break;
case 5:
case 6:
// default L7 - pull out to furthest L7 zoom
zoom = 4;
break;
case 8:
// default L6 - pull back to highest L6 zoom
zoom = 7;
break;
// L5 portals - only one zoom level
case 11:
// default L4 - pull back to lower detail L4
zoom = 10;
break;
// L3 portals - only one zoom level
case 14:
// L2 portals - pull back to furthest
zoom = 13;
break;
case 16:
// L1 portals - pull back to furthest zoom
zoom = 15;
break;
default:
if (zoom >= 18) {
// all portals - pull back to furthest zoom
zoom = 17;
}
break;
}
}
if (window.CONFIG_ZOOM_SHOW_MORE_PORTALS) {
if (zoom >= 15) {
//L1+ and closer zooms. the 'all portals' zoom uses the same tile size, so it's no harm to request things at that zoom level
zoom = 17;
}
}
return zoom;
}
window.lngToTile = function(lng, params) {
return Math.floor((lng + 180) / 360 * params.tilesPerEdge);
}

View File

@ -179,9 +179,12 @@ window.MapDataRequest.prototype.refresh = function() {
var bounds = clampLatLngBounds(map.getBounds());
var zoom = map.getZoom();
var mapZoom = map.getZoom();
var dataZoom = getDataZoomForMapZoom(mapZoom);
var tileParams = getMapZoomTileParameters(dataZoom);
var tileParams = getMapZoomTileParameters(zoom);
//DEBUG: resize the bounds so we only retrieve some data
//bounds = bounds.pad(-0.4);
@ -203,10 +206,10 @@ window.MapDataRequest.prototype.refresh = function() {
//setTimeout (function(){ map.removeLayer(debugrect2); }, 10*1000);
// store the parameters used for fetching the data. used to prevent unneeded refreshes after move/zoom
this.fetchedDataParams = { bounds: dataBounds, mapZoom: map.getZoom(), zoom: zoom };
this.fetchedDataParams = { bounds: dataBounds, mapZoom: mapZoom, dataZoom: dataZoom };
window.runHooks ('mapDataRefreshStart', {bounds: bounds, zoom: zoom, minPortalLevel: tileParams.level, tileBounds: dataBounds});
window.runHooks ('mapDataRefreshStart', {bounds: bounds, mapZoom: mapZoom, dataZoom: dataZoom, minPortalLevel: tileParams.level, tileBounds: dataBounds});
this.render.startRenderPass();
this.render.clearPortalsBelowLevel(tileParams.level);
@ -216,7 +219,7 @@ window.MapDataRequest.prototype.refresh = function() {
this.render.processGameEntities(artifact.getArtifactEntities());
console.log('requesting data tiles at zoom '+zoom+' (L'+tileParams.level+'+ portals, '+tileParams.tilesPerEdge+' tiles per global edge), map zoom is '+map.getZoom());
console.log('requesting data tiles at zoom '+dataZoom+' (L'+tileParams.level+'+ portals, '+tileParams.tilesPerEdge+' tiles per global edge), map zoom is '+mapZoom);
this.cachedTileCount = 0;
@ -228,7 +231,7 @@ window.MapDataRequest.prototype.refresh = function() {
var tilesToFetchDistance = {};
// map center point - for fetching center tiles first
var mapCenterPoint = map.project(map.getCenter(), zoom);
var mapCenterPoint = map.project(map.getCenter(), mapZoom);
// y goes from left to right
for (var y = y1; y <= y2; y++) {
@ -263,7 +266,7 @@ window.MapDataRequest.prototype.refresh = function() {
var lngCenter = (lngEast+lngWest)/2;
var tileLatLng = L.latLng(latCenter,lngCenter);
var tilePoint = map.project(tileLatLng, zoom);
var tilePoint = map.project(tileLatLng, mapZoom);
var delta = mapCenterPoint.subtract(tilePoint);
var distanceSquared = delta.x*delta.x + delta.y*delta.y;

View File

@ -282,6 +282,7 @@ window.androidPermalink = function() {
window.getMinPortalLevel = function() {
var z = map.getZoom();
z = getDataZoomForMapZoom(z);
return getMapZoomTileParameters(z).level;
}

View File

@ -2,7 +2,7 @@
// @id iitc-plugin-default-intel-detail@jonatkins
// @name IITC plugin: Default intel detail level
// @category Tweaks
// @version 0.1.1.@@DATETIMEVERSION@@
// @version 0.2.0.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@ -24,23 +24,9 @@ window.plugin.defaultIntelDetail = function() {};
window.plugin.defaultIntelDetail.setup = function() {
// var stockIntelDetail = nemesis.dashboard.zoomlevel.ZOOM_TO_LOD_;
//
// // save the original function - so we can chain to it for levels we don't modify
// var origGetMinPortalLevelForZoom = window.getMinPortalLevelForZoom;
//
// // replace the window.getMinPortalLevelForZoom function - modify behaviour when L1+ or L3+ portals are shown
//
// window.getMinPortalLevelForZoom = function(z) {
// // for the further out zoom levels, use the stock intel site detail levels
// if (z <= 11) {
// return stockIntelDetail[z];
// }
// // for the closer zoom levels, stock intel and IITC default is the same. falling back
// // in this case allows this plugin to work alongside show-more-portals
// return origGetMinPortalLevelForZoom(z);
// }
// NOTE: the logic required is closely tied to the IITC+stock map detail level code - so the logic is moved there now
// and just enabled by this flag
window.CONFIG_ZOOM_DEFAULT_DETAIL_LEVEL=true;
};

View File

@ -2,7 +2,7 @@
// @id iitc-plugin-show-more-portals@jonatkins
// @name IITC plugin: Show more portals
// @category Tweaks
// @version 0.1.7.@@DATETIMEVERSION@@
// @version 0.2.0.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@ -24,27 +24,9 @@ window.plugin.showMorePortals = function() {};
window.plugin.showMorePortals.setup = function() {
// // save the original function - so we can chain to it for levels we don't modify
// var origGetMinPortalLevelForZoom = window.getMinPortalLevelForZoom;
//
// // replace the window.getMinPortalLevelForZoom function - modify behaviour when L1+ or L3+ portals are shown
//
// window.getMinPortalLevelForZoom = function(z) {
// var level = origGetMinPortalLevelForZoom(z);
//
// // as of 2013-10-16...
//
// // the stock site uses the same tile size for both L1+ portals and all portals
// // therefore, changing the L1+ zoom levels into all portals zoom level is not unfriendly to the servers
// // and the same applies for L2+ and L3+ detail levels
// // (in some ways it's nicer, as IITC caches better)
//
// if (level == 1) level = 0;
// if (level == 3) level = 2;
//
// return level;
// }
// NOTE: the logic required is closely tied to the IITC+stock map detail level code - so the logic is moved there now
// and just enabled by this flag
window.CONFIG_ZOOM_SHOW_MORE_PORTALS=true;
};