WMC.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
  2. * full list of contributors). Published under the 2-clause BSD license.
  3. * See license.txt in the OpenLayers distribution or repository for the
  4. * full text of the license. */
  5. /**
  6. * @requires OpenLayers/Format/XML.js
  7. * @requires OpenLayers/Format/Context.js
  8. */
  9. /**
  10. * Class: OpenLayers.Format.WMC
  11. * Read and write Web Map Context documents.
  12. *
  13. * Inherits from:
  14. * - <OpenLayers.Format.Context>
  15. */
  16. OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
  17. /**
  18. * APIProperty: defaultVersion
  19. * {String} Version number to assume if none found. Default is "1.1.0".
  20. */
  21. defaultVersion: "1.1.0",
  22. /**
  23. * Constructor: OpenLayers.Format.WMC
  24. * Create a new parser for Web Map Context documents.
  25. *
  26. * Parameters:
  27. * options - {Object} An optional object whose properties will be set on
  28. * this instance.
  29. */
  30. /**
  31. * Method: layerToContext
  32. * Create a layer context object given a wms layer object.
  33. *
  34. * Parameters:
  35. * layer - {<OpenLayers.Layer.WMS>} The layer.
  36. *
  37. * Returns:
  38. * {Object} A layer context object.
  39. */
  40. layerToContext: function(layer) {
  41. var parser = this.getParser();
  42. var layerContext = {
  43. queryable: layer.queryable,
  44. visibility: layer.visibility,
  45. name: layer.params["LAYERS"],
  46. title: layer.name,
  47. "abstract": layer.metadata["abstract"],
  48. dataURL: layer.metadata.dataURL,
  49. metadataURL: layer.metadataURL,
  50. server: {
  51. version: layer.params["VERSION"],
  52. url: layer.url
  53. },
  54. maxExtent: layer.maxExtent,
  55. transparent: layer.params["TRANSPARENT"],
  56. numZoomLevels: layer.numZoomLevels,
  57. units: layer.units,
  58. isBaseLayer: layer.isBaseLayer,
  59. opacity: layer.opacity == 1 ? undefined : layer.opacity,
  60. displayInLayerSwitcher: layer.displayInLayerSwitcher,
  61. singleTile: layer.singleTile,
  62. tileSize: (layer.singleTile || !layer.tileSize) ?
  63. undefined : {width: layer.tileSize.w, height: layer.tileSize.h},
  64. minScale : (layer.options.resolutions ||
  65. layer.options.scales ||
  66. layer.options.maxResolution ||
  67. layer.options.minScale) ?
  68. layer.minScale : undefined,
  69. maxScale : (layer.options.resolutions ||
  70. layer.options.scales ||
  71. layer.options.minResolution ||
  72. layer.options.maxScale) ?
  73. layer.maxScale : undefined,
  74. formats: [],
  75. styles: [],
  76. srs: layer.srs,
  77. dimensions: layer.dimensions
  78. };
  79. if (layer.metadata.servertitle) {
  80. layerContext.server.title = layer.metadata.servertitle;
  81. }
  82. if (layer.metadata.formats && layer.metadata.formats.length > 0) {
  83. for (var i=0, len=layer.metadata.formats.length; i<len; i++) {
  84. var format = layer.metadata.formats[i];
  85. layerContext.formats.push({
  86. value: format.value,
  87. current: (format.value == layer.params["FORMAT"])
  88. });
  89. }
  90. } else {
  91. layerContext.formats.push({
  92. value: layer.params["FORMAT"],
  93. current: true
  94. });
  95. }
  96. if (layer.metadata.styles && layer.metadata.styles.length > 0) {
  97. for (var i=0, len=layer.metadata.styles.length; i<len; i++) {
  98. var style = layer.metadata.styles[i];
  99. if ((style.href == layer.params["SLD"]) ||
  100. (style.body == layer.params["SLD_BODY"]) ||
  101. (style.name == layer.params["STYLES"])) {
  102. style.current = true;
  103. } else {
  104. style.current = false;
  105. }
  106. layerContext.styles.push(style);
  107. }
  108. } else {
  109. layerContext.styles.push({
  110. href: layer.params["SLD"],
  111. body: layer.params["SLD_BODY"],
  112. name: layer.params["STYLES"] || parser.defaultStyleName,
  113. title: parser.defaultStyleTitle,
  114. current: true
  115. });
  116. }
  117. return layerContext;
  118. },
  119. /**
  120. * Method: toContext
  121. * Create a context object free from layer given a map or a
  122. * context object.
  123. *
  124. * Parameters:
  125. * obj - {<OpenLayers.Map> | Object} The map or context.
  126. *
  127. * Returns:
  128. * {Object} A context object.
  129. */
  130. toContext: function(obj) {
  131. var context = {};
  132. var layers = obj.layers;
  133. if (obj.CLASS_NAME == "OpenLayers.Map") {
  134. var metadata = obj.metadata || {};
  135. context.size = obj.getSize();
  136. context.bounds = obj.getExtent();
  137. context.projection = obj.projection;
  138. context.title = obj.title;
  139. context.keywords = metadata.keywords;
  140. context["abstract"] = metadata["abstract"];
  141. context.logo = metadata.logo;
  142. context.descriptionURL = metadata.descriptionURL;
  143. context.contactInformation = metadata.contactInformation;
  144. context.maxExtent = obj.maxExtent;
  145. } else {
  146. // copy all obj properties except the "layers" property
  147. OpenLayers.Util.applyDefaults(context, obj);
  148. if (context.layers != undefined) {
  149. delete(context.layers);
  150. }
  151. }
  152. if (context.layersContext == undefined) {
  153. context.layersContext = [];
  154. }
  155. // let's convert layers into layersContext object (if any)
  156. if (layers != undefined && OpenLayers.Util.isArray(layers)) {
  157. for (var i=0, len=layers.length; i<len; i++) {
  158. var layer = layers[i];
  159. if (layer instanceof OpenLayers.Layer.WMS) {
  160. context.layersContext.push(this.layerToContext(layer));
  161. }
  162. }
  163. }
  164. return context;
  165. },
  166. CLASS_NAME: "OpenLayers.Format.WMC"
  167. });