Javascript 开放层重投影

Javascript 开放层重投影,javascript,openlayers,projection,Javascript,Openlayers,Projection,我用openLayers展示了一大堆乌拉圭的图层,这些图层来自WMS。。我试图添加一个选项,您可以使用两个不同的基础层。 其中之一是谷歌卫星层,位于球形墨卡托900913中。。然后我有一张乌拉圭地图,在UTM21S 32721中。。 我的问题似乎是当我试图改变基础层。我在展示谷歌卫星时添加到地图上的wms图层(例如乌拉圭路线)似乎消失了。当我尝试另一种方式时也会发生同样的事情,在UTM21上加载层并切换到谷歌卫星。。 为了解决这个问题,我试着倾听更改基础层的事件。。代码如下: function

我用openLayers展示了一大堆乌拉圭的图层,这些图层来自WMS。。我试图添加一个选项,您可以使用两个不同的基础层。 其中之一是谷歌卫星层,位于球形墨卡托900913中。。然后我有一张乌拉圭地图,在UTM21S 32721中。。 我的问题似乎是当我试图改变基础层。我在展示谷歌卫星时添加到地图上的wms图层(例如乌拉圭路线)似乎消失了。当我尝试另一种方式时也会发生同样的事情,在UTM21上加载层并切换到谷歌卫星。。 为了解决这个问题,我试着倾听更改基础层的事件。。代码如下:

function mapBaseLayerChanged(event) {
    var pseudo = new OpenLayers.Projection('EPSG:900913');
    var utm21s = new OpenLayers.Projection('EPSG:32721');
    var baseLayer = "EPSG:900913";
    if(event.layer.name == "Google Satellite"){
        map.projection = pseudo;
        map.maxExtent = new OpenLayers.Bounds(-6522200,-4170000,-5890000,-3510000);
    }else{
        baseLayer = "EPSG:32721";
        map.projection = utm21s;
        map.maxExtent = new OpenLayers.Bounds(300000, 6100000, 900000, 6750000);
    }
    for(i = 0 ; i < map.layers.length; i++){
        if (map.layers[i].visibility && !map.layers[i].isBaseLayer && !map.layers[i].isVector) { // Refresh visible non base  
            if(baseLayer == "EPSG:900913"){
                map.layers[i].projection = pseudo;
            }else{
                map.layers[i].projection = utm21s;
            }
            map.layers[i].redraw(true); // Other layer  
            }  
        alert(map.layers[i].projection);
    }
    //alert(map.getProjection());
    map.zoomToMaxExtent();    
}
将参数srs更改为projection,这就成功了。。现在该函数的代码为:

function mapBaseLayerChanged(event) {
    var pseudo = new OpenLayers.Projection('EPSG:900913');
    var utm21s = new OpenLayers.Projection('EPSG:32721');
    var baseLayer = "EPSG:900913";
    if(event.layer.name == "Google Satellite"){
        map.projection = pseudo;
        map.maxExtent = new OpenLayers.Bounds(-6522200,-4170000,-5890000,-3510000);
    }else{
        baseLayer = "EPSG:32721";
        map.projection = utm21s;
        map.maxExtent = new OpenLayers.Bounds(300000, 6100000, 900000, 6750000);
    }
    for(i = 0 ; i < map.layers.length; i++){
        if (map.layers[i].visibility && !map.layers[i].isBaseLayer && !map.layers[i].isVector) { // Refresh visible non base  
            if(baseLayer == "EPSG:900913"){
                map.layers[i].addOptions({
                    projection: pseudo,
                    format:'png',
                    trnsparent: true,
                },true);
            }else{
                map.layers[i].addOptions({
                    projection: utm21s,
                    format:'png',
                    trnsparent: true,
                },true);
            }
        }  
    }
    map.zoomToMaxExtent();    
}
函数mapBaseLayerChanged(事件){
var pseudo=新的OpenLayers.Projection('EPSG:900913');
var utm21s=新的OpenLayers.Projection('EPSG:32721');
var baseLayer=“EPSG:900913”;
if(event.layer.name==“谷歌卫星”){
map.projection=pseudo;
map.maxExtent=新的OpenLayers.Bounds(-6522200,-4170000,-5890000,-3510000);
}否则{
baseLayer=“EPSG:32721”;
map.projection=utm21s;
map.maxExtent=新的OpenLayers.Bounds(3000006100009000006750000);
}
对于(i=0;i
由对问题的评论组成

如果使用的投影不是EPSG:4326或EPSG:900913(默认支持),则必须在OpenLayers之前包含。此库将处理投影之间的所有转换。
更改层中的投影不是一件小事,类中有很多东西也与之耦合。可能您的方法不起作用,因为在设置属性后,仍然有一些对旧投影的引用。如果使用,您应该能够有效且安全地设置图层上的属性。

是否包含Proj4JS?如果我没记错的话,OpenLayers只支持EPSG:900913和WGS:84,如果你使用其他投影,你必须包括Proj4JS。谢谢你的回答!是的,投影已经被添加,否则我的图层将无法显示。如果使用,它可以工作吗?也许这初始化了所有需要的东西。没什么,我更新了帖子。把srs改成了投影,效果很好。。。谢谢maenu!!
function mapBaseLayerChanged(event) {
    var pseudo = new OpenLayers.Projection('EPSG:900913');
    var utm21s = new OpenLayers.Projection('EPSG:32721');
    var baseLayer = "EPSG:900913";
    if(event.layer.name == "Google Satellite"){
        map.projection = pseudo;
        map.maxExtent = new OpenLayers.Bounds(-6522200,-4170000,-5890000,-3510000);
    }else{
        baseLayer = "EPSG:32721";
        map.projection = utm21s;
        map.maxExtent = new OpenLayers.Bounds(300000, 6100000, 900000, 6750000);
    }
    for(i = 0 ; i < map.layers.length; i++){
        if (map.layers[i].visibility && !map.layers[i].isBaseLayer && !map.layers[i].isVector) { // Refresh visible non base  
            if(baseLayer == "EPSG:900913"){
                map.layers[i].addOptions({
                    projection: pseudo,
                    format:'png',
                    trnsparent: true,
                },true);
            }else{
                map.layers[i].addOptions({
                    projection: utm21s,
                    format:'png',
                    trnsparent: true,
                },true);
            }
        }  
    }
    map.zoomToMaxExtent();    
}