js加载地图不显示

0 投票
IClient 7c for js 加载地图时图层不显示,手工拖动或者resize页面之后才显示图层。但是调试地图和图层都已经加载上了。不知道这是为什么?
3月 24, 2017 分类:  1136次浏览 | 用户: hnsw 才疏学浅 (18 分)

1个回答

0 投票

最可能的原因是
服务端的图层都需要异步加载也就是:layer.events.on({"layerInitialized":addLayer});
多个,比如第二个,需要在addLayer方法里再来 layer2.events.on({"layerInitialized":addLayer2});
以此类推

如果不是,请给出更多必要信息,也可以贴代码

3月 24, 2017 用户: 毛瑞 名扬四海 (1,780 分)
不是这个意思,调试查看到地图已经加载,图层也加载上了,只是页面上地图图层不显示,一片空白,需要手工拖动一下才能显示出来
代码片段如下:

var map, layer;

function init(){

map = new SuperMap.Map("map",{controls:[
         new SuperMap.Control.Navigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            })
     ]});

layer= new SuperMap.Layer.TiledDynamicRESTLayer("World", url, null,{maxResolution:"auto",isBaseLayer:true});
     layer.events.on({"layerInitialized":addLayer});

}

function addLayer(){
    map.addLayer(layer);

}

都是最基本的地图加载,不知道哪里出了问题
先检查所有服务端图层是不是都是异步加载,第二个不异步加载也能显示,但是会出各种问题,比如歪,比如放大缩小拖拽才出来

若服务端图层都异步加载了,那么什么图层出现了这个现象?
只有一个图层?
那有没有设置初始化显示中心点?
比如:
map.setCenter(new SuperMap.LonLat(0, 0), 0);
具体中心点坐标视地图定
只有一个服务端图层,异步加载,调试图层已经加载上了,就是在界面上不显示
有设置地图中心点,先加载layer,再设置地图中心点
你贴的代码没看到,一般是在map.addLayer(layer);这句话之后(异步执行的这个方法,添加图层后设置显示范围)

比如:
function addLayer(){
    map.addLayer(layer);
map.setCenter(new SuperMap.LonLat(0, 0), 0);
}
有的,有设置中心点,代码里没贴。地图中心点应该也起作用了,因为地图初始化以后虽然不显示,但是只要鼠标操作一下地图显示了,就在设置的中心点位置
其实这是完整的addlayer,我删减错了,没把设置中心点加上

function addLayer(){
    map.addLayer(layer);
//    map.addLayers([layer,diaodutaiLayer,labelLayer,vectorLayer,textlayer]);
    map.addControl(overviewmap);
    map.addControl(scaleline);
    $('.smControlScaleLineBottom').remove();
    //显示地图范围
    var pointsDc = new Array();
    pointsDc["01"] = new SuperMap.LonLat(14085815.218431087,5748737.1532149082);// ha'er'bin
    pointsDc["02"] = new SuperMap.LonLat(13740225.751694713,5131825.048466525);// shenyang
    pointsDc["03"] = new SuperMap.LonLat(12958399.468188491,4852082.4397516353);// beijing
    pointsDc["04"] = new SuperMap.LonLat(12439816.84109159,4989133.2760516237);// huhehaote
    pointsDc["05"] = new SuperMap.LonLat(12648711.539108366,4129580.4299638253);// zhengzhou
    pointsDc["06"] = new SuperMap.LonLat(13023822.823483624,4392550.3511899831);// jinan
    pointsDc["07"] = new SuperMap.LonLat(13522421.598232297,3662664.9470039792);// shanghai
    pointsDc["08"] = new SuperMap.LonLat(12897325.921996106,3335442.6737730796);// nanchang
    pointsDc["09"] = new SuperMap.LonLat(12608585.426776512,2647632.0467386306);// guangzhou
    pointsDc["10"] = new SuperMap.LonLat(12063305.714119606,2609831.4596475591);// nanning
    pointsDc["11"] = new SuperMap.LonLat(11584427.29848445,3588485.9858257659);// chengdu
    pointsDc["12"] = new SuperMap.LonLat(11434983.553762261,2880412.4221699946);// kunming
    pointsDc["13"] = new SuperMap.LonLat(11558788.638642909,4309054.6188384835);// lanzhou
    pointsDc["14"] = new SuperMap.LonLat(9753529.6959661245,5438664.0468437485);// wulumuqi
    pointsDc["15"] = new SuperMap.LonLat(11329846.190890191,4385881.9050050164);// qingzang
    pointsDc["16"] = new SuperMap.LonLat(12528976.294811118,4561155.5381937828);// taiyuan
    pointsDc["17"] = new SuperMap.LonLat(12724416.807851126,3579983.92343357);// wuhan
    pointsDc["18"] = new SuperMap.LonLat(12127622.331037272,4064410.4913610248);// xi'an
    
    if($.cookie("supermap_lon")&&$.cookie("supermap_lat")){
         map.setCenter(new SuperMap.LonLat($.cookie("supermap_lon"), $.cookie("supermap_lat")), 5);
         return;
    }else{
        if(currUser.DEPID!=null&&currUser.DEPID.substr(0,2)!="00"&&currUser.DEPID.substr(0,2)!="99"){
            var s = currUser.DEPID.substr(0,2);
            map.setCenter(pointsDc[s],5,true,true);
            return;
        }
    }
    map.setCenter(new SuperMap.LonLat(12009634.286396, 4258716.5813769),1);
   
}

那是放什么框架里了么?
或者放iFrame里了?
实在不行来个手动的的办法吧
map.updateSize()
不行再map.panTo()等

...