diff --git a/lib/OpenLayers/Handler/Path.js b/lib/OpenLayers/Handler/Path.js index 3458be9688..802d36d1d6 100644 --- a/lib/OpenLayers/Handler/Path.js +++ b/lib/OpenLayers/Handler/Path.js @@ -79,7 +79,9 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, { */ destroyFeature: function() { OpenLayers.Handler.Point.prototype.destroyFeature.apply(this); - this.line.destroy(); + if(this.line) { + this.line.destroy(); + } this.line = null; }, diff --git a/lib/OpenLayers/Handler/Point.js b/lib/OpenLayers/Handler/Point.js index c31b587980..1efe3a413f 100644 --- a/lib/OpenLayers/Handler/Point.js +++ b/lib/OpenLayers/Handler/Point.js @@ -138,7 +138,9 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, { * Destroy the temporary geometries */ destroyFeature: function() { - this.point.destroy(); + if(this.point) { + this.point.destroy(); + } this.point = null; }, diff --git a/lib/OpenLayers/Handler/Polygon.js b/lib/OpenLayers/Handler/Polygon.js index c959aed30a..3f5d9cb4a0 100644 --- a/lib/OpenLayers/Handler/Polygon.js +++ b/lib/OpenLayers/Handler/Polygon.js @@ -65,7 +65,9 @@ OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, { */ destroyFeature: function() { OpenLayers.Handler.Path.prototype.destroyFeature.apply(this); - this.polygon.destroy(); + if(this.polygon) { + this.polygon.destroy(); + } this.polygon = null; }, diff --git a/lib/OpenLayers/Layer/EventPane.js b/lib/OpenLayers/Layer/EventPane.js index 0a209373ab..f184cfcd85 100644 --- a/lib/OpenLayers/Layer/EventPane.js +++ b/lib/OpenLayers/Layer/EventPane.js @@ -237,8 +237,6 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, { if ( !(newCenter.equals(oldCenter)) || !(newZoom == oldZoom) ) { - var center = this.getMapObjectLonLatFromOLLonLat(newCenter); - if (dragging && this.dragPanMapObject && this.smoothDragPan) { var resolution = this.map.getResolution(); @@ -246,6 +244,7 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, { var dY = (newCenter.lat - oldCenter.lat) / resolution; this.dragPanMapObject(dX, dY); } else { + var center = this.getMapObjectLonLatFromOLLonLat(newCenter); var zoom = this.getMapObjectZoomFromOLZoom(newZoom); this.setMapObjectCenter(center, zoom, dragging); } @@ -280,6 +279,18 @@ OpenLayers.Layer.EventPane = OpenLayers.Class(OpenLayers.Layer, { var moPixel = this.getMapObjectPixelFromOLPixel(viewPortPx); var moLonLat = this.getMapObjectLonLatFromMapObjectPixel(moPixel); lonlat = this.getOLLonLatFromMapObjectLonLat(moLonLat); + var xrem = this.map.size.w % 2; + var yrem = this.map.size.h % 2; + if(xrem != 0 || yrem != 0) { + // odd sized viewport + var olPx = viewPortPx.add(xrem, yrem); + var moPx = this.getMapObjectPixelFromOLPixel(olPx); + var moLoc = this.getMapObjectLonLatFromMapObjectPixel(moPx); + var olLoc = this.getOLLonLatFromMapObjectLonLat(moLoc); + // adjust by half a pixel in odd dimension(s) + lonlat.lon += (olLoc.lon - lonlat.lon) / 2; + lonlat.lat += (olLoc.lat - lonlat.lat) / 2; + } } return lonlat; },