also consider the resolutions array if no zoomOffset is provided. r=bartvde (closes #3485)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@12357 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -297,7 +297,10 @@ OpenLayers.Layer = OpenLayers.Class({
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* APIProperty: wrapDateLine
|
* APIProperty: wrapDateLine
|
||||||
* {Boolean} #487 for more info.
|
* {Boolean} Wraps the world at the international dateline, so the map can
|
||||||
|
* be panned infinitely in longitudinal direction. Only use this on the
|
||||||
|
* base layer, and only if the layer's maxExtent equals the world bounds.
|
||||||
|
* #487 for more info.
|
||||||
*/
|
*/
|
||||||
wrapDateLine: false,
|
wrapDateLine: false,
|
||||||
|
|
||||||
|
|||||||
@@ -247,7 +247,11 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
|
|||||||
// *partially* contained by our tiles (IE user has
|
// *partially* contained by our tiles (IE user has
|
||||||
// programmatically panned to the other side of the earth)
|
// programmatically panned to the other side of the earth)
|
||||||
// then we want to reTile (thus, partial true).
|
// then we want to reTile (thus, partial true).
|
||||||
//
|
//
|
||||||
|
var maxExtent = this.map.getMaxExtent(),
|
||||||
|
bl = new OpenLayers.LonLat(bounds.left, bounds.bottom).wrapDateLine(maxExtent),
|
||||||
|
tr = new OpenLayers.LonLat(bounds.right, bounds.top).wrapDateLine(maxExtent);
|
||||||
|
bounds = new OpenLayers.Bounds(bl.lon, bl.lat, tr.lon, tr.lat);
|
||||||
if (forceReTile || !tilesBounds.containsBounds(bounds, true)) {
|
if (forceReTile || !tilesBounds.containsBounds(bounds, true)) {
|
||||||
this.initGriddedTiles(bounds);
|
this.initGriddedTiles(bounds);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -144,8 +144,9 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, {
|
|||||||
(res * this.tileSize.w));
|
(res * this.tileSize.w));
|
||||||
var y = Math.round((this.maxExtent.top - bounds.top) /
|
var y = Math.round((this.maxExtent.top - bounds.top) /
|
||||||
(res * this.tileSize.h));
|
(res * this.tileSize.h));
|
||||||
var z = this.serverResolutions != null ?
|
var resolutions = this.serverResolutions || this.resolutions;
|
||||||
OpenLayers.Util.indexOf(this.serverResolutions, res) :
|
var z = this.zoomOffset == 0 ?
|
||||||
|
OpenLayers.Util.indexOf(resolutions, res) :
|
||||||
this.map.getZoom() + this.zoomOffset;
|
this.map.getZoom() + this.zoomOffset;
|
||||||
|
|
||||||
var limit = Math.pow(2, z);
|
var limit = Math.pow(2, z);
|
||||||
|
|||||||
@@ -133,6 +133,14 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
|||||||
this.translate(0, 0);
|
this.translate(0, 0);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
var maxExtent = this.map.getMaxExtent(),
|
||||||
|
width = maxExtent.getWidth() / resolution;
|
||||||
|
if (extent.left < maxExtent.left) {
|
||||||
|
extent.left += width;
|
||||||
|
}
|
||||||
|
if (extent.right > maxExtent.right) {
|
||||||
|
extent.left -= width;
|
||||||
|
}
|
||||||
var inRange = this.translate(left - this.left, top - this.top);
|
var inRange = this.translate(left - this.left, top - this.top);
|
||||||
if (!inRange) {
|
if (!inRange) {
|
||||||
// recenter the coordinate system
|
// recenter the coordinate system
|
||||||
|
|||||||
@@ -22,18 +22,29 @@
|
|||||||
var map;
|
var map;
|
||||||
|
|
||||||
function init(){
|
function init(){
|
||||||
map = new OpenLayers.Map('map');
|
var maxExtent = new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508),
|
||||||
|
maxResolution = 156543.0339;
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
projection: new OpenLayers.Projection("EPSG:900913"),
|
||||||
|
displayProjection: new OpenLayers.Projection("EPSG:4326"),
|
||||||
|
units: "m",
|
||||||
|
numZoomLevels: 18,
|
||||||
|
maxResolution: maxResolution,
|
||||||
|
maxExtent: maxExtent
|
||||||
|
};
|
||||||
|
map = new OpenLayers.Map('map', options);
|
||||||
|
|
||||||
var gmap = new OpenLayers.Layer.Google(
|
var dummy = new OpenLayers.Layer(
|
||||||
"Google Streets",
|
"dummy",
|
||||||
{sphericalMercator: true}
|
{isBaseLayer: true, wrapDateLine: true}
|
||||||
);
|
);
|
||||||
var vector = new OpenLayers.Layer.Vector("Editable Vectors");
|
var vector = new OpenLayers.Layer.Vector("Editable Vectors");
|
||||||
|
|
||||||
map.addLayers([gmap, vector]);
|
map.addLayers([dummy, vector]);
|
||||||
map.addControl(new OpenLayers.Control.EditingToolbar(vector));
|
map.addControl(new OpenLayers.Control.EditingToolbar(vector));
|
||||||
|
|
||||||
var extent = new OpenLayers.Bounds(-24225034.496992, -11368938.517442, -14206280.326992, -1350184.3474418);
|
var extent = new OpenLayers.Bounds(15849982.183008, -11368938.517442, -14206280.326992, -1350184.3474418);
|
||||||
map.zoomToExtent(extent);
|
map.zoomToExtent(extent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user