Javascript OpenLayers-拒绝最大范围缩放的地图

Javascript OpenLayers-拒绝最大范围缩放的地图,javascript,openlayers,Javascript,Openlayers,如果你一直在修改OpenLayers的一些代码,一个副作用是Google Street的基础层不再显示一个合理的地图,而是缩小到一个3倍的世界视图。我在代码中加入的任何api建议都不能起作用 同样的代码——但经过重新排列——在过去可以正常工作(但不幸的是,不允许更大的画面正常工作) 我对所有这些都是新手,已经走出了我的舒适区,因此,如果能检查一下代码的合理性,我将不胜感激: function ProfileMap(mapName) { this.name = ma

如果你一直在修改OpenLayers的一些代码,一个副作用是Google Street的基础层不再显示一个合理的地图,而是缩小到一个3倍的世界视图。我在代码中加入的任何api建议都不能起作用

同样的代码——但经过重新排列——在过去可以正常工作(但不幸的是,不允许更大的画面正常工作)

我对所有这些都是新手,已经走出了我的舒适区,因此,如果能检查一下代码的合理性,我将不胜感激:

    function ProfileMap(mapName)
    {
        this.name = mapName;
        this.layers = [];

        // define Map options
        var mapoptions = {
                projection: mercator,
                units: "m",
                maxExtent: world
        };

        // define Base Layer
        var baselayer = new OpenLayers.Layer.Google(
                "Google Streets", 
                {numZoomLevels: 20, spehericalMercator: 2}
        );  


        this.init = function(mapdiv, keydiv)
        {
            var layerswitcher = new OpenLayers.Control.LayerSwitcher(
                    {div: document.getElementById(keydiv)}
            );      

            this.map = new OpenLayers.Map(mapdiv, mapoptions);
            this.map.addLayer(baselayer);
            this.map.setCenter(mapcenter);
            this.map.zoomToMaxExtent();

        };

        this.addMapLayer = function(layerName)
        {
            var layerid = this.layers.length;
            this.layers[layerid] = new OpenLayers.Layer.Markers(layerName);
            this.map.addLayer(this.layers[layerid]);
        }

    }


    // Map actually created by a call to this function
    function createMap(mapName, div, keydiv, mapLayers)
    {
        mapName = new ProfileMap(mapName);
        mapName.init(div, keydiv);
        for(var i=0; i < mapLayers.length; i++)
        {
            mapName.addMapLayer(mapLayers[i]);
        }

    }
函数配置文件映射(mapName)
{
this.name=mapName;
this.layers=[];
//定义地图选项
变量映射选项={
投影:墨卡托,
单位:“m”,
maxExtent:世界
};
//定义基础层
var baselayer=new OpenLayers.Layer.Google(
“谷歌街”,
{numZoomLevels:20,spehericalMercator:2}
);  
this.init=函数(mapdiv,keydiv)
{
var layerswitcher=new OpenLayers.Control.layerswitcher(
{div:document.getElementById(keydiv)}
);      
this.map=newOpenLayers.map(mapdiv,mapoptions);
this.map.addLayer(baselayer);
this.map.setCenter(mapcenter);
this.map.zoomToMaxExtent();
};
this.addMapLayer=函数(layerName)
{
var layerid=this.layers.length;
this.layers[layerid]=新的OpenLayers.Layer.Markers(layerName);
this.map.addLayer(this.layers[layerid]);
}
}
//通过调用此函数实际创建的映射
函数createMap(mapName、div、keydiv、mapLayers)
{
mapName=新的ProfileMap(mapName);
init(div,keydiv);
对于(var i=0;i
有一件事可能是您拼错了SphereCalmercator。它还接受布尔值,而不是数字

sphericalMercator: true

更新#1: 请更改此项:

var mapoptions = {
    projection: mercator,
    units: "m",
    maxExtent: world
};
为此:

var mapoptions = {
    projection: new OpenLayers.Projection("EPSG:900913"),
    units: "m",
    maxExtent: world
};

谢谢你发现了。我在代码中更改了它,但似乎没有解决问题。奇怪的是,这些错误是从工作代码中剪切粘贴的@克里斯汀·梅恩:有趣的是,工作代码是一个相对的东西。好的,试试我的更新。再次感谢。我试过了,没有改变。我注意到3倍世界宽度与div的宽度大小相匹配。div的高度大于1倍世界高度。这可能与地图周围的样式有关,还是应该没有区别?告诉你真相,我在理解或想象你的问题方面有困难。你能把你的代码放在一个公共的URL中,这样我们就可以看到到底发生了什么?好吧-我可能需要一段时间才能从系统的其余部分中删除所有的包含项,但是请耐心等待,我会在我完成后通知你,你能不能在一个公共的URL上公开你的页面,这样我们就可以测试它,更好地了解问题是什么?或这将使你的问题更快地得到解决。