[483] | 1 | define([ |
---|
| 2 | "dojo/_base/kernel", |
---|
| 3 | "dojo/_base/declare", |
---|
| 4 | "dojo/_base/lang", |
---|
| 5 | "dojo/_base/array", |
---|
| 6 | "dojo/_base/json", |
---|
| 7 | "dojo/dom", |
---|
| 8 | "dojo/dom-style", |
---|
| 9 | "./_base", |
---|
| 10 | "./TouchInteractionSupport", |
---|
| 11 | "./Layer", |
---|
| 12 | "./Patch" |
---|
| 13 | ], function(kernel, declare, lang, array, json, dom, style, openlayers, TouchInteractionSupport, Layer, Patch){ |
---|
| 14 | |
---|
| 15 | kernel.experimental("dojox.geo.openlayers.Map"); |
---|
| 16 | |
---|
| 17 | |
---|
| 18 | Patch.patchGFX(); |
---|
| 19 | |
---|
| 20 | /*===== |
---|
| 21 | dojox.geo.openlayers.__MapArgs = { |
---|
| 22 | // summary: |
---|
| 23 | // The keyword arguments that can be passed in a Map constructor. |
---|
| 24 | // baseLayerType: String |
---|
| 25 | // type of the base layer. Can be any of |
---|
| 26 | // |
---|
| 27 | // - `dojox.geo.openlayers.BaseLayerType.OSM`: Open Street Map base layer |
---|
| 28 | // - `dojox.geo.openlayers.BaseLayerType.WMS`: Web Map Service layer |
---|
| 29 | // - `dojox.geo.openlayers.BaseLayerType.GOOGLE`: Google layer |
---|
| 30 | // - `dojox.geo.openlayers.BaseLayerType.VIRTUAL_EARTH`: Virtual Earth layer |
---|
| 31 | // - `dojox.geo.openlayers.BaseLayerType.BING`: Bing layer |
---|
| 32 | // - `dojox.geo.openlayers.BaseLayerType.YAHOO`: Yahoo layer |
---|
| 33 | // - `dojox.geo.openlayers.BaseLayerType.ARCGIS`: ESRI ArgGIS layer |
---|
| 34 | // baseLayerName: String |
---|
| 35 | // The name of the base layer. |
---|
| 36 | // baseLayerUrl: String |
---|
| 37 | // Some layer may need an url such as Web Map Server. |
---|
| 38 | // baseLayerOptions: String |
---|
| 39 | // Additional specific options passed to OpensLayers layer, such as The list of layer to display, for Web Map Server layer. |
---|
| 40 | }; |
---|
| 41 | =====*/ |
---|
| 42 | |
---|
| 43 | return declare("dojox.geo.openlayers.Map", null, { |
---|
| 44 | // summary: |
---|
| 45 | // A map viewer based on the OpenLayers library. |
---|
| 46 | // |
---|
| 47 | // description: |
---|
| 48 | // The `dojox.geo.openlayers.Map` object allows to view maps from various map providers. |
---|
| 49 | // It encapsulates an `OpenLayers.Map` object on which most operations are delegated. |
---|
| 50 | // GFX layers can be added to display GFX georeferenced shapes as well as Dojo widgets. |
---|
| 51 | // Parameters can be passed as argument at construction time to define the base layer |
---|
| 52 | // type and the base layer parameters such as url or options depending on the type |
---|
| 53 | // specified. These parameters can be any of: |
---|
| 54 | // |
---|
| 55 | // _baseLayerType_: type of the base layer. Can be any of: |
---|
| 56 | // |
---|
| 57 | // - `dojox.geo.openlayers.BaseLayerType.OSM`: Open Street Map base layer |
---|
| 58 | // - `dojox.geo.openlayers.BaseLayerType.WMS`: Web Map Service layer |
---|
| 59 | // - `dojox.geo.openlayers.BaseLayerType.GOOGLE`: Google layer |
---|
| 60 | // - `dojox.geo.openlayers.BaseLayerType.VIRTUAL_EARTH`: Virtual Earth layer |
---|
| 61 | // - `dojox.geo.openlayers.BaseLayerType.BING`: Bing layer |
---|
| 62 | // - `dojox.geo.openlayers.BaseLayerType.YAHOO`: Yahoo layer |
---|
| 63 | // - `dojox.geo.openlayers.BaseLayerType.ARCGIS`: ESRI ArgGIS layer |
---|
| 64 | // |
---|
| 65 | // Note that access to commercial server such as Google, Virtual Earth or Yahoo may need specific licencing. |
---|
| 66 | // |
---|
| 67 | // The parameters value also include: |
---|
| 68 | // |
---|
| 69 | // - `baseLayerName`: The name of the base layer. |
---|
| 70 | // - `baseLayerUrl`: Some layer may need an url such as Web Map Server |
---|
| 71 | // - `baseLayerOptions`: Additional specific options passed to OpensLayers layer, |
---|
| 72 | // such as The list of layer to display, for Web Map Server layer. |
---|
| 73 | // |
---|
| 74 | // example: |
---|
| 75 | // | var map = new dojox.geo.openlayers.widget.Map(div, { |
---|
| 76 | // | baseLayerType: dojox.geo.openlayers.BaseLayerType.OSM, |
---|
| 77 | // | baseLayerName: 'Open Street Map Layer' |
---|
| 78 | // | }); |
---|
| 79 | |
---|
| 80 | // olMap: OpenLayers.Map |
---|
| 81 | // The underlying OpenLayers.Map object. |
---|
| 82 | // Should be accessed on read mode only. |
---|
| 83 | olMap: null, |
---|
| 84 | |
---|
| 85 | _tp: null, |
---|
| 86 | |
---|
| 87 | constructor: function(div, options){ |
---|
| 88 | // summary: |
---|
| 89 | // Constructs a new Map object |
---|
| 90 | if(!options){ |
---|
| 91 | options = {}; |
---|
| 92 | } |
---|
| 93 | |
---|
| 94 | div = dom.byId(div); |
---|
| 95 | |
---|
| 96 | this._tp = { |
---|
| 97 | x: 0, |
---|
| 98 | y: 0 |
---|
| 99 | }; |
---|
| 100 | |
---|
| 101 | var opts = options.openLayersMapOptions; |
---|
| 102 | |
---|
| 103 | if(!opts){ |
---|
| 104 | opts = { |
---|
| 105 | controls: [new OpenLayers.Control.ScaleLine({ |
---|
| 106 | maxWidth: 200 |
---|
| 107 | }), new OpenLayers.Control.Navigation()] |
---|
| 108 | }; |
---|
| 109 | } |
---|
| 110 | if(options.accessible){ |
---|
| 111 | var kbd = new OpenLayers.Control.KeyboardDefaults(); |
---|
| 112 | if(!opts.controls){ |
---|
| 113 | opts.controls = []; |
---|
| 114 | } |
---|
| 115 | opts.controls.push(kbd); |
---|
| 116 | } |
---|
| 117 | var baseLayerType = options.baseLayerType; |
---|
| 118 | if(!baseLayerType){ |
---|
| 119 | baseLayerType = openlayers.BaseLayerType.OSM; |
---|
| 120 | } |
---|
| 121 | var map = new OpenLayers.Map(div, opts); |
---|
| 122 | this.olMap = map; |
---|
| 123 | |
---|
| 124 | this._layerDictionary = { |
---|
| 125 | olLayers: [], |
---|
| 126 | layers: [] |
---|
| 127 | }; |
---|
| 128 | |
---|
| 129 | if(options.touchHandler){ |
---|
| 130 | this._touchControl = new TouchInteractionSupport(map); |
---|
| 131 | } |
---|
| 132 | |
---|
| 133 | var base = this._createBaseLayer(options); |
---|
| 134 | this.addLayer(base); |
---|
| 135 | |
---|
| 136 | this.initialFit(options); |
---|
| 137 | }, |
---|
| 138 | |
---|
| 139 | initialFit: function(params){ |
---|
| 140 | // summary: |
---|
| 141 | // Performs an initial fit to contents. |
---|
| 142 | // tags: |
---|
| 143 | // protected |
---|
| 144 | var o = params.initialLocation; |
---|
| 145 | if(!o){ |
---|
| 146 | o = [-160, 70, 160, -70]; |
---|
| 147 | } |
---|
| 148 | this.fitTo(o); |
---|
| 149 | }, |
---|
| 150 | |
---|
| 151 | setBaseLayerType: function(type){ |
---|
| 152 | // summary: |
---|
| 153 | // Set the base layer type, replacing the existing base layer |
---|
| 154 | // type: dojox/geo/openlayers.BaseLayerType |
---|
| 155 | // base layer type |
---|
| 156 | // returns: |
---|
| 157 | // The newly created layer. |
---|
| 158 | if(type == this.baseLayerType){ |
---|
| 159 | return null; // Layer |
---|
| 160 | } |
---|
| 161 | |
---|
| 162 | var o = null; |
---|
| 163 | if(typeof type == "string"){ |
---|
| 164 | o = { |
---|
| 165 | baseLayerName: type, |
---|
| 166 | baseLayerType: type |
---|
| 167 | }; |
---|
| 168 | this.baseLayerType = type; |
---|
| 169 | }else if(typeof type == "object"){ |
---|
| 170 | o = type; |
---|
| 171 | this.baseLayerType = o.baseLayerType; |
---|
| 172 | } |
---|
| 173 | var bl = null; |
---|
| 174 | if(o != null){ |
---|
| 175 | bl = this._createBaseLayer(o); |
---|
| 176 | if(bl != null){ |
---|
| 177 | var olm = this.olMap; |
---|
| 178 | var ob = olm.getZoom(); |
---|
| 179 | var oc = olm.getCenter(); |
---|
| 180 | var recenter = !!oc && !!olm.baseLayer && !!olm.baseLayer.map; |
---|
| 181 | |
---|
| 182 | if(recenter){ |
---|
| 183 | var proj = olm.getProjectionObject(); |
---|
| 184 | if(proj != null){ |
---|
| 185 | oc = oc.transform(proj, openlayers.EPSG4326); |
---|
| 186 | } |
---|
| 187 | } |
---|
| 188 | var old = olm.baseLayer; |
---|
| 189 | if(old != null){ |
---|
| 190 | var l = this._getLayer(old); |
---|
| 191 | this.removeLayer(l); |
---|
| 192 | } |
---|
| 193 | if(bl != null){ |
---|
| 194 | this.addLayer(bl); |
---|
| 195 | } |
---|
| 196 | if(recenter){ |
---|
| 197 | proj = olm.getProjectionObject(); |
---|
| 198 | if(proj != null){ |
---|
| 199 | oc = oc.transform(openlayers.EPSG4326, proj); |
---|
| 200 | } |
---|
| 201 | olm.setCenter(oc, ob); |
---|
| 202 | } |
---|
| 203 | } |
---|
| 204 | } |
---|
| 205 | return bl; |
---|
| 206 | }, |
---|
| 207 | |
---|
| 208 | getBaseLayerType: function(){ |
---|
| 209 | // summary: |
---|
| 210 | // Returns the base layer type. |
---|
| 211 | // returns: |
---|
| 212 | // The current base layer type. |
---|
| 213 | return this.baseLayerType; // openlayers.BaseLayerType |
---|
| 214 | }, |
---|
| 215 | |
---|
| 216 | getScale: function(geodesic){ |
---|
| 217 | // summary: |
---|
| 218 | // Returns the current scale |
---|
| 219 | // geodesic: Boolean |
---|
| 220 | // Tell if geodesic calculation should be performed. If set to |
---|
| 221 | // true, the scale will be calculated based on the horizontal size of the |
---|
| 222 | // pixel in the center of the map viewport. |
---|
| 223 | var scale = null; |
---|
| 224 | var om = this.olMap; |
---|
| 225 | if(geodesic){ |
---|
| 226 | var units = om.getUnits(); |
---|
| 227 | if(!units){ |
---|
| 228 | return null; // Number |
---|
| 229 | } |
---|
| 230 | var inches = OpenLayers.INCHES_PER_UNIT; |
---|
| 231 | scale = (om.getGeodesicPixelSize().w || 0.000001) * inches["km"] * OpenLayers.DOTS_PER_INCH; |
---|
| 232 | }else{ |
---|
| 233 | scale = om.getScale(); |
---|
| 234 | } |
---|
| 235 | return scale; // Number |
---|
| 236 | }, |
---|
| 237 | |
---|
| 238 | getOLMap: function(){ |
---|
| 239 | // summary: |
---|
| 240 | // gets the underlying OpenLayers map object. |
---|
| 241 | // returns: |
---|
| 242 | // The underlying OpenLayers map object. |
---|
| 243 | return this.olMap; // OpenLayers.Map |
---|
| 244 | }, |
---|
| 245 | |
---|
| 246 | _createBaseLayer: function(params){ |
---|
| 247 | // summary: |
---|
| 248 | // Creates the base layer. |
---|
| 249 | // tags: |
---|
| 250 | // private |
---|
| 251 | var base = null; |
---|
| 252 | var type = params.baseLayerType; |
---|
| 253 | var url = params.baseLayerUrl; |
---|
| 254 | var name = params.baseLayerName; |
---|
| 255 | var options = params.baseLayerOptions; |
---|
| 256 | |
---|
| 257 | if(!name){ |
---|
| 258 | name = type; |
---|
| 259 | } |
---|
| 260 | if(!options){ |
---|
| 261 | options = {}; |
---|
| 262 | } |
---|
| 263 | switch(type){ |
---|
| 264 | case openlayers.BaseLayerType.OSM: |
---|
| 265 | options.transitionEffect = "resize"; |
---|
| 266 | // base = new OpenLayers.Layer.OSM(name, url, options); |
---|
| 267 | base = new Layer(name, { |
---|
| 268 | olLayer: new OpenLayers.Layer.OSM(name, url, options) |
---|
| 269 | }); |
---|
| 270 | break; |
---|
| 271 | case openlayers.BaseLayerType.WMS: |
---|
| 272 | if(!url){ |
---|
| 273 | url = "http://labs.metacarta.com/wms/vmap0"; |
---|
| 274 | if(!options.layers){ |
---|
| 275 | options.layers = "basic"; |
---|
| 276 | } |
---|
| 277 | } |
---|
| 278 | base = new Layer(name, { |
---|
| 279 | olLayer: new OpenLayers.Layer.WMS(name, url, options, { |
---|
| 280 | transitionEffect: "resize" |
---|
| 281 | }) |
---|
| 282 | }); |
---|
| 283 | break; |
---|
| 284 | case openlayers.BaseLayerType.GOOGLE: |
---|
| 285 | base = new Layer(name, { |
---|
| 286 | olLayer: new OpenLayers.Layer.Google(name, options) |
---|
| 287 | }); |
---|
| 288 | break; |
---|
| 289 | case openlayers.BaseLayerType.VIRTUAL_EARTH: |
---|
| 290 | base = new Layer(name, { |
---|
| 291 | olLayer: new OpenLayers.Layer.VirtualEarth(name, options) |
---|
| 292 | }); |
---|
| 293 | break; |
---|
| 294 | case openlayers.BaseLayerType.YAHOO: |
---|
| 295 | // base = new OpenLayers.Layer.Yahoo(name); |
---|
| 296 | base = new Layer(name, { |
---|
| 297 | olLayer: new OpenLayers.Layer.Yahoo(name, options) |
---|
| 298 | }); |
---|
| 299 | break; |
---|
| 300 | case openlayers.BaseLayerType.ARCGIS: |
---|
| 301 | if(!url){ |
---|
| 302 | url = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/export"; |
---|
| 303 | } |
---|
| 304 | base = new Layer(name, { |
---|
| 305 | olLayer: new OpenLayers.Layer.ArcGIS93Rest(name, url, options, {}) |
---|
| 306 | }); |
---|
| 307 | |
---|
| 308 | break; |
---|
| 309 | } |
---|
| 310 | |
---|
| 311 | if(base == null){ |
---|
| 312 | if(type instanceof OpenLayers.Layer){ |
---|
| 313 | base = type; |
---|
| 314 | }else{ |
---|
| 315 | options.transitionEffect = "resize"; |
---|
| 316 | base = new Layer(name, { |
---|
| 317 | olLayer: new OpenLayers.Layer.OSM(name, url, options) |
---|
| 318 | }); |
---|
| 319 | this.baseLayerType = openlayers.BaseLayerType.OSM; |
---|
| 320 | } |
---|
| 321 | } |
---|
| 322 | |
---|
| 323 | return base; |
---|
| 324 | }, |
---|
| 325 | |
---|
| 326 | removeLayer: function(layer){ |
---|
| 327 | // summary: |
---|
| 328 | // Remove the specified layer from the map. |
---|
| 329 | // layer: Layer |
---|
| 330 | // The layer to remove from the map. |
---|
| 331 | var om = this.olMap; |
---|
| 332 | var i = array.indexOf(this._layerDictionary.layers, layer); |
---|
| 333 | if(i > 0){ |
---|
| 334 | this._layerDictionary.layers.splice(i, 1); |
---|
| 335 | } |
---|
| 336 | var oll = layer.olLayer; |
---|
| 337 | var j = array.indexOf(this._layerDictionary.olLayers, oll); |
---|
| 338 | if(j > 0){ |
---|
| 339 | this._layerDictionary.olLayers.splice(i, j); |
---|
| 340 | } |
---|
| 341 | om.removeLayer(oll, false); |
---|
| 342 | }, |
---|
| 343 | |
---|
| 344 | layerIndex: function(layer, index){ |
---|
| 345 | // summary: |
---|
| 346 | // Set or retrieve the layer index. |
---|
| 347 | // description: |
---|
| 348 | // Set or get the layer index, that is the z-order of the layer. |
---|
| 349 | // if the index parameter is provided, the layer index is set to |
---|
| 350 | // this value. If the index parameter is not provided, the index of |
---|
| 351 | // the layer is returned. |
---|
| 352 | // layer: Layer |
---|
| 353 | // the layer to retrieve the index. |
---|
| 354 | // index: int? |
---|
| 355 | // index of the layer |
---|
| 356 | // returns: |
---|
| 357 | // the index of the layer. |
---|
| 358 | var olm = this.olMap; |
---|
| 359 | if(!index){ |
---|
| 360 | return olm.getLayerIndex(layer.olLayer); |
---|
| 361 | } |
---|
| 362 | //olm.raiseLayer(layer.olLayer, index); |
---|
| 363 | olm.setLayerIndex(layer.olLayer, index); |
---|
| 364 | |
---|
| 365 | this._layerDictionary.layers.sort(function(l1, l2){ |
---|
| 366 | return olm.getLayerIndex(l1.olLayer) - olm.getLayerIndex(l2.olLayer); |
---|
| 367 | }); |
---|
| 368 | this._layerDictionary.olLayers.sort(function(l1, l2){ |
---|
| 369 | return olm.getLayerIndex(l1) - olm.getLayerIndex(l2); |
---|
| 370 | }); |
---|
| 371 | |
---|
| 372 | return index; // Number |
---|
| 373 | }, |
---|
| 374 | |
---|
| 375 | addLayer: function(layer){ |
---|
| 376 | // summary: |
---|
| 377 | // Add the specified layer to the map. |
---|
| 378 | // layer: Layer |
---|
| 379 | // The layer to add to the map. |
---|
| 380 | layer.dojoMap = this; |
---|
| 381 | var om = this.olMap; |
---|
| 382 | var ol = layer.olLayer; |
---|
| 383 | this._layerDictionary.olLayers.push(ol); |
---|
| 384 | this._layerDictionary.layers.push(layer); |
---|
| 385 | om.addLayer(ol); |
---|
| 386 | layer.added(); |
---|
| 387 | }, |
---|
| 388 | |
---|
| 389 | _getLayer: function(/*OpenLayer.Layer */ol){ |
---|
| 390 | // summary: |
---|
| 391 | // Retrieve the dojox.geo.openlayer.Layer from the OpenLayer.Layer |
---|
| 392 | // tags: |
---|
| 393 | // private |
---|
| 394 | var i = array.indexOf(this._layerDictionary.olLayers, ol); |
---|
| 395 | if(i != -1){ |
---|
| 396 | return this._layerDictionary.layers[i]; |
---|
| 397 | } |
---|
| 398 | return null; |
---|
| 399 | }, |
---|
| 400 | |
---|
| 401 | getLayer: function(property, value){ |
---|
| 402 | // summary: |
---|
| 403 | // Returns the layer whose property matches the value. |
---|
| 404 | // property: String |
---|
| 405 | // The property to check |
---|
| 406 | // value: Object |
---|
| 407 | // The value to match |
---|
| 408 | // returns: |
---|
| 409 | // The layer(s) matching the property's value. Since multiple layers |
---|
| 410 | // match the property's value the return value is an array. |
---|
| 411 | // example: |
---|
| 412 | // var layers = map.getLayer("name", "Layer Name"); |
---|
| 413 | var om = this.olMap; |
---|
| 414 | var ols = om.getBy("layers", property, value); |
---|
| 415 | var ret = new Array(); //[]; |
---|
| 416 | array.forEach(ols, function(ol){ |
---|
| 417 | ret.push(this._getLayer(ol)); |
---|
| 418 | }, this); |
---|
| 419 | return ret; // Layer[] |
---|
| 420 | }, |
---|
| 421 | |
---|
| 422 | getLayerCount: function(){ |
---|
| 423 | // summary: |
---|
| 424 | // Returns the count of layers of this map. |
---|
| 425 | // returns: |
---|
| 426 | // The number of layers of this map. |
---|
| 427 | var om = this.olMap; |
---|
| 428 | if(om.layers == null){ |
---|
| 429 | return 0; |
---|
| 430 | } |
---|
| 431 | return om.layers.length; // Number |
---|
| 432 | }, |
---|
| 433 | |
---|
| 434 | fitTo: function(o){ |
---|
| 435 | // summary: |
---|
| 436 | // Fits the map on a point,or an area |
---|
| 437 | // description: |
---|
| 438 | // Fits the map on the point or extent specified as parameter. |
---|
| 439 | // o: Object |
---|
| 440 | // Object with key values fit parameters or a JSON string. |
---|
| 441 | // example: |
---|
| 442 | // Examples of arguments passed to the fitTo function: |
---|
| 443 | // | null |
---|
| 444 | // The map is fit on full extent |
---|
| 445 | // |
---|
| 446 | // | { |
---|
| 447 | // | bounds: [ulx, uly, lrx, lry] |
---|
| 448 | // | } |
---|
| 449 | // The map is fit on the specified bounds expressed as decimal degrees latitude and longitude. |
---|
| 450 | // The bounds are defined with their upper left and lower right corners coordinates. |
---|
| 451 | // |
---|
| 452 | // | { |
---|
| 453 | // | position: [longitude, latitude], |
---|
| 454 | // | extent: degrees |
---|
| 455 | // | } |
---|
| 456 | // The map is fit on the specified position showing the extent `<extent>` around |
---|
| 457 | // the specified center position. |
---|
| 458 | |
---|
| 459 | var map = this.olMap; |
---|
| 460 | var from = openlayers.EPSG4326; |
---|
| 461 | |
---|
| 462 | if(o == null){ |
---|
| 463 | var c = this.transformXY(0, 0, from); |
---|
| 464 | map.setCenter(new OpenLayers.LonLat(c.x, c.y)); |
---|
| 465 | return; |
---|
| 466 | } |
---|
| 467 | var b = null; |
---|
| 468 | if(typeof o == "string"){ |
---|
| 469 | var j = json.fromJson(o); |
---|
| 470 | }else{ |
---|
| 471 | j = o; |
---|
| 472 | } |
---|
| 473 | var ul; |
---|
| 474 | var lr; |
---|
| 475 | if(j.hasOwnProperty("bounds")){ |
---|
| 476 | var a = j.bounds; |
---|
| 477 | b = new OpenLayers.Bounds(); |
---|
| 478 | ul = this.transformXY(a[0], a[1], from); |
---|
| 479 | b.left = ul.x; |
---|
| 480 | b.top = ul.y; |
---|
| 481 | lr = this.transformXY(a[2], a[3], from); |
---|
| 482 | b.right = lr.x; |
---|
| 483 | b.bottom = lr.y; |
---|
| 484 | } |
---|
| 485 | if(b == null){ |
---|
| 486 | if(j.hasOwnProperty("position")){ |
---|
| 487 | var p = j.position; |
---|
| 488 | var e = j.hasOwnProperty("extent") ? j.extent : 1; |
---|
| 489 | if(typeof e == "string"){ |
---|
| 490 | e = parseFloat(e); |
---|
| 491 | } |
---|
| 492 | b = new OpenLayers.Bounds(); |
---|
| 493 | ul = this.transformXY(p[0] - e, p[1] + e, from); |
---|
| 494 | b.left = ul.x; |
---|
| 495 | b.top = ul.y; |
---|
| 496 | lr = this.transformXY(p[0] + e, p[1] - e, from); |
---|
| 497 | b.right = lr.x; |
---|
| 498 | b.bottom = lr.y; |
---|
| 499 | } |
---|
| 500 | } |
---|
| 501 | if(b == null){ |
---|
| 502 | if(o.length == 4){ |
---|
| 503 | b = new OpenLayers.Bounds(); |
---|
| 504 | // TODO Choose the correct method |
---|
| 505 | if(false){ |
---|
| 506 | b.left = o[0]; |
---|
| 507 | b.top = o[1]; |
---|
| 508 | |
---|
| 509 | b.right = o[2]; |
---|
| 510 | b.bottom = o[3]; |
---|
| 511 | }else{ |
---|
| 512 | ul = this.transformXY(o[0], o[1], from); |
---|
| 513 | b.left = ul.x; |
---|
| 514 | b.top = ul.y; |
---|
| 515 | lr = this.transformXY(o[2], o[3], from); |
---|
| 516 | b.right = lr.x; |
---|
| 517 | b.bottom = lr.y; |
---|
| 518 | } |
---|
| 519 | } |
---|
| 520 | } |
---|
| 521 | if(b != null){ |
---|
| 522 | map.zoomToExtent(b, true); |
---|
| 523 | } |
---|
| 524 | }, |
---|
| 525 | |
---|
| 526 | transform: function(p, from, to){ |
---|
| 527 | // summary: |
---|
| 528 | // Transforms the point passed as argument, expressed in the <em>from</em> |
---|
| 529 | // coordinate system to the map coordinate system. |
---|
| 530 | // description: |
---|
| 531 | // Transforms the point passed as argument without modifying it. The point is supposed to be expressed |
---|
| 532 | // in the <em>from</em> coordinate system and is transformed to the map coordinate system. |
---|
| 533 | // p: Object {x, y} |
---|
| 534 | // The point to transform |
---|
| 535 | // from: OpenLayers.Projection |
---|
| 536 | // The projection in which the point is expressed. |
---|
| 537 | return this.transformXY(p.x, p.y, from, to); |
---|
| 538 | }, |
---|
| 539 | |
---|
| 540 | transformXY: function(x, y, from, to){ |
---|
| 541 | // summary: |
---|
| 542 | // Transforms the coordinates passed as argument, expressed in the <em>from</em> |
---|
| 543 | // coordinate system to the map coordinate system. |
---|
| 544 | // description: |
---|
| 545 | // Transforms the coordinates passed as argument. The coordinate are supposed to be expressed |
---|
| 546 | // in the <em>from</em> coordinate system and are transformed to the map coordinate system. |
---|
| 547 | // x: Number |
---|
| 548 | // The longitude coordinate to transform. |
---|
| 549 | // y: Number |
---|
| 550 | // The latitude coordinate to transform. |
---|
| 551 | // from: OpenLayers.Projection? |
---|
| 552 | // The projection in which the point is expressed, or EPSG4326 is not specified. |
---|
| 553 | // to: OpenLayers.Projection? |
---|
| 554 | // The projection in which the point is converted to. In not specifed, the map projection is used. |
---|
| 555 | // returns: |
---|
| 556 | // The transformed coordinate as an {x,y} Object. |
---|
| 557 | |
---|
| 558 | var tp = this._tp; |
---|
| 559 | tp.x = x; |
---|
| 560 | tp.y = y; |
---|
| 561 | if(!from){ |
---|
| 562 | from = openlayers.EPSG4326; |
---|
| 563 | } |
---|
| 564 | if(!to){ |
---|
| 565 | to = this.olMap.getProjectionObject(); |
---|
| 566 | } |
---|
| 567 | tp = OpenLayers.Projection.transform(tp, from, to); |
---|
| 568 | return tp; // Object |
---|
| 569 | } |
---|
| 570 | |
---|
| 571 | }); |
---|
| 572 | |
---|
| 573 | }); |
---|