initial refactor offlineTilesEnabler & OfflineTilesEnablerLayer

This commit is contained in:
Andy Gup 2014-09-03 13:44:10 -06:00
parent 0e1d793976
commit 08e189d763
5 changed files with 49 additions and 22 deletions

View File

@ -7,8 +7,9 @@ define([
"esri/geometry/Extent", "esri/geometry/Extent",
"esri/layers/TileInfo", "esri/layers/TileInfo",
"esri/SpatialReference", "esri/SpatialReference",
"esri/geometry/Polygon",
"esri/layers/TiledMapServiceLayer" "esri/layers/TiledMapServiceLayer"
], function(query, request, declare,LOD,Point,Extent,TileInfo,SpatialReference,TiledMapServerLayer) ], function(query, request, declare,LOD,Point,Extent,TileInfo,SpatialReference,Polygon,TiledMapServerLayer)
{ {
"use strict"; "use strict";
return declare("esri.OfflineTileEnablerLayer",[TiledMapServerLayer],{ return declare("esri.OfflineTileEnablerLayer",[TiledMapServerLayer],{
@ -27,7 +28,7 @@ define([
callback(false); callback(false);
} }
this._tilesCore = new TilesCore(); this._tilesCore = new O.esri.Tiles.TilesCore();
//For calculating minZoom and maxZoom //For calculating minZoom and maxZoom
Array.prototype.sortNumber = function(){return this.sort(function(a,b){return a - b})}; Array.prototype.sortNumber = function(){return this.sort(function(a,b){return a - b})};
@ -49,7 +50,7 @@ define([
this.offline = { this.offline = {
online: isOnline, online: isOnline,
store: new TilesStore(), store: new O.esri.Tiles.TilesStore(),
proxyPath: "../lib/resource-proxy/proxy.php" proxyPath: "../lib/resource-proxy/proxy.php"
}; };
@ -73,7 +74,7 @@ define([
alert("There was a problem retrieving tiled map info in OfflineTilesEnablerLayer."); alert("There was a problem retrieving tiled map info in OfflineTilesEnablerLayer.");
} }
this._tilesCore._parseGetTileInfo(result,function(tileResult){ this._tilesCore._parseGetTileInfo(SpatialReference,LOD,Extent,TileInfo,Point,result,function(tileResult){
this.layerInfos = tileResult.resultObj.layers; this.layerInfos = tileResult.resultObj.layers;
this.minScale = tileResult.resultObj.minScale; this.minScale = tileResult.resultObj.minScale;
this.maxScale = tileResult.resultObj.maxScale; this.maxScale = tileResult.resultObj.maxScale;
@ -128,7 +129,7 @@ define([
/* temporary URL returned immediately, as we haven't retrieved the image from the indexeddb yet */ /* temporary URL returned immediately, as we haven't retrieved the image from the indexeddb yet */
var tileid = "void:/"+level+"/"+row+"/"+col; var tileid = "void:/"+level+"/"+row+"/"+col;
var img = null; var img = null;
this._tilesCore._getTiles(img,this._imageType,url,tileid,this.offline.store); this._tilesCore._getTiles(img,this._imageType,url,tileid,this.offline.store,query);
return tileid; return tileid;
}, },
@ -156,7 +157,7 @@ define([
*/ */
getLevelEstimation: function(extent, level, tileSize) getLevelEstimation: function(extent, level, tileSize)
{ {
var tilingScheme = new TilingScheme(this); var tilingScheme = new O.esri.Tiles.TilingScheme(this);
var cellIds = tilingScheme.getAllCellIdsInExtent(extent,level); var cellIds = tilingScheme.getAllCellIdsInExtent(extent,level);
var levelEstimation = { var levelEstimation = {
@ -303,7 +304,7 @@ define([
*/ */
getTilePolygons : function(callback) // callback(Polygon polygon) or callback(null, error) getTilePolygons : function(callback) // callback(Polygon polygon) or callback(null, error)
{ {
this._tilesCore._getTilePolygons(this.offline.store,this.url,this,callback); this._tilesCore._getTilePolygons(Polygon,this.offline.store,this.url,this,callback);
}, },
/** /**
@ -336,7 +337,7 @@ define([
*/ */
estimateTileSize : function(callback) estimateTileSize : function(callback)
{ {
this._tilesCore._estimateTileSize(this._lastTileUrl,this.offline.proxyPath,callback); this._tilesCore._estimateTileSize(request,this._lastTileUrl,this.offline.proxyPath,callback);
}, },
/** /**
@ -356,7 +357,7 @@ define([
* @returns Array * @returns Array
*/ */
getTileUrlsByExtent : function(extent,level){ getTileUrlsByExtent : function(extent,level){
var tilingScheme = new TilingScheme(this); var tilingScheme = new O.esri.Tiles.TilingScheme(this);
var level_cell_ids = tilingScheme.getAllCellIdsInExtent(extent,level); var level_cell_ids = tilingScheme.getAllCellIdsInExtent(extent,level);
var cells = []; var cells = [];

View File

@ -299,11 +299,13 @@ O.esri.Tiles.TilesCore = function(){
/** /**
* Gets all the important bits out of the map services description page * Gets all the important bits out of the map services description page
* @param SpatialReference "esri/SpatialReference"
* @param LOD "esri/layers/LOD"
* @param data The http response via f=pjson * @param data The http response via f=pjson
* @param callback callback({initExtent,fullExtent,tileInfo,resultObj}); * @param callback callback({initExtent,fullExtent,tileInfo,resultObj});
* @private * @private
*/ */
this._parseGetTileInfo = function(data,callback){ this._parseGetTileInfo = function(SpatialReference,LOD,Extent,TileInfo,Point,data,callback){
var fixedResponse = data.replace(/\\'/g, "'"); var fixedResponse = data.replace(/\\'/g, "'");
var resultObj = JSON.parse(fixedResponse); var resultObj = JSON.parse(fixedResponse);

View File

@ -1,8 +1,9 @@
define([ define([
"dojo/query", "dojo/query",
"dojo/request", "dojo/request",
"esri/geometry/Polygon",
"dojo/_base/declare" "dojo/_base/declare"
], function(query, request, declare) ], function(query, request, Polygon,declare)
{ {
"use strict"; "use strict";
return declare("esri.OfflineTilesEnabler",[],{ return declare("esri.OfflineTilesEnabler",[],{

View File

@ -34,18 +34,25 @@
"esri/dijit/Scalebar", "esri/arcgis/utils", "esri/geometry", "esri/dijit/Scalebar", "esri/arcgis/utils", "esri/geometry",
"dojo/dom", "dojo/on", "dojo/query", "dojo/dom", "dojo/on", "dojo/query",
"esri/urlUtils", "esri/geometry/webMercatorUtils", "esri/urlUtils", "esri/geometry/webMercatorUtils",
"tiles/OfflineTilesEnablerLayer", "esri/layers/LOD",
"tiles/TilesCore", "esri/geometry/Point",
"esri/geometry/Extent",
"esri/layers/TileInfo",
"esri/SpatialReference",
"esri/geometry/Polygon",
"../dist/offline-editor-tiles-advanced-src.js",
"dojo/dom-construct", "dojo/domReady!"], "dojo/dom-construct", "dojo/domReady!"],
function(Map, function(Map,
GraphicsLayer, Graphic, SimpleFillSymbol, GraphicsLayer, Graphic, SimpleFillSymbol,
Scalebar, esriUtils, geometry, Scalebar, esriUtils, geometry,
dom, on, query, dom, on, query,
urlUtils, webMercatorUtils, urlUtils, webMercatorUtils,
OfflineTilesEnablerLayer,TilesCore, LOD,Point,Extent,TileInfo,SpatialReference,Polygon,
OfflineTilesEnablerLayer,
domConstruct) domConstruct)
{ {
g_basemapLayer = new OfflineTilesEnablerLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(evt){
g_basemapLayer = new esri.OfflineTileEnablerLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(evt){
console.log("Tile Layer Loaded."); console.log("Tile Layer Loaded.");
},true); },true);
@ -59,13 +66,13 @@
g_map.addLayer(g_basemapLayer); g_map.addLayer(g_basemapLayer);
tilesCore = new TilesCore(); tilesCore = new O.esri.Tiles.TilesCore();
function test() function test()
{ {
var jasmineEnv = jasmine.getEnv(); var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000; jasmineEnv.updateInterval = 1000;
jasmineEnv.defaultTimeoutInterval = 20000; // 20 sec jasmineEnv.defaultTimeoutInterval = 5000; // 20 sec
var htmlReporter = new jasmine.HtmlReporter(); var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter); jasmineEnv.addReporter(htmlReporter);

View File

@ -226,20 +226,36 @@ describe("offline enabler custom layer library", function()
}) })
}); });
it("verifies ability to retrieve layer info",function(done){ async.it("verifies ability to retrieve layer info",function(done){
g_basemapLayer._getTileInfoPrivate("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(result){ g_basemapLayer._getTileInfoPrivate("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(result){
var fixedResponse = result.replace(/\\'/g, "'"); var fixedResponse = result.replace(/\\'/g, "'");
var resultObj = JSON.parse(fixedResponse); var resultObj = JSON.parse(fixedResponse);
expect(resultObj).toEqual(jasmine.any(Object)); expect(resultObj).toEqual(jasmine.any(Object));
done();
}) })
}); });
it("verifies ability to parse layer info",function(done){ async.it("verifies ability to parse layer info",function(done){
g_basemapLayer._getTileInfoPrivate("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(result){ require(["esri/layers/LOD",
tilesCore._parseGetTileInfo(result,function(result){ "esri/geometry/Point",
expect(result).toEqual(jasmine.any(Object)); "esri/geometry/Extent",
"esri/layers/TileInfo",
"esri/SpatialReference",
"esri/geometry/Polygon"],function(LOD,Point,Extent,TileInfo,SpatialReference){
g_basemapLayer._getTileInfoPrivate("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(result){
tilesCore._parseGetTileInfo(SpatialReference,LOD,Extent,TileInfo,Point,result,function(result){
expect(result.resultObj).toEqual(jasmine.any(Object));
expect(result.initExtent.type).toEqual("extent");
expect(result.fullExtent.type).toEqual("extent");
expect(result.tileInfo.format).toEqual("JPEG");
done();
})
}) })
}) })
}); });
async.it("get all tile polygons within extent",function(done){ async.it("get all tile polygons within extent",function(done){