diff --git a/examples/wmc.html b/examples/wmc.html index 875cfcdda8..151c2daede 100644 --- a/examples/wmc.html +++ b/examples/wmc.html @@ -105,7 +105,9 @@ } else { map.destroy(); try { - map = format.read(text, {map: "map"}); + var jsonFormat = new OpenLayers.Format.JSON(); + var mapOptions = jsonFormat.read(OpenLayers.Util.getElement('mapOptions').value); + map = format.read(text, {map: mapOptions}); map.addControl(new OpenLayers.Control.LayerSwitcher()); } catch(err) { document.getElementById("wmc").value = err; @@ -133,9 +135,10 @@ Shows parsing of Web Map Context documents.

- - - +
+ with the following extra map options :
+
+
This is an example of parsing WMC documents.
diff --git a/lib/OpenLayers/Format/WMC.js b/lib/OpenLayers/Format/WMC.js index be0a46d12f..af1b1b48d9 100644 --- a/lib/OpenLayers/Format/WMC.js +++ b/lib/OpenLayers/Format/WMC.js @@ -71,9 +71,11 @@ OpenLayers.Format.WMC = OpenLayers.Class({ * data - {String} or {DOMElement} data to read/parse. * options - {Object} The options object must contain a map property. If * the map property is a string, it must be the id of a dom element - * where the new map will be placed. If the map property is an + * where the new map will be placed. If the map property is an * , the layers from the context document will be added - * to the map. + * to the map. If the map property is an object, this will be + * considered as options to create the map with, in most cases, it would + * have a div property. * * Returns: * {} A map based on the context. @@ -95,7 +97,14 @@ OpenLayers.Format.WMC = OpenLayers.Class({ if(options.map instanceof OpenLayers.Map) { map = this.mergeContextToMap(context, options.map); } else { - map = this.contextToMap(context, options.map); + var mapOptions = options.map; + if(OpenLayers.Util.isElement(mapOptions) || + typeof mapOptions == "string") { + // we assume mapOptions references a div + // element + mapOptions = {div: mapOptions}; + } + map = this.contextToMap(context, mapOptions); } } else { // not documented as part of the API, provided as a non-API option @@ -231,17 +240,17 @@ OpenLayers.Format.WMC = OpenLayers.Class({ * * Parameters: * context - {Object} The context object. - * id - {String | Element} The dom element or element id that will contain - * the map. + * options - {Object} Default map options. * * Returns: * {} A map based on the context object. */ - contextToMap: function(context, id) { - var map = new OpenLayers.Map(id, { + contextToMap: function(context, options) { + options = OpenLayers.Util.applyDefaults({ maxExtent: context.maxExtent, projection: context.projection - }); + }, options); + var map = new OpenLayers.Map(options); map.addLayers(this.getLayersFromContext(context.layersContext)); map.setCenter( context.bounds.getCenterLonLat(), diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 99a8596634..ae6d4d5615 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -31,6 +31,20 @@ OpenLayers.Util.getElement = function() { return elements; }; +/** + * Function: isElement + * A cross-browser implementation of "e instanceof Element". + * + * Parameters: + * o - {Object} The object to test. + * + * Returns: + * {Boolean} + */ +OpenLayers.Util.isElement = function(o) { + return !!(o && o.nodeType === 1); +}; + /** * Maintain existing definition of $. */ diff --git a/tests/Format/WMC.html b/tests/Format/WMC.html index 92a239f18c..52e4f662bc 100644 --- a/tests/Format/WMC.html +++ b/tests/Format/WMC.html @@ -7,7 +7,7 @@ var v1_1_0 = '<Extension><ol:maxExtent xmlns:ol="http://openlayers.org/context" minx="-130.0000000" miny="14.00000000" maxx="-60.00000000" maxy="55.00000000"/></Extension></General><LayerList><Layer queryable="1" hidden="0"><Server service="OGC:WMS" version="1.1.1"><OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://t1.hypercube.telascience.org/cgi-bin/landsat7"/></Server><Name>landsat7</Name><Title>NASA Global Mosaic6299645.76031498228.80image/jpeg4degreestruetruefalse'; function test_Format_WMC_read(t) { - t.plan(33); + t.plan(34); var format = new OpenLayers.Format.WMC(); var map, layer; @@ -86,6 +86,12 @@ t.eq(layer.opacity, 0.8, "(v1.1.0) layer opacity correctly set"); map.destroy(); + + // test mapOptions + var map = format.read(v1_1_0, {map: {foo: 'bar', div: 'map'}}); + t.eq(map.foo, "bar", + "mapOptions correctly passed to the created map object"); + map.destroy(); } diff --git a/tests/Util.html b/tests/Util.html index 06685977fc..3a214afed1 100644 --- a/tests/Util.html +++ b/tests/Util.html @@ -8,6 +8,24 @@