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:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user