使用超图功能(二)

书接上回

一加载服务

                /**
                 * 加载scp
                 * @param model url:地址,name:名称,appid:token
                 */
                loadSCP: function (model) {
                    let entity = null;
                    if (model.appid) {
                        entity = {
                            name: model.name,
                            cullEnabled: false,
                            MinHeight: 30,
                            customRequestHeaders: {appid: model.appid}
                        }
                    } else {
                        entity = {
                            name: model.name,
                            MinHeight: 30,
                            cullEnabled: false
                        }
                    }
                    let scpPromise = supperMap.scene.addS3MTilesLayerByScp(model.url, entity)
                    Cesium.when.all([scpPromise], function (layers) {
                        layers.forEach(function (layer) {
                            layer._visibleDistanceMax = 2000;
                        });
                    }, function (e) {
                        if (supperMap.widget._showRenderLoopErrors) {
                            var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
                            supperMap.widget.showErrorPanel(title, undefined, e);
                        }
                    });
                },

                /**
                 * 移除scp
                 * @param name
                 */
                removeScp: function (name) {
                    let layers = window.supperMap.scene.layers.layerQueue;
                    if (layers && layers.length > 0) {
                        // console.log(name)
                        layers.forEach(item => {
                            // console.log(item)

                            if (item.name == name) {
                                item.style3D.fillForeColor.alpha = parseFloat(0);
                            }
                        })
                    }
                },

                /**
                 * 加载3dtiles
                 * @param model {模型地址:modelUrl,模型位置:cameraPosition,模型俯仰角:cameraOrientation}
                 */
                load3Dtiles: function (url, func) {
                    // var tileset=supperMap.viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
                    //     url:url
                    //
                    // }))
                    // console.log(tileset)
                    try {
                        //添加S3M图层服务
                        var promise = supperMap.scene.open(url);
                        Cesium.when(promise, function (layers) {
                            if (func) {
                                func(layers);
                            }
                        }, function (e) {
                            if (supperMap.widget._showRenderLoopErrors) {
                                var title = '渲染时发生错误,已停止渲染。';
                                supperMap.widget.showErrorPanel(title, undefined, e);
                            }
                        });
                    } catch (e) {
                        if (supperMap.widget._showRenderLoopErrors) {
                            var title = '渲染时发生错误,已停止渲染。';
                            supperMap.widget.showErrorPanel(title, undefined, e);
                        }
                    }

                },

                /**
                 * 移除3dtiles
                 */
                remove3Dtiles: function (url) {
                    for (let i = 0; i < supperMap.viewer.scene.primitives._primitives.length; i++) {
                        // supperMap.viewer.scene.primitives._primitives[i].show=false;
                        supperMap.viewer.scene.primitives._primitives[i]._context._clearColor.alpha = 0
                        supperMap.viewer.scene.primitives._primitives[i]._visible = true
                    }
                    console.log(supperMap.viewer.scene.primitives._primitives[0]._visible = true);
                },

                /**
                 * 加载wfs
                 * @param url
                 */
                loadWFS: function (url, id) {
                    var wfsKist = []
                    $.ajax({
                        url: url,
                        async: false,           //改为同步
                        success: function (returnMap) {
                            returnMap.features.forEach(item => {
                                switch (item.geometry.type) {
                                    case 'Point':
                                        let entity = {
                                            position: supperMap.Cesium.Cartesian3.fromDegrees(Number(item.geometry.coordinates[0]), Number(item.geometry.coordinates[1]), 0),
                                            billboard: {
                                                image: '../static/images/icons/binancs.png',
                                                width: 30,
                                                height: 40,
                                            },
                                            name: '',
                                            id: item.id
                                        }

                                        wfsKist.push(entity.id);
                                        // supperMap.wfsList.push(entity);
                                        supperMap.viewer.entities.add(entity);
                                        break;
                                    case 'Polygon':
                                        let list=[];
                                        item.geometry.coordinates[0].forEach(item=>{
                                            list.push(item[0]);
                                            list.push(item[1]);
                                        });
                                        try {
                                            let polygonId=supperMap.createPolygon(list,1,'#afca1a');
                                            wfsKist.push(polygonId);
                                        }catch (e) {
                                            console.log(e)
                                        }
                                        break;
                                    case 'LineString':
                                        item.geometry.coordinates.forEach(position=>{

                                        });
                                        for(let i=1;i<item.geometry.coordinates.length;i++){
                                            let polylineId=supperMap.createPolyLine(new Cesium.Cartesian3.fromDegrees(item.geometry.coordinates[i-1][0], item.geometry.coordinates[i-1][1], 2),new Cesium.Cartesian3.fromDegrees(item.geometry.coordinates[i][0], item.geometry.coordinates[i][1], 2));
                                            wfsKist.push(polylineId);
                                        }
                                        break;
                                    default :
                                        console.log(item)
                                        break;
                                }

                            });
                        },
                        error:function(){
                            console.log(e)
                        },
                    });
                    wfsKist.push(id)
                    window.treeService.localTree.wfsKists.push(wfsKist);
                },

                /**
                 * 移出WFS
                 * @param url
                 */
                removeWFS: function (id) {
                    if (window.treeService.localTree.wfsKists.length > 0) {
                        console.log(window.treeService.localTree.wfsKists)
                        for (var i = 0; i < window.treeService.localTree.wfsKists.length; i++) {
                            console.log(window.treeService.localTree.wfsKists[i][window.treeService.localTree.wfsKists[i].length - 1])
                            if (window.treeService.localTree.wfsKists[i][window.treeService.localTree.wfsKists[i].length - 1] == id) {
                                for (var j = 0; j < window.treeService.localTree.wfsKists[i].length; j++) {
                                    console.log(window.treeService.localTree.wfsKists[i][j]);
                                    window.supperMap.removeEntity(window.treeService.localTree.wfsKists[i][j]);
                                }
                            }
                        }
                    }


                },

                /**
                 * 加载wms
                 */
                loadWMS: function (url, viewFunc) {
                    let wmsProvider = null;
                    $.ajax({
                        url: url,
                        async: false,
                        success: function (response) {
                            let imageryLayers = supperMap.viewer.imageryLayers;
                            let obj = (JSON.parse(convertToJSON(response))).WMT_MS_Capabilities;
                            let list = [];
                            findWmsLayerList(obj.Capability, list);
                            wmsProvider = new Cesium.WebMapServiceImageryProvider({
                                url: url,
                                layers: list,
                                proxy: new Cesium.DefaultProxy('/proxy/'),
                                parameters: {
                                    service: 'WMS',
                                    format: 'image/png',
                                    transparent: true
                                }
                            });
                            const layer = imageryLayers.addImageryProvider(wmsProvider, (imageryLayers._layers.length))
                        }
                    });
                    if (typeof viewFunc === 'function') {
                        //定位函数
                        viewFunc();
                    }
                    return wmsProvider;
                },

                /**
                 * 移除wms
                 */
                removeWMS: function (url) {
                    var layer = null;
                    var imageryLayersCoc = supperMap.viewer.imageryLayers
                    var imageryLayers = imageryLayersCoc._layers
                    for (let i = 0, j = imageryLayers.length; i < j; i++) {
                        const baseurl = imageryLayers[i].imageryProvider._baseUrl;
                        if (baseurl && baseurl == url) {
                            layer = imageryLayersCoc.get(i)
                            break;
                        }
                    }
                    if (layer) {
                        imageryLayersCoc.remove(layer, true)
                    }
                },

                /**
                 * 加载wmts
                 */
                loadWMTS: function (url, viewFunc) {
                    let layer;
                    $.ajax({
                        url: url,
                        async: false,
                        success: function (response) {
                            let imageryLayers = supperMap.viewer.imageryLayers;
                            // console.log()
                            let obj = (JSON.parse(convertToJSON(response)));
                            // console.log(obj)

                            const identifier = obj.Capabilities.Contents.Layer["ows:Identifier"];
                            const tileMatrixSet = obj.Capabilities.Contents.Layer.TileMatrixSetLink.TileMatrixSet;

                            const style = obj.Capabilities.Contents.Layer.Style["ows:Identifier"];
                            const formate = obj.Capabilities.Contents.Layer.Format;
                            const tileMatrix = obj.Capabilities.Contents.TileMatrixSet.TileMatrix;
                            const maximumLevel = obj.Capabilities.Contents.TileMatrixSet.TileMatrix["ows:Identifier"];
                            var tileMatrixLabels = [];
                            for (let i = 0; i <= Number(maximumLevel); i++) {
                                tileMatrixLabels.push(i)
                            }
                            var provider = new Cesium.WebMapTileServiceImageryProvider({
                                url: url,
                                layer: identifier,
                                style: style,
                                tileMatrixSetID: tileMatrixSet,
                                format: formate,
                                tilingScheme: new Cesium.GeographicTilingScheme(),
                                maximumLevel: maximumLevel,
                                tileMatrixLabels: tileMatrixLabels
                            });
                            layer = imageryLayers.addImageryProvider(provider, imageryLayers._layers.length);
                        }
                    });
                    if (typeof viewFunc === 'function') {
                        //定位函数
                        viewFunc();
                    }
                    return layer;
                },

                /**
                 * 移除wmts
                 * @param id
                 * @param url
                 */
                removeWMTS: function (id) {
                    var imageryLayers = supperMap.viewer.imageryLayers;
                    var layer = supperMap.getImagesLayerInView(id)
                    if (layer != null) {
                        imageryLayers.remove(layer, true)
                    }
                },

                /**
                 * 根据id找图片图层
                 * @param id
                 * @returns {*}
                 */
                getImagesLayerInView: function (id) {
                    var imageryLayersCoc = supperMap.viewer.imageryLayers
                    var imageryLayers = imageryLayersCoc._layers
                    var layer = null
                    for (var i = 0; i < imageryLayers.length; i++) {
                        console.log(imageryLayers[i].imageryProvider._layer)
                        if (imageryLayers[i].imageryProvider._layer === id) {
                            layer = imageryLayersCoc.get(i)
                            break
                        }
                    }
                    return layer
                },

                /**
                 * 加载地形
                 * 地址,定位函数
                 */
                loadTerrain: function (url, viewFunc) {
                    var terrainProvider = new Cesium.CesiumTerrainProvider({
                        url: url,
                        requestWaterMask: true,
                        requestVertexNormals: true,
                        //超图格式
                        isSct: false
                    })
                    supperMap.viewer.terrainProvider = terrainProvider;
                    supperMap.viewer.scene.globe.depthTestAgainstTerrain = false;
                    if (typeof viewFunc === 'function') {
                        //定位函数
                        viewFunc();
                    }
                },
                /**
                 * 移除地形
                 */
                removeTerrain: function () {
                    // console.log(supperMap.viewer.terrainProvider)
                    supperMap.viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider({});
                    ;
                },

                /**
                 * 加载shp
                 * @param url
                 */
                loadShp: function (url, id, color) {
                    //设shp的数据结构为数组
                    let data = [];
                    shapefile.open(url)
                        .then(function (source) {
                            source.read().then(function log(result) {
                                let feature = result.value;
                                if (feature == undefined) {
                                    return;
                                }
                                let geometry = feature.geometry;

                                switch (geometry.type) {
                                    case 'Point':
                                        //生成id
                                        let pointId = window.supperMap.createPoint(new Cesium.Cartesian3.fromDegrees(Number(geometry.coordinates[0]), Number(geometry.coordinates[1]), 0), Cesium.Color.fromCssColorString(color));
                                        //判断
                                        if (window.treeService.localTree.shpMap.get(id)) {
                                            window.treeService.localTree.shpMap.get(id).push(pointId);
                                        } else {
                                            //数组直接插入实体id
                                            data.push(pointId);
                                            window.treeService.localTree.shpMap.set(id, data)
                                        }
                                        break;
                                    case 'LineString':
                                        // console.log(JSON.stringify(result))
                                        let startPosition = new Cesium.Cartesian3.fromDegrees(Number(geometry.coordinates[0][0]), Number(geometry.coordinates[0][1]), 0);
                                        let endPosition = new Cesium.Cartesian3.fromDegrees(Number(geometry.coordinates[1][0]), Number(geometry.coordinates[1][1]), 0);
                                        let lineId = window.supperMap.createPolyLine(startPosition, endPosition, Cesium.Color.fromCssColorString(color));
                                        //判断集合里是否有该shp集合
                                        if (window.treeService.localTree.shpMap.get(id)) {
                                            window.treeService.localTree.shpMap.get(id).push(lineId);
                                        } else {
                                            //数组直接插入实体id
                                            data.push(lineId);
                                            window.treeService.localTree.shpMap.set(id, data)
                                        }
                                        break;
                                    case 'Polygon':
                                        let postiontList = [];
                                        (geometry.coordinates[0]).forEach(function (item) {
                                            postiontList.push(Number(item[0]));
                                            postiontList.push(Number(item[1]));
                                        });
                                        let polygonId = window.supperMap.createPolygon(postiontList);
                                        //判断集合里是否有该shp集合
                                        if (window.treeService.localTree.shpMap.get(id)) {
                                            window.treeService.localTree.shpMap.get(id).push(polygonId);
                                        } else {
                                            //数组直接插入实体id
                                            data.push(polygonId);
                                            window.treeService.localTree.shpMap.set(id, data)
                                        }
                                        break;
                                }
                                return source.read().then(log);
                            })
                        })
                        .catch(error => console.error(error.stack));
                },

                /**
                 * 移除shp
                 * @param name
                 */
                removeShp: function (name) {
                    window.treeService.localTree.shpMap.get(name).forEach(function (item, index) {
                        window.supperMap.removeEntity(item);
                        if (name == item) {
                            //移除实体
                            window.treeService.localTree.shpMap.get(name).remove(item);
                            //移除集合
                            window.treeService.localTree.shpMap.get(name).splice(index, 1);
                        }
                    })
                },
                /**
                 * 修改shp颜色
                 * @param name
                 */
                changeShpColor: function (name, color) {
                    // console.log(color)
                    // console.log(name)
                    window.treeService.localTree.shpMap.get(name).forEach(function (item, index) {
                        if (supperMap.viewer.entities.getById(item)._point) {
                            supperMap.viewer.entities.getById(item)._point._color._value = Cesium.Color.fromCssColorString(color);
                            return;
                        } else if (supperMap.viewer.entities.getById(item)._polyline) {
                            supperMap.viewer.entities.getById(item)._polyline._material._color._value = Cesium.Color.fromCssColorString(color)
                            return;
                        } else {
                            supperMap.viewer.entities.getById(item)._polygon._material._color._value = Cesium.Color.fromCssColorString(color)
                            return;
                        }
                    })
                },
                /**
                 * 加载kml文件
                 * @param url
                 */
                loadKML: function (url) {
                    var kmlOptions = {
                        camera: supperMap.viewer.scene.camera,
                        canvas: supperMap.viewer.scene.canvas,
                        clampToGround: true
                    };
                    supperMap.viewer.dataSources.add(Cesium.KmlDataSource.load(url, kmlOptions));
                },

                /**
                 * 移除kml,传入kml的文件名称,带后缀名
                 */
                removeKML: function (kmlName) {
                    window.supperMap.viewer.dataSources._dataSources.forEach(function (item, index) {
                        console.log(kmlName)
                        console.log(item);
                        if (item._name == kmlName) {
                            window.supperMap.viewer.dataSources.remove(item, true);
                        }
                    });
                },
                /**
                 * 加载geojson
                 * @param url
                 */
                loadGEOJSON: function (url, id) {
                    // Seed the random number generator for repeatable results.
                    supperMap.Cesium.Math.setRandomNumberSeed(0);
                    var promise = supperMap.Cesium.GeoJsonDataSource.load(
                        url
                    );
                    promise.then(function (dataSource) {
                        let data = [];
                        // supperMap.viewer.dataSources.add(dataSource);
                        dataSource.entities.values.forEach(function (item, index) {
                            // console.log(item)
                            //判断是点
                            if (item.billboard) {
                                let pointId = supperMap.createPoint(item._position._value, Cesium.Color.RED);
                                data.push(pointId);
                            } else if (item._polyline) {
                                let polylineId = supperMap.createPolyLineWithPositions(item._polyline._positions._value, Cesium.Color.RED);
                                data.push(polylineId);
                            } else if (item.polygon) {
                                supperMap.viewer.entities.add(item);
                                data.push(item.id)
                            }
                        });
                        window.treeService.localTree.GEOJSONMap.set(id, data);
                    }).otherwise(function (error) {
                        console.log(error)
                    });

                },
                /**
                 * 移除geojson
                 */
                removeGEOJSON: function (id) {
                    window.treeService.localTree.GEOJSONMap.get(id).forEach(function (item, index) {
                        window.supperMap.removeEntity(item);
                        if (id == item) {
                            //移除实体
                            window.treeService.localTree.GEOJSONMap.get(id).remove(item);
                            //移除集合
                            window.treeService.localTree.GEOJSONMap.get(id).splice(index, 1);
                        }
                    })
                },
                /**
                 * 改变geojson颜色
                 * @param name
                 * @param color
                 */
                changeGEOJSONColor: function (name, color) {
                    window.treeService.localTree.GEOJSONMap.get(name).forEach(function (item, index) {
                        if (supperMap.viewer.entities.getById(item)._point) {
                            supperMap.viewer.entities.getById(item)._point._color._value = Cesium.Color.fromCssColorString(color);
                            return;
                        } else if (supperMap.viewer.entities.getById(item)._polyline) {
                            supperMap.viewer.entities.getById(item)._polyline._material._color._value = Cesium.Color.fromCssColorString(color)
                            return;
                        } else {
                            supperMap.viewer.entities.getById(item)._polygon._material._color._value = Cesium.Color.fromCssColorString(color)
                            return;
                        }
                    })
                },

二.小功能

                /**
                 * 笛卡尔转换为经纬度
                 * @param position 例如		supperMap.cartesian2toDegrees(supperMap.viewer.camera.position):相机经纬度
                 * @returns {*[]}
                 */
                cartesian2toDegrees: function (position) {
                    var cartographic = Cesium.Cartographic.fromCartesian(position);
                    var longitude = Cesium.Math.toDegrees(cartographic.longitude);
                    var latitude = Cesium.Math.toDegrees(cartographic.latitude);
                    var height = cartographic.height;
                    return [longitude, latitude, height];
                },
                /**
                 * 相机默认监听事件 func为函数对象,当相机移动完成后执行改函数
                 */
                cameraEventListener: function (func) {
                    //先清空之前的监听事件
                    supperMap.viewer.scene.camera.moveEnd.addEventListener(function () {
                        if (func) {
                            func();
                        }
                    });
                },
                /**
                 * 移除相机默认监听事件 清空相机监听事件数组
                 */
                removeCameraEventListener: function () {
                    supperMap.viewer.scene.camera.moveEnd._listeners.length = 0
                },
                /**
                 * 根据id移除模型
                 * @param id
                 */
                removeEntity: function (id) {
                    // console.log(supperMap.viewer.entities.getById(id))
                    if (supperMap.viewer.entities.getById(id)) {
                        supperMap.viewer.entities.remove(supperMap.viewer.entities.getById(id));
                    }
                },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值