of data up to our last backup. In the previous subversion repository, this was r1694->r1777. I'm sorry to all those of you who might have checked out that code, as this will surely cause problems for you. We're currently working to figure out what went wrong, and how to prevent it in the future. git-svn-id: http://svn.openlayers.org/trunk/openlayers@1695 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
313 lines
9.7 KiB
JavaScript
313 lines
9.7 KiB
JavaScript
/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
|
|
* text of the license. */
|
|
|
|
/**
|
|
* @class
|
|
*
|
|
* @requires OpenLayers/Layer.js
|
|
* @requires OpenLayers/Util.js
|
|
*/
|
|
OpenLayers.Layer.EventPane = OpenLayers.Class.create();
|
|
OpenLayers.Layer.EventPane.prototype =
|
|
OpenLayers.Class.inherit( OpenLayers.Layer, {
|
|
|
|
/** EventPaned layers are always base layers, by necessity.
|
|
*
|
|
* @type Boolean */
|
|
isBaseLayer: true,
|
|
|
|
/** EventPaned layers are fixed by default.
|
|
*
|
|
* @type Boolean */
|
|
isFixed: true,
|
|
|
|
/** @type DOMElement */
|
|
pane: null,
|
|
|
|
|
|
/** This is the object which will be used to load the 3rd party library
|
|
* in the case of the google layer, this will be of type GMap,
|
|
* in the case of the ve layer, this will be of type VEMap
|
|
*
|
|
* @type Object */
|
|
mapObject: null,
|
|
|
|
|
|
/**
|
|
* @constructor
|
|
*
|
|
* @param {String} name
|
|
* @param {Object} options Hashtable of extra options to tag onto the layer
|
|
*/
|
|
initialize: function(name, options) {
|
|
OpenLayers.Layer.prototype.initialize.apply(this, arguments);
|
|
if (this.pane == null) {
|
|
this.pane = OpenLayers.Util.createDiv(this.div.id + "_EventPane");
|
|
}
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
destroy: function() {
|
|
this.mapObject = null;
|
|
OpenLayers.Layer.prototype.destroy.apply(this, arguments);
|
|
},
|
|
|
|
|
|
/** Set the map property for the layer. This is done through an accessor
|
|
* so that subclasses can override this and take special action once
|
|
* they have their map variable set.
|
|
*
|
|
* @param {OpenLayers.Map} map
|
|
*/
|
|
setMap: function(map) {
|
|
OpenLayers.Layer.prototype.setMap.apply(this, arguments);
|
|
|
|
this.pane.style.zIndex = parseInt(this.div.style.zIndex) + 1;
|
|
this.pane.style.display = this.div.style.display;
|
|
this.pane.style.width="100%";
|
|
this.pane.style.height="100%";
|
|
if (/MSIE/.test(navigator.userAgent)) {
|
|
this.pane.style.background = "url("+OpenLayers.Util.getImagesLocation()+"blank.gif)";
|
|
}
|
|
|
|
if (this.isFixed) {
|
|
this.map.viewPortDiv.appendChild(this.pane);
|
|
} else {
|
|
this.map.layerContainerDiv.appendChild(this.pane);
|
|
}
|
|
|
|
// once our layer has been added to the map, we can load it
|
|
this.loadMapObject();
|
|
|
|
// if map didn't load, display warning
|
|
if (this.mapObject == null) {
|
|
this.loadWarningMessage();
|
|
}
|
|
},
|
|
|
|
/** If we can't load the GMap, then display an error message to the
|
|
* user and tell them where to go for help.
|
|
*
|
|
* @private
|
|
*
|
|
*/
|
|
loadWarningMessage:function() {
|
|
|
|
this.div.style.backgroundColor = "darkblue";
|
|
|
|
var viewSize = this.map.getSize();
|
|
|
|
msgW = Math.min(viewSize.w, 300);
|
|
msgH = Math.min(viewSize.h, 200);
|
|
var size = new OpenLayers.Size(msgW, msgH);
|
|
|
|
var centerPx = new OpenLayers.Pixel(viewSize.w/2, viewSize.h/2);
|
|
|
|
var topLeft = centerPx.add(-size.w/2, -size.h/2);
|
|
|
|
var div = OpenLayers.Util.createDiv(this.name + "_warning",
|
|
topLeft,
|
|
size,
|
|
null,
|
|
null,
|
|
null,
|
|
"auto");
|
|
|
|
div.style.padding = "7px";
|
|
div.style.backgroundColor = "yellow";
|
|
|
|
div.innerHTML = this.getWarningHTML();
|
|
this.div.appendChild(div);
|
|
},
|
|
|
|
|
|
/**
|
|
* @param {Boolean} display
|
|
*/
|
|
display: function(display) {
|
|
OpenLayers.Layer.prototype.display.apply(this, arguments);
|
|
this.pane.style.display = this.div.style.display;
|
|
},
|
|
|
|
/**
|
|
* @param {int} zIndex
|
|
*/
|
|
setZIndex: function (zIndex) {
|
|
OpenLayers.Layer.prototype.setZIndex.apply(this, arguments);
|
|
this.pane.style.zIndex = parseInt(this.div.style.zIndex) + 1;
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Bounds} bounds
|
|
* @param {Boolean} zoomChanged
|
|
* @param {Boolean} dragging
|
|
*/
|
|
moveTo:function(bounds, zoomChanged, dragging) {
|
|
OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
|
|
|
|
if (this.mapObject != null) {
|
|
|
|
var newCenter = this.map.getCenter();
|
|
var newZoom = this.map.getZoom();
|
|
|
|
if (newCenter != null) {
|
|
|
|
var moOldCenter = this.getMapObjectCenter();
|
|
var oldCenter = this.getOLLonLatFromMapObjectLonLat(moOldCenter);
|
|
|
|
var moOldZoom = this.getMapObjectZoom();
|
|
var oldZoom= this.getOLZoomFromMapObjectZoom(moOldZoom);
|
|
|
|
if ( !(newCenter.equals(oldCenter)) ||
|
|
!(newZoom == oldZoom) ) {
|
|
|
|
var center = this.getMapObjectLonLatFromOLLonLat(newCenter);
|
|
var zoom = this.getMapObjectZoomFromOLZoom(newZoom);
|
|
this.setMapObjectCenter(center, zoom);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
|
|
/********************************************************/
|
|
/* */
|
|
/* Baselayer Functions */
|
|
/* */
|
|
/********************************************************/
|
|
|
|
/**
|
|
* @param {OpenLayers.Pixel} viewPortPx
|
|
*
|
|
* @returns An OpenLayers.LonLat which is the passed-in view port
|
|
* OpenLayers.Pixel, translated into lon/lat by GMAPS
|
|
* If gmap is not loaded or not centered, returns null
|
|
* @type OpenLayers.LonLat
|
|
*/
|
|
getLonLatFromViewPortPx: function (viewPortPx) {
|
|
var lonlat = null;
|
|
if ( (this.mapObject != null) &&
|
|
(this.getMapObjectCenter() != null) ) {
|
|
var moPixel = this.getMapObjectPixelFromOLPixel(viewPortPx);
|
|
var moLonLat = this.getMapObjectLonLatFromMapObjectPixel(moPixel)
|
|
lonlat = this.getOLLonLatFromMapObjectLonLat(moLonLat);
|
|
}
|
|
return lonlat;
|
|
},
|
|
|
|
|
|
/**
|
|
* @param {OpenLayers.LonLat} lonlat
|
|
*
|
|
* @returns An OpenLayers.Pixel which is the passed-in OpenLayers.LonLat,
|
|
* translated into view port pixels BY GMAPS
|
|
* If gmap is not loaded or not centered, returns null
|
|
* @type OpenLayers.Pixel
|
|
*/
|
|
getViewPortPxFromLonLat: function (lonlat) {
|
|
var viewPortPx = null;
|
|
if ( (this.mapObject != null) &&
|
|
(this.getMapObjectCenter() != null) ) {
|
|
|
|
var moLonLat = this.getMapObjectLonLatFromOLLonLat(lonlat);
|
|
var moPixel = this.getMapObjectPixelFromMapObjectLonLat(moLonLat)
|
|
|
|
viewPortPx = this.getOLPixelFromMapObjectPixel(moPixel);
|
|
}
|
|
return viewPortPx;
|
|
},
|
|
|
|
/********************************************************/
|
|
/* */
|
|
/* Translation Functions */
|
|
/* */
|
|
/* The following functions translate Map Object and */
|
|
/* OL formats for Pixel, LonLat */
|
|
/* */
|
|
/********************************************************/
|
|
|
|
//
|
|
// TRANSLATION: MapObject LatLng <-> OpenLayers.LonLat
|
|
//
|
|
|
|
/**
|
|
* @param {Object} moLonLat
|
|
*
|
|
* @returns An OpenLayers.LonLat, translated from the passed in
|
|
* MapObject LonLat
|
|
* Returns null if null value is passed in
|
|
* @type OpenLayers.LonLat
|
|
*/
|
|
getOLLonLatFromMapObjectLonLat: function(moLonLat) {
|
|
var olLonLat = null;
|
|
if (moLonLat != null) {
|
|
var lon = this.getLongitudeFromMapObjectLonLat(moLonLat);
|
|
var lat = this.getLatitudeFromMapObjectLonLat(moLonLat);
|
|
olLonLat = new OpenLayers.LonLat(lon, lat);
|
|
}
|
|
return olLonLat;
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.LonLat} olLonLat
|
|
*
|
|
* @returns A MapObject LonLat, translated from the passed in
|
|
* OpenLayers.LonLat
|
|
* Returns null if null value is passed in
|
|
* @type Object
|
|
*/
|
|
getMapObjectLonLatFromOLLonLat: function(olLonLat) {
|
|
var moLatLng = null;
|
|
if (olLonLat != null) {
|
|
moLatLng = this.getMapObjectLonLatFromLonLat(olLonLat.lon,
|
|
olLonLat.lat);
|
|
}
|
|
return moLatLng;
|
|
},
|
|
|
|
|
|
//
|
|
// TRANSLATION: MapObject Pixel <-> OpenLayers.Pixel
|
|
//
|
|
|
|
/**
|
|
* @param {Object} moPixel
|
|
*
|
|
* @returns An OpenLayers.Pixel, translated from the passed in
|
|
* MapObject Pixel
|
|
* Returns null if null value is passed in
|
|
* @type OpenLayers.Pixel
|
|
*/
|
|
getOLPixelFromMapObjectPixel: function(moPixel) {
|
|
var olPixel = null;
|
|
if (moPixel != null) {
|
|
var x = this.getXFromMapObjectPixel(moPixel);
|
|
var y = this.getYFromMapObjectPixel(moPixel);
|
|
olPixel = new OpenLayers.Pixel(x, y);
|
|
}
|
|
return olPixel;
|
|
},
|
|
|
|
/**
|
|
* @param {OpenLayers.Pixel} olPixel
|
|
*
|
|
* @returns A MapObject Pixel, translated from the passed in
|
|
* OpenLayers.Pixel
|
|
* Returns null if null value is passed in
|
|
* @type Object
|
|
*/
|
|
getMapObjectPixelFromOLPixel: function(olPixel) {
|
|
var moPixel = null;
|
|
if (olPixel != null) {
|
|
moPixel = this.getMapObjectPixelFromXY(olPixel.x, olPixel.y);
|
|
}
|
|
return moPixel;
|
|
},
|
|
|
|
/** @final @type String */
|
|
CLASS_NAME: "OpenLayers.Layer.EventPane"
|
|
});
|