1. 程式人生 > >arcgis jsapi介面入門系列(2):圖層基礎操作

arcgis jsapi介面入門系列(2):圖層基礎操作

 

        //圖層相關demo
        layerFun: function () {
            //獲取地圖的所有圖層(不包括的圖層型別:底圖圖層(basemaps))
            let layers = this.map.layers;
            //獲取地圖的所有圖層(包括所有圖層型別)
            let alllayers = this.map.allLayers;
            //PS:以上的型別都是Collection<Layer>(看起來像java的泛型list),不是js原生的東西,詳細用法請看arcgis jsapi官方文件

            //傳統遍歷方法
            for (let i = 0; i < layers.length; i++) {
                let layer3 = layers.getItemAt(i);
            }

            //Collection支援的通用查詢方法,用法類似lambda表示式
            //根據條件查詢指定圖層(只返回一個)
            var layer2 = layers.find(function (layer) {
                return layer.title === "US Counties";
            });
            //根據條件查詢指定圖層(返回多個,型別也是Collection)
            var layers4 = layers.filter(function (layer) {
                return layer.title === "US Counties";
            });

            //Collection轉js array
            let layers5 = layers.toArray();

            //根據圖層id獲取圖層
            let layer1 = this.map.findLayerById("www");
            //根據索引獲取圖層
            let layer = layers.getItemAt(0);

            //獲取圖層id
            //PS:圖層id是圖層的唯一標識,string型別。在新建圖層時可以指定,如果不指定會生成隨機數,以保證唯一
            let layerId = layer.id;
            //圖層範圍
            let fullExtent = layer.fullExtent;
            //圖層顯示比例尺範圍
            let maxScale = layer.maxScale;
            let minScale = layer.minScale;
            //圖層顯示的透明度,值為0-1,1為不透明
            let opacity = layer.opacity;
            //圖層標題
            let title = layer.title;
            //圖層型別
            let type = layer.type;
            //圖層是否顯示,型別bool,同時可設定圖層是否顯示
            let visible = layer.visible;

            //新建圖層並把圖層新增到地圖
            //此處以圖形圖層(GraphicsLayer)為例
            layer = new this.apiInstance.GraphicsLayer({
                //空間參考,一般要跟地圖的一樣
                spatialReference: this.mapView.spatialReference,
            });
            //圖層新增到地圖
            this.map.add(layer);
            //新增圖層時也可以指定圖層索引,預設會把圖層新增到最後一位,也就是索引的最大值,圖層索引越大越在上面,上面的圖層會擋住下面的
            //另外在新增圖層後也可以改變圖層索引,是Map的reorder方法,具體請看官方文件
            this.map.add(layer, 0);

            //從地圖刪除圖層
            this.map.remove(layer1);
            //從地圖刪除所有圖層
            this.map.removeAll();

            //地圖的圖層事件監聽
            //PS:原則上每個map只監聽一次
            alllayers.on("change", function (event) {
                //新增圖層事件
                console.log("Layer added: ", event.added);
                //刪除圖層事件
                console.log("Layer removed: ", event.removed);
                //移動圖層(順序)事件
                console.log("Layer moved: ", event.moved);
            });
        },