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
This commit is contained in:
Tim Schaub
2008-04-09 15:54:01 +00:00
parent d2079fb927
commit cadc54cc4e
2 changed files with 17 additions and 9 deletions

View File

@@ -997,6 +997,8 @@ OpenLayers.Layer = OpenLayers.Class({
/** /**
* APIMethod: getViewPortPxFromLonLat * APIMethod: getViewPortPxFromLonLat
* Returns a pixel location given a map location. This method will return
* fractional pixel values.
* *
* Parameters: * Parameters:
* lonlat - {<OpenLayers.LonLat>} * lonlat - {<OpenLayers.LonLat>}
@@ -1011,8 +1013,8 @@ OpenLayers.Layer = OpenLayers.Class({
var resolution = this.map.getResolution(); var resolution = this.map.getResolution();
var extent = this.map.getExtent(); var extent = this.map.getExtent();
px = new OpenLayers.Pixel( px = new OpenLayers.Pixel(
Math.round(1/resolution * (lonlat.lon - extent.left)), (1/resolution * (lonlat.lon - extent.left)),
Math.round(1/resolution * (extent.top - lonlat.lat)) (1/resolution * (extent.top - lonlat.lat))
); );
} }
return px; return px;

View File

@@ -1593,8 +1593,8 @@ OpenLayers.Map = OpenLayers.Class({
var newPx = this.getViewPortPxFromLonLat(lonlat); var newPx = this.getViewPortPxFromLonLat(lonlat);
if ((originPx != null) && (newPx != null)) { if ((originPx != null) && (newPx != null)) {
this.layerContainerDiv.style.left = (originPx.x - newPx.x) + "px"; this.layerContainerDiv.style.left = Math.round(originPx.x - newPx.x) + "px";
this.layerContainerDiv.style.top = (originPx.y - newPx.y) + "px"; this.layerContainerDiv.style.top = Math.round(originPx.y - newPx.y) + "px";
} }
}, },
@@ -2022,17 +2022,23 @@ OpenLayers.Map = OpenLayers.Class({
/** /**
* APIMethod: getPixelFromLonLat * 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: * Parameters:
* lonlat - {<OpenLayers.LonLat>} * lonlat - {<OpenLayers.LonLat>} A map location.
* *
* Returns: * Returns:
* {<OpenLayers.Pixel>} An OpenLayers.Pixel corresponding to the * {<OpenLayers.Pixel>} An OpenLayers.Pixel corresponding to the
* <OpenLayers.LonLat> translated into view port * <OpenLayers.LonLat> translated into view port pixels by the current
* pixels by the current base layer. * base layer.
*/ */
getPixelFromLonLat: function (lonlat) { 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) { getLayerPxFromLonLat: function (lonlat) {
//adjust for displacement of layerContainerDiv //adjust for displacement of layerContainerDiv
var px = this.getViewPortPxFromLonLat(lonlat); var px = this.getPixelFromLonLat(lonlat);
return this.getLayerPxFromViewPortPx(px); return this.getLayerPxFromViewPortPx(px);
}, },