天天看點

arcgis for js疊加栅格圖層(Raster Layer)

其實呢,這個問題或許與栅格圖層(Raster Layer)關系并不十分大,也可能所有類型的圖層都有這個問題,我對arcgis尚不十分了解,目前隻在栅格圖層遇到問題,是以先記下來,存疑。

栅格圖層啥問題呢?疊不出來,報錯。

比如,有這麼個地圖服務:

arcgis for js疊加栅格圖層(Raster Layer)

然後想直接疊加其中一個子圖層(可見其類型為栅格圖層)。

arcgis for js疊加栅格圖層(Raster Layer)

代碼如下:

var layer = new ArcGISDynamicMapServiceLayer("http://192.168.0.225:6080/arcgis/HN_test/MapServer/1");
map.addLayer(layer);      

但這樣必報錯。報”400”錯誤,錯誤提示為:不支援的輸出格式。

Error: Output format not supported.
Code: 400      

啥格式?就是 image 格式。arcgis圖層服務輸出的格式有許多種,​​詳見這裡​​

但是,如果隻通路圖層服務的根位址,則圖層可以出來:

var layer = new ArcGISDynamicMapServiceLayer("http://192.168.0.225:6080/arcgis/HN_test/MapServer");//<----------------- 後面沒有“/1”
map.addLayer(layer);      
arcgis for js疊加栅格圖層(Raster Layer)

真奇怪啊,我疊FeatureLayer的時候,都是直接通路子圖層,從來不見有什麼問題。為什麼這裡卻不行,無論是用

ArcGISDynamicMapServiceLayer,
ArcGISImageServiceLayer,
RasterLayer      

還是

ArcGISTiledMapServiceLayer,
FeatureLayer      

都不行。前三個直接報400錯,後兩個沒報錯,但圖層根本出不來。

難道栅格圖層這麼特别?

從周六開始,到今天周二,每天都花了時間去搞這個問題,問了兩個高手,但高手沒空,有一個其實是提到問題答案了,但我沒了解,還是搞不出來。這種問題,到百度上搜,根本無從下手,沒有啥代碼提到栅格圖層的(這也證明其實栅格圖層并不需要用什麼特别的對象來處理)。

後來偶爾看到網上​​有篇文章​​提到通路地圖服務,控制子圖層,我想起年初剛開始搞arcgis時,自己好像也抄過類似的代碼,用于顯示或隐藏不同的圖層。翻出來一看,果然啊,圖層對象有個layerInfos的屬性,這裡面就是其所有子圖層的清單。所有,不僅僅是兒子,還包括孫子及後代。但這個layerInfos加載需要一定的過程,一般在圖層加載完畢的事件中才開始通路。

修改代碼,圖像終于出來了。

arcgis for js疊加栅格圖層(Raster Layer)

處理過程如下:

1、建構動态切片圖層對象

var layer = new ArcGISDynamicMapServiceLayer("http://192.168.0.225:6080/arcgis/rest/services/HN_test/MapServer");      

2、該圖層對象加載完畢後設定子圖層可見屬性

if (layer.loaded) {
    buildSubLayerList(layer);
}
else {
    dojo.connect(layer, "onLoad", buildSubLayerList);
} 

function buildSubLayerList(layer)
    var visible = [];

    dojo.map(layer.layerInfos,function (info, index)
        if(符合條件) visible.push(info.id);
    });

    map.addLayer(layer);//萬事俱備,至此方才将圖層添加到地圖      

繼續閱讀