Create a Layer class to access the ArcGIS 9.3 Map Export service. Patch by

Jeff Adams, from Avencia. r=me. Tested with the default service, and several
other example map services from ESRI (like
http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/export).

Note that I don't believe this takes advantage of map caches; if we create a
seperate layer for that, we should probably create a Layer.ArcGIS. namespace.

(Closes #1749)


git-svn-id: http://svn.openlayers.org/trunk/openlayers@8917 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2009-02-28 21:53:22 +00:00
parent 4d2d90ca51
commit dd393122aa
6 changed files with 672 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
OpenLayers contributors: OpenLayers contributors:
Jeff Adams
Seb Benthall Seb Benthall
Howard Butler Howard Butler
Bertil Chaupis Bertil Chaupis

View File

@@ -0,0 +1,64 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="style.css" type="text/css" />
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
var map;
var layer;
function init(){
var mapOptions = {
maxExtent: new OpenLayers.Bounds(-174,18.4,-63.5,71),
maxResolution: 0.25,
projection: "EPSG:4326"};
map = new OpenLayers.Map( 'map', mapOptions );
layer = new OpenLayers.Layer.ArcGIS93Rest( "ArcGIS Server Layer",
"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export",
{layers: "show:0,2"});
map.addLayer(layer);
map.addControl( new OpenLayers.Control.MousePosition() );
map.setCenter(new OpenLayers.LonLat(-115, 45), 0);
}
function enableFilter() {
layer.setLayerFilter(2, "STATE_NAME LIKE '%" + document.getElementById('filterValueField').value + "%'");
layer.redraw();
}
function disableFilter() {
layer.setLayerFilter(2, null);
layer.redraw();
}
function updateButton() {
document.getElementById('filterButton').value = "Show '" +
document.getElementById('filterValueField').value + "' States";
}
</script>
</head>
<body onload="init()">
<h1 id="title">ArcGIS Server 9.3 Rest API Example</h1>
<div id="tags">
</div>
<p id="shortdesc">
Shows the basic use of openlayers using an ArcGIS Server 9.3 Rest API layer
</p>
<div id="map" class="smallmap"></div>
<div id="docs">
This is an example of how to add an ArcGIS Server 9.3 Rest API layer to the OpenLayers window.
</div>
<input id="filterValueField" type="textfield" value="A"/>
<input id="filterButton" type="button" onclick="enableFilter();" value="Filter States"/>
<input type="button" onclick="disableFilter();" value="Show All States"/>
<br>
(Filter is case sensitive.)
</body>
</html>

View File

@@ -115,6 +115,7 @@
"OpenLayers/Layer/Markers.js", "OpenLayers/Layer/Markers.js",
"OpenLayers/Layer/Text.js", "OpenLayers/Layer/Text.js",
"OpenLayers/Layer/WorldWind.js", "OpenLayers/Layer/WorldWind.js",
"OpenLayers/Layer/ArcGIS93Rest.js",
"OpenLayers/Layer/WMS.js", "OpenLayers/Layer/WMS.js",
"OpenLayers/Layer/WMS/Untiled.js", "OpenLayers/Layer/WMS/Untiled.js",
"OpenLayers/Layer/GeoRSS.js", "OpenLayers/Layer/GeoRSS.js",

View File

@@ -0,0 +1,252 @@
/* Copyright (c) 2008 Avencia, Inc., published under the Clear BSD
* license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
* full text of the license. */
/**
* @requires OpenLayers/Layer/Grid.js
* @requires OpenLayers/Tile/Image.js
*/
/**
* Class: OpenLayers.Layer.ArcGIS93Rest
* Instances of OpenLayers.Layer.ArcGIS93Rest are used to display data from
* ESRI ArcGIS Server 9.3 (and up?) Mapping Services using the REST API.
* Create a new ArcGIS93Rest layer with the <OpenLayers.Layer.ArcGIS93Rest>
* constructor. More detail on the REST API is available at
* http://sampleserver1.arcgisonline.com/ArcGIS/SDK/REST/index.html ;
* specifically, the URL provided to this layer should be an export service
* URL: http://sampleserver1.arcgisonline.com/ArcGIS/SDK/REST/export.html
*
* Inherits from:
* - <OpenLayers.Layer.Grid>
*/
OpenLayers.Layer.ArcGIS93Rest = OpenLayers.Class(OpenLayers.Layer.Grid, {
/**
* Constant: DEFAULT_PARAMS
* {Object} Hashtable of default parameter key/value pairs
*/
DEFAULT_PARAMS: {
format: "png"
},
/**
* APIProperty: isBaseLayer
* {Boolean} Default is true for ArcGIS93Rest layer
*/
isBaseLayer: true,
/**
* Constructor: OpenLayers.Layer.ArcGIS93Rest
* Create a new ArcGIS93Rest layer object.
*
* Example:
* (code)
* var arcims = new OpenLayers.Layer.ArcGIS93Rest("MyName",
* "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer",
* {
* layers: "0,1,2"
* });
* (end)
*
* Parameters:
* name - {String} A name for the layer
* url - {String} Base url for the ArcGIS server REST service
* options - {Object} An object with key/value pairs representing the
* options and option values.
* Valid Options:
* format: {String} MIME type of desired image type.
* layers: {String} Comma-separated list of layers to display.
* srs: {String} Projection ID.
*/
initialize: function(name, url, params, options) {
var newArguments = [];
//uppercase params
params = OpenLayers.Util.upperCaseObject(params);
newArguments.push(name, url, params, options);
OpenLayers.Layer.Grid.prototype.initialize.apply(this, newArguments);
OpenLayers.Util.applyDefaults(
this.params,
OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
);
//layer is transparent
if (this.params.TRANSPARENT &&
this.params.TRANSPARENT.toString().toLowerCase() == "true") {
// unless explicitly set in options, make layer an overlay
if ( (options == null) || (!options.isBaseLayer) ) {
this.isBaseLayer = false;
}
// jpegs can never be transparent, so intelligently switch the
// format, depending on the browser's capabilities
if (this.params.FORMAT == "jpg") {
this.params.FORMAT = OpenLayers.Util.alphaHack() ? "gif"
: "png";
}
}
},
/**
* Method: destroy
* Destroy this layer
*/
destroy: function() {
// for now, nothing special to do here.
OpenLayers.Layer.Grid.prototype.destroy.apply(this, arguments);
},
/**
* Method: clone
* Create a clone of this layer
*
* Returns:
* {<OpenLayers.Layer.ArcGIS93Rest>} An exact clone of this layer
*/
clone: function (obj) {
if (obj == null) {
obj = new OpenLayers.Layer.ArcGIS93Rest(this.name,
this.url,
this.params,
this.options);
}
//get all additions from superclasses
obj = OpenLayers.Layer.Grid.prototype.clone.apply(this, [obj]);
// copy/set any non-init, non-simple values here
return obj;
},
/**
* Method: getURL
* Return an image url this layer.
*
* Parameters:
* bounds - {<OpenLayers.Bounds>} A bounds representing the bbox for the
* request.
*
* Returns:
* {String} A string with the map image's url.
*/
getURL: function (bounds) {
bounds = this.adjustBounds(bounds);
// ArcGIS Server only wants the numeric portion of the projection ID.
var projWords = this.projection.getCode().split(":");
var srid = projWords[projWords.length - 1];
var imageSize = this.getImageSize();
var newParams = {
'BBOX': bounds.toBBOX(),
'SIZE': imageSize.w + "," + imageSize.h,
// We always want image, the other options were json, image with a whole lotta html around it, etc.
'F': "image",
'BBOXSR': srid,
'IMAGESR': srid
};
// Now add the filter parameters.
if (this.layerDefs) {
var layerDefStrList = [];
var layerID;
for(layerID in this.layerDefs) {
if (this.layerDefs.hasOwnProperty(layerID)) {
if (this.layerDefs[layerID]) {
layerDefStrList.push(layerID);
layerDefStrList.push(":");
layerDefStrList.push(this.layerDefs[layerID]);
layerDefStrList.push(";");
}
}
}
if (layerDefStrList.length > 0) {
newParams['LAYERDEFS'] = layerDefStrList.join("");
}
}
var requestString = this.getFullRequestString(newParams);
return requestString;
},
/**
* Method: setLayerFilter
* addTile creates a tile, initializes it, and adds it to the layer div.
*
* Parameters:
* id - {String} The id of the layer to which the filter applies.
* queryDef - {String} A sql-ish query filter, for more detail see the ESRI
* documentation at http://sampleserver1.arcgisonline.com/ArcGIS/SDK/REST/export.html
*/
setLayerFilter: function ( id, queryDef ) {
if (!this.layerDefs) {
this.layerDefs = {};
}
if (queryDef) {
this.layerDefs[id] = queryDef;
} else {
delete this.layerDefs[id];
}
},
/**
* Method: clearLayerFilter
* Clears layer filters, either from a specific layer,
* or all of them.
*
* Parameters:
* id - {String} The id of the layer from which to remove any
* filter. If unspecified/blank, all filters
* will be removed.
*/
clearLayerFilter: function ( id ) {
if (id) {
delete this.layerDefs[id];
} else {
delete this.layerDefs;
}
},
/**
* APIMethod: mergeNewParams
* Catch changeParams and uppercase the new params to be merged in
* before calling changeParams on the super class.
*
* Once params have been changed, the tiles will be reloaded with
* the new parameters.
*
* Parameters:
* newParams - {Object} Hashtable of new params to use
*/
mergeNewParams:function(newParams) {
var upperParams = OpenLayers.Util.upperCaseObject(newParams);
var newArguments = [upperParams];
return OpenLayers.Layer.Grid.prototype.mergeNewParams.apply(this,
newArguments);
},
/**
* Method: addTile
* addTile creates a tile, initializes it, and adds it to the layer div.
*
* Parameters:
* bounds - {<OpenLayers.Bounds>}
* position - {<OpenLayers.Pixel>}
*
* Returns:
* {<OpenLayers.Tile.Image>} The added OpenLayers.Tile.Image
*/
addTile:function(bounds,position) {
return new OpenLayers.Tile.Image(this, position, bounds,
null, this.tileSize);
},
CLASS_NAME: "OpenLayers.Layer.ArcGIS93Rest"
});

View File

@@ -0,0 +1,353 @@
<html>
<head>
<script type="text/javascript">var oldAlert = window.alert, gMess; window.alert = function(message) {gMess = message; return true;};</script>
<script type="text/javascript">window.alert = oldAlert;</script>
<script src="../../lib/OpenLayers.js"></script>
<script type="text/javascript">
var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
var layer;
var name = 'Test Layer';
var url = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export";
var params = {layers: "show:0,2"};
function test_Layer_AGS93_constructor (t) {
t.plan( 14 );
var trans_format = "png";
if (OpenLayers.Util.alphaHack()) { trans_format = "gif"; }
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.ok( layer instanceof OpenLayers.Layer.ArcGIS93Rest, "new OpenLayers.Layer.ArcGIS93Rest returns object" );
t.eq( layer.url, url, "layer.url is correct (HTTPRequest inited)" );
t.eq( layer.params.LAYERS, "show:0,2", "params passed in correctly uppercased" );
t.eq( layer.params.FORMAT, "png", "default params correclty uppercased and copied");
t.eq(layer.isBaseLayer, true, "no transparency setting, wms is baselayer");
params.format = 'jpg';
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq( layer.params.FORMAT, "jpg", "default params correclty uppercased and overridden");
params.TRANSPARENT = "true";
var layer2 = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq(layer2.isBaseLayer, false, "transparency == 'true', wms is not baselayer");
params.TRANSPARENT = "TRUE";
var layer3 = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq(layer3.isBaseLayer, false, "transparency == 'TRUE', wms is not baselayer");
t.eq(layer3.params.FORMAT, trans_format, "transparent = TRUE causes non-image/jpeg format");
params.TRANSPARENT = "TRuE";
var layer4 = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq(layer4.isBaseLayer, false, "transparency == 'TRuE', wms is not baselayer");
t.eq(layer4.params.FORMAT, trans_format, "transparent = TRuE causes non-image/jpeg format");
params.TRANSPARENT = true;
var layer5 = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq(layer5.isBaseLayer, false, "transparency == true, wms is not baselayer");
t.eq(layer5.params.FORMAT, trans_format, "transparent = true causes non-image/jpeg format");
params.TRANSPARENT = false;
var layer6 = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.eq(layer6.isBaseLayer, true, "transparency == false, wms is baselayer");
}
function test_Layer_AGS93_addtile (t) {
t.plan( 6 );
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
var map = new OpenLayers.Map('map');
map.addLayer(layer);
var pixel = new OpenLayers.Pixel(5,6);
var tile = layer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
tile.draw();
var img = tile.imgDiv;
var tParams = OpenLayers.Util.extend({},
OpenLayers.Util.upperCaseObject(params));
tParams = OpenLayers.Util.extend(tParams, {
FORMAT: "png", BBOX: "1,2,3,4", SIZE: "256,256", F: "image", BBOXSR: "4326", IMAGESR: "4326"
});
t.eq( img.src,
url + "?" + OpenLayers.Util.getParameterString(tParams),
"image src is created correctly via addtile" );
t.eq( tile.frame.style.top, "6px", "image top is set correctly via addtile" );
t.eq( tile.frame.style.left, "5px", "image top is set correctly via addtile" );
var firstChild = layer.div.firstChild.firstChild;
if (!isMozilla)
t.ok( true, "skipping element test outside of Mozilla");
else
t.ok( firstChild instanceof HTMLElement, "div first child is an image object" );
t.eq( firstChild.src,
url + "?" + OpenLayers.Util.getParameterString(tParams),
"div first child is correct image object" );
t.eq( tile.position.toString(), "x=5,y=6", "Position of tile is set correctly." );
map.destroy();
}
function test_Layer_AGS93_inittiles (t) {
t.plan( 2 );
var map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0),5);
t.eq( layer.grid.length, 7, "Grid rows is correct." );
t.eq( layer.grid[0].length, 6, "Grid cols is correct." );
map.destroy();
}
function test_Layer_AGS93_clone (t) {
t.plan(4);
var options = {tileSize: new OpenLayers.Size(500,50)};
var map = new OpenLayers.Map('map', options);
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
map.addLayer(layer);
layer.grid = [ [6, 7],
[8, 9]];
var clone = layer.clone();
t.ok( clone.grid != layer.grid, "clone does not copy grid");
t.ok( clone.tileSize.equals(layer.tileSize), "tileSize correctly cloned");
layer.tileSize.w += 40;
t.eq( clone.tileSize.w, 500, "changing layer.tileSize does not change clone.tileSize -- a fresh copy was made, not just copied reference");
t.eq( clone.alpha, layer.alpha, "alpha copied correctly");
layer.grid = null;
map.destroy();
}
function test_Layer_AGS93_isBaseLayer(t) {
t.plan(3);
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
t.ok( layer.isBaseLayer, "baselayer is true by default");
var newParams = OpenLayers.Util.extend({}, params);
newParams.transparent = "true";
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, newParams);
t.ok( !layer.isBaseLayer, "baselayer is false when transparent is set to true");
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params, {isBaseLayer: false});
t.ok( !layer.isBaseLayer, "baselayer is false when option is set to false" );
}
function test_Layer_AGS93_mergeNewParams (t) {
t.plan( 4 );
var map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
var newParams = { layers: 'sooper',
chickpeas: 'png'};
map.addLayer(layer);
map.zoomToMaxExtent();
layer.redraw = function() {
t.ok(true, "layer is redrawn after new params merged");
}
layer.mergeNewParams(newParams);
t.eq( layer.params.LAYERS, "sooper", "mergeNewParams() overwrites well");
t.eq( layer.params.CHICKPEAS, "png", "mergeNewParams() adds well");
newParams.CHICKPEAS = 151;
t.eq( layer.params.CHICKPEAS, "png", "mergeNewParams() makes clean copy of hashtable");
map.destroy();
}
function test_Layer_AGS93_getFullRequestString (t) {
t.plan( 1 );
var map = new OpenLayers.Map('map');
map.projection = "xx";
tParams = { layers: 'show:0,2',
format: 'png'};
var tLayer = new OpenLayers.Layer.ArcGIS93Rest(name, url, tParams);
map.addLayer(tLayer);
str = tLayer.getFullRequestString();
var tParams = {
LAYERS: "show:0,2", FORMAT: "png"
};
t.eq(str,
url + "?" + OpenLayers.Util.getParameterString(tParams),
"getFullRequestString() adds SRS value");
map.destroy();
}
function test_Layer_AGS93_setOpacity (t) {
t.plan( 5 );
var map = new OpenLayers.Map('map');
map.projection = "xx";
tParams = { layers: 'show:0,2',
format: 'png'};
tOptions = { 'opacity': '0.5' };
var tLayer = new OpenLayers.Layer.ArcGIS93Rest(name, url, tParams, tOptions);
map.addLayer(tLayer);
map.zoomToMaxExtent();
t.eq(tLayer.opacity, "0.5", "Opacity is set correctly");
t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.5, "Opacity on tile is correct");
tLayer.setOpacity("0.6");
t.eq(tLayer.opacity, "0.6", "setOpacity works properly");
t.eq(parseFloat(tLayer.div.firstChild.firstChild.style.opacity), 0.6, "Opacity on tile is changed correctly");
var pixel = new OpenLayers.Pixel(5,6);
var tile = tLayer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
tile.draw();
t.eq(parseFloat(tile.imgDiv.style.opacity), 0.6, "Tile opacity is set correctly");
map.destroy();
}
function test_Layer_AGS93_noGutters (t) {
t.plan(2);
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.ArcGIS93Rest("no gutter layer", url, params, {gutter: 0});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
var tile = layer.grid[0][0];
var request = layer.getURL(tile.bounds);
var args = OpenLayers.Util.getParameters(request);
t.eq(parseInt(args['SIZE'].split(",")[0]),
tile.size.w,
"layer without gutter requests images that are as wide as the tile");
t.eq(parseInt(args['SIZE'].split(",")[1]),
tile.size.h,
"layer without gutter requests images that are as tall as the tile");
layer.destroy();
map.destroy();
}
function test_Layer_AGS93_gutters (t) {
t.plan(2);
var gutter = 15;
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.ArcGIS93Rest("gutter layer", url, params, {gutter: gutter});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
var tile = layer.grid[0][0];
var request = layer.getURL(tile.bounds);
var args = OpenLayers.Util.getParameters(request);
t.eq(parseInt(args['SIZE'].split(",")[0]),
tile.size.w + (2 * gutter),
"layer with gutter requests images that are wider by twice the gutter");
t.eq(parseInt(args['SIZE'].split(",")[1]),
tile.size.h + (2 * gutter),
"layer with gutter requests images that are taller by twice the gutter");
layer.destroy();
map.destroy();
}
function test_Layer_AGS93_destroy (t) {
t.plan( 1 );
var map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
//grab a reference to one of the tiles
var tile = layer.grid[0][0];
layer.destroy();
// checks to make sure superclass (grid) destroy() was called
t.ok( layer.grid == null, "grid set to null");
}
function test_Layer_ADG93_Filter(t) {
t.plan( 9 );
layer = new OpenLayers.Layer.ArcGIS93Rest(name, url, params);
var map = new OpenLayers.Map('map');
map.addLayer(layer);
var pixel = new OpenLayers.Pixel(5,6);
var tile = layer.addTile(new OpenLayers.Bounds(1,2,3,4), pixel);
// Set up basic params.
var tParams = OpenLayers.Util.extend({}, OpenLayers.Util.upperCaseObject(params));
tParams = OpenLayers.Util.extend(tParams, {
FORMAT: "png", BBOX: "1,2,3,4", SIZE: "256,256", F: "image", BBOXSR: "4326", IMAGESR: "4326"
});
// We need to actually set the "correct" url on a dom element, because doing so encodes things not encoded by getParameterString.
var encodingHack = document.createElement("img");
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src no filter" );
layer.setLayerFilter('1', "MR_TOAD = 'FLYING'");
tParams["LAYERDEFS"] = "1:MR_TOAD = 'FLYING';";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src one filter" );
layer.setLayerFilter('1', "MR_TOAD = 'NOT FLYING'");
tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src change one filter" );
layer.setLayerFilter('2', "true = false");
tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';2:true = false;";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src two filters" );
layer.setLayerFilter('99', "some_col > 5");
tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';2:true = false;99:some_col > 5;";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src three filters" );
layer.clearLayerFilter('2');
tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';99:some_col > 5;";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src removed middle filter" );
layer.clearLayerFilter('2');
tParams["LAYERDEFS"] = "1:MR_TOAD = 'NOT FLYING';99:some_col > 5;";
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src removed missing filter (no change)" );
layer.clearLayerFilter();
delete tParams["LAYERDEFS"];
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src removed all filters" );
layer.clearLayerFilter();
tile.draw();
encodingHack.src = (url + "?" + OpenLayers.Util.getParameterString(tParams));
t.eq( tile.imgDiv.src, encodingHack.src, "image src removed all (no) filters" );
}
</script>
</head>
<body>
<div id="map" style="width:500px;height:550px"></div>
</body>
</html>

View File

@@ -90,6 +90,7 @@
<li>Icon.html</li> <li>Icon.html</li>
<li>Lang.html</li> <li>Lang.html</li>
<li>Layer.html</li> <li>Layer.html</li>
<li>Layer/ArcGIS93Rest.html</li>
<li>Layer/EventPane.html</li> <li>Layer/EventPane.html</li>
<li>Layer/FixedZoomLevels.html</li> <li>Layer/FixedZoomLevels.html</li>
<li>Layer/GeoRSS.html</li> <li>Layer/GeoRSS.html</li>