From cadc54cc4e8682265d395e719fe440c91d771e06 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 9 Apr 2008 15:54:01 +0000 Subject: [PATCH] Fixing panning for odd-sized viewports (broken in r6492). This makes map.getViewPortPxFromLonLat return fractional pixel values. To get integer pixel values, use map.getPixelFromLonLat. A better solution may be possible in the future. r=crschmidt (closes #1503) git-svn-id: http://svn.openlayers.org/trunk/openlayers@6831 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Layer.js | 6 ++++-- lib/OpenLayers/Map.js | 20 +++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 3cf5d7ef4d..f18374d21c 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -997,6 +997,8 @@ OpenLayers.Layer = OpenLayers.Class({ /** * APIMethod: getViewPortPxFromLonLat + * Returns a pixel location given a map location. This method will return + * fractional pixel values. * * Parameters: * lonlat - {} @@ -1011,8 +1013,8 @@ OpenLayers.Layer = OpenLayers.Class({ var resolution = this.map.getResolution(); var extent = this.map.getExtent(); px = new OpenLayers.Pixel( - Math.round(1/resolution * (lonlat.lon - extent.left)), - Math.round(1/resolution * (extent.top - lonlat.lat)) + (1/resolution * (lonlat.lon - extent.left)), + (1/resolution * (extent.top - lonlat.lat)) ); } return px; diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index 2639317132..5362cd826e 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -1593,8 +1593,8 @@ OpenLayers.Map = OpenLayers.Class({ var newPx = this.getViewPortPxFromLonLat(lonlat); if ((originPx != null) && (newPx != null)) { - this.layerContainerDiv.style.left = (originPx.x - newPx.x) + "px"; - this.layerContainerDiv.style.top = (originPx.y - newPx.y) + "px"; + this.layerContainerDiv.style.left = Math.round(originPx.x - newPx.x) + "px"; + this.layerContainerDiv.style.top = Math.round(originPx.y - newPx.y) + "px"; } }, @@ -2022,17 +2022,23 @@ OpenLayers.Map = OpenLayers.Class({ /** * APIMethod: getPixelFromLonLat + * Returns a pixel location given a map location. The map location is + * translated to an integer pixel location (in viewport pixel + * coordinates) by the current base layer. * * Parameters: - * lonlat - {} + * lonlat - {} A map location. * * Returns: * {} An OpenLayers.Pixel corresponding to the - * translated into view port - * pixels by the current base layer. + * translated into view port pixels by the current + * base layer. */ getPixelFromLonLat: function (lonlat) { - return this.getViewPortPxFromLonLat(lonlat); + var px = this.getViewPortPxFromLonLat(lonlat); + px.x = Math.round(px.x); + px.y = Math.round(px.y); + return px; }, @@ -2116,7 +2122,7 @@ OpenLayers.Map = OpenLayers.Class({ */ getLayerPxFromLonLat: function (lonlat) { //adjust for displacement of layerContainerDiv - var px = this.getViewPortPxFromLonLat(lonlat); + var px = this.getPixelFromLonLat(lonlat); return this.getLayerPxFromViewPortPx(px); },