北京经济技术开发区经开区虚拟城市项目-【前端】-Web
lixuliang
2024-04-12 dbb352c9d988dfac83da979023fe81a0a02f88e9
与数字人合并
已添加31个文件
已修改17个文件
已删除7个文件
10679 ■■■■ 文件已修改
index.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
layers.json 4987 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/new/数字人.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/new/文本输入.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/img/new/聊天.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/mapMsg.js 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/rpc.js 948 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/index.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/left/layerTree/Layer.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/login.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/map/viewer.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/map/viewer1.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/menu/bottom-menu.vue 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/menu/leftMenu.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/menu/tools/special.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/coord.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/bg1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/bgColor.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/bgSelect.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/bgSelect1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/close.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/policeAround.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/img/videoAround.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/location.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/main.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/poplayer/poplayer.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/right/right-bottom.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/right/right-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/searchQY.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/service.js 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/store.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/vueEvent.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/1.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/bgbox.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/tuli.zip 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/亦企服务港.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/园区服务站.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/社区服务站.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/经开区政务服务中心.png 补丁 | 查看 | 原始文档 | blame | 历史
static/SmartEarthSDK/Workers/image/街道.png 补丁 | 查看 | 原始文档 | blame | 历史
static/conf.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/layers 12.1.json 1175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/layers-1208.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/layers-zj.json 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/layers.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/layers_zs.json 1032 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/mapData.js 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/polyline.js 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/tudiguanli.json 462 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/tudiguanli2.json 462 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -81,6 +81,7 @@
  <script src="./static/Signalling/js/DataRender.js"></script>
  <script src="./static/Signalling/js/DataGrid.js"></script>
  <script src="./static/polyline.js"></script>
  <script src="./static/othersMap/othersMap.js"></script>
  <script type="text/javascript">
layers.json
ÎļþÒÑɾ³ý
src/api/api.js
@@ -1,26 +1,29 @@
import service from '@/utils/request';
import request from '@/utils/request'; //116:8089
import service from '@/utils/service'; //121:8070
import searchQY from '@/utils/searchQY'; //116:8086 ä¼ä¸šåç§°
import axios from "axios";
/*后台 8089 */
//登录
export function login(params) {
  return service.post('/login', params);
  return request.post('/login', params);
}
// ç¬¬ä¸‰æ–¹ç™»å½•
export function loginFromThirdApp(params) {
  return service.post('/loginFromThirdApp', params);
  return request.post('/loginFromThirdApp', params);
}
// èŽ·å–å›¾å±‚æ ‘
export function getmenu() {
  return service.get('/system/layer/listTreeDetail');
  return request.get('/system/layer/listTreeDetail');
}
// èŽ·å–ç”¨æˆ·ä¿¡æ¯
export function getUserInfo() {
  return service.get('/system/user/profile');
  return request.get('/system/user/profile');
}
//修改用户密码
export function updateUserPwd(params) {
  return service.put('system/user/profile/updatePwd', params);
  return request.put('system/user/profile/updatePwd', params);
}
//京办登录
// export function loginById(params) {
@@ -45,4 +48,65 @@
// }
//企业地址库查询(旧)
// export function ent_selectByName(params) {
//   return axios.get("https://skyzt.bda.gov.cn/dataApi/PoiExcel/ent/selectByName?name=" + params);
// }
// //企业地址库查询(新) 8086
export function ent_selectByName(params) {
  return searchQY.get("enterprise/selectByPage?pageSize=100&pageIndex=1&returnGeom=true&name=" + params);
}
//园区地址库查询
export function liushisijiayuanqudizhibianmafuwu(params) {
  return service.get(
    'wfsserver/liushisijiayuanqu1012?version=1.3.0&request=GetFeature&typename=64家园区基本情况范围coordinates10092&propertyname=*&filter=<Filter><PropertyIsLike+wildCard%3D"*"><PropertyName>YQmingchen<%2FPropertyName><Literal>*' + params + '*<%2FLiteral><%2FPropertyIsLike><%2FFilter>&format=json'
  );
}
//园区类型查询
export function shengwuSearch(params) {
  return service.get(
    'wfsserver/liushisijiayuanqu1012?version=1.3.0&request=GetFeature&typename=64家园区基本情况范围coordinates10092&propertyname=*&filter=<Filter><PropertyIsLike+wildCard%3D"*"><PropertyName>chanyeDW<%2FPropertyName><Literal>*' + params + '*<%2FLiteral><%2FPropertyIsLike><%2FFilter>&format=json'
  );
}
// åœ°å—查询
export function findAddressCandidates(params) {
  return service.get(
    "/rest/services/Locators/dikuaixinxi1005/GeocodeServer/findAddressCandidates?singleLine=" +
    params
  );
}
//获取地块范围
export function getDiKuanFanWei(lng, lat) {
  // return axios.get(
  //   `https://skyzt.bda.gov.cn/BEApi/cs/geowinmap_xncs/ds?lng=${lng}&lat=${lat}`
  // );
  return axios.get(
    `http://10.10.4.116:8086/cs/geowinmap_xncs/ds?lng=${lng}&lat=${lat}`
  );
}
// export function getDiKuanFanWei(lon, lat) {
//   return service.get(
//     "yzxncsApi/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" +
//     lon +
//     "&lat=" +
//     lat +
//     "&geom=true&requesttype=json"
//   );
// }
//
export function queryBySquare(url, layer, area) {
  return service.get(url, {
    params: {
      version: '1.3.0',
      request: 'GetFeature',
      typename: layer,
      propertyname: '*',
      format: "json",
      filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Intersects><ogc:PropertyName /><gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>${area}</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogc:Intersects></ogc:Filter>`,
    }
  });
}
src/assets/img/new/Êý×ÖÈË.png
src/assets/img/new/Îı¾ÊäÈë.png
src/assets/img/new/ÁÄÌì.png
src/assets/js/mapMsg.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
import mapData from "../../../static/mapData";
import rpc from "./rpc";
import vueEvents from '@/utils/vueEvent.js'
window.mapMsg = {
    setTimeInterval: null,
    testMsg(res) {
        // console.log(res);
        this.setMsgMatching({
            message: res,
            baidu_keys: {
                results: [{
                    word: res
                }]
            }
        });
    },
    init() {
        var that = this;
        window.addEventListener("message", res => {
            // if (res.data.status === "ok") {
            //     that.setMsgMatching(res.data.params);
            // }
            if (res.data.type === "command") {
                let info = res.data.params
                if (info.includes("定位到")) {
                    info.search("。") != -1 ? mapMsg.testMsg(info.slice(3, -1)) : mapMsg.testMsg(info.slice(3))
                } else if (info.includes("定位")) {
                    info.search("。") != -1 ? mapMsg.testMsg(info.slice(2, -1)) : mapMsg.testMsg(info.slice(2))
                } else {
                    info.search("。") != -1 ? mapMsg.testMsg(info.slice(0, -1)) : mapMsg.testMsg(info.slice(0))
                    // mapMsg.testMsg(info.slice(0, -1))//有句号
                    // mapMsg.testMsg(info.slice(0))//没句号
                }
            }
        });
    },
    // clearTime() {
    //     if (this.setTimeInterval) {
    //         clearInterval(this.setTimeInterval);
    //         this.setTimeInterval = null;
    //     }
    //     // this.setTime();
    // },
    // setTime() {
    //     if (this.setTimeInterval) {
    //         clearInterval(this.setTimeInterval);
    //         this.setTimeInterval = null;
    //     }
    //     this.setTimeInterval = setTimeout((res) => {
    //         vueEvents.$emit("queryData", false);
    //         rpc.setClearAllMsg();
    //         rpc.setLineRoaming()
    //         clearInterval(this.setTimeInterval);
    //         this.setTimeInterval = null;
    //     }, 90000)
    // },
    //消息匹配
    setMsgMatching(result) {
        // æ”¶åˆ°çš„æ¶ˆæ¯
        var param = result.message;
        // é»˜è®¤çš„匹配词
        var rest = mapData.msgMach.rest; //'复位', '还原', '初始化', '初始位置'
        var rom = mapData.msgMach.lineRoam;//'漫游', '导航'
        var closeRomData = mapData.msgMach.closeRoam;//'停止漫游', '停止导航'
        // var acceptData = mapData.msgMach.acceptMsg;
        // åœ°å›¾å¤ä½
        var valRest = rest.filter((rs) => {
            if (param.indexOf(rs) > -1) {
                return rs;
            }
        })
        if (valRest.length > 0) {
            // this.clearTime();
            vueEvents.$emit("queryData", false);
            rpc.setClearAllMsg();
            rpc.setMapRest();
            return
        }
        // åœæ­¢æ¼«æ¸¸
        var closeRom = closeRomData.filter((rs) => {
            if (param.indexOf(rs) > -1) {
                return rs
            }
        });
        if (closeRom.length > 0) {
            // this.clearTime();
            rpc.setCloseLineRomaing();
            return
        }
        //漫游
        var valRom = rom.filter((rs) => {
            if (param.indexOf(rs) > -1) {
                return rs;
            }
        })
        if (valRom.length > 0) {
            vueEvents.$emit("queryData", false);
            // this.clearTime();
            rpc.setClearAllMsg();
            rpc.setLineRoaming()
            return
        }
        // this.clearTime();
        rpc.getFuzzyQuery(result)
        // var accept = acceptData.filter(res => {
        //     if (param.indexOf(res) > -1) {
        //         return res;
        //     }
        // })
        // if (accept.length > 0) {
        //     this.clearTime();
        //     rpc.getFuzzyQuery(result)
        // }
        // else{
        //     vueEvents.$emit("queryData", false);
        //     rpc.setClearAllMsg();
        //     rpc.setMapRest();
        // }
    },
};
export default mapMsg
src/assets/js/rpc.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,948 @@
import Vue from "vue";
import coord from "@/components/poplayer/coord";
import store from "@/utils/store";
import mapData from "../../../static/mapData";
import {
    liushisijiayuanqudizhibianmafuwu,
    findAddressCandidates,
    getDiKuanFanWei,
    ent_selectByName,
    shengwuSearch
} from "../../api/api";
import vueEvents from "@/utils/vueEvent.js";
let PoiLayerConstructor = Vue.extend(coord);
const rpc = {
    timeout: 500,
    method: "get_statue",
    divPoint: null,
    instance: null,
    pathLayer: null,
    position: null,
    marksIndex: null,
    pitchValue: null,
    unsubscribeTicks: null,
    LineRoaming: null, //线路漫游
    dataQuery: [], //关键字查询结果
    pointerFly: null, //定点漫游
    isShow: false,
    objArr: [],
    pointrange: null,
    //关键字查询
    getFuzzyQuery(res) {
        // if (res.message.indexOf('奔驰') > -1) {
        //     store.queryLayer.val = '奔驰公司'
        // }
        // // else if (res.message.indexOf('京东') > -1) {
        // //     store.queryLayer.val = '京东'
        // // }
        // // else if (res.message.indexOf('小米') > -1) {
        // //     store.queryLayer.val = '小米'
        // // }
        // else if (res.message.indexOf('博大') > -1) {
        //     store.queryLayer.val = '博大大厦'
        // } else if (res.message.indexOf('信息技术') > -1) {
        //     store.queryLayer.val = '信息技术'
        // } else if (res.message.indexOf('生物医药') > -1) {
        //     store.queryLayer.val = '生物医药'
        // } else if (res.message.indexOf('机器人') > -1) {
        //     store.queryLayer.val = '机器人'
        // } else if (res.message.indexOf('汽车') > -1) {
        //     store.queryLayer.val = '汽车'
        // } else {
        //     store.queryLayer.val = res.message;
        // }
        this.setClearAllMsg();
        if (!res.baidu_keys) return;
        var flag = true;
        if (this.dataQuery.length > 0) {
            if (res.message.indexOf("第") > -1 && res.message.indexOf("条") > -1) {
                var data = mapData.msgMach.localPage;
                flag = false;
                var val_Data = null;
                for (var i in data) {
                    if (res.message.indexOf(data[i]) > -1) {
                        if (i >= 6) i -= 6;
                        val_Data = this.dataQuery[i];
                        setTimeout(() => {
                            this.setLocation(val_Data);
                        }, 1000);
                        break;
                    }
                }
            } else {
                for (var i in this.dataQuery) {
                    var name = this.dataQuery[i].name;
                    for (var j = 0; j < length; j++) {
                        var world = keyWorld[j].word;
                        if (name.indexOf(world) > -1) {
                            flag = false;
                            debugger
                            this.setLocation(this.dataQuery[i]);
                            break;
                            return;
                        }
                    }
                }
            }
        }
        if (!flag) {
            return;
        }
        var keyWorld = res.baidu_keys.results;
        if (keyWorld) {
            var length = keyWorld.length;
            this.dataQuery = [];
            this.objArr = [];
            this.pointrange = 6000;
            for (var i = 0; i < length; i++) {
                var world = keyWorld[i].word;
                // if (world == '奔驰') return
                if (world.indexOf('奔驰公司') > -1) {
                    world = '奔驰';
                    this.pointrange = 12000
                }
                // else if (world.indexOf('京东') > -1) {
                //     world = '京东'
                // }
                // else if (world.indexOf('小米') > -1) {
                //     world = '小米'
                // }
                else if (world.indexOf('博大大厦') > -1) {
                    world = '博大大厦'
                }
                else if (world.indexOf('信息技术') > -1) {
                    world = '信息技术'
                } else if (world.indexOf('生物医药') > -1) {
                    world = '生物医药'
                } else if (world.indexOf('机器人') > -1 && world.indexOf('园') > -1) {
                    world = '机器人'
                } else if (world.indexOf('汽车') > -1 && world.indexOf('园') > -1) {
                    world = '汽车'
                }
                else if (world.indexOf('园') > -1) {
                }
                else if (world.indexOf('博大') > -1 && world.indexOf('博大大厦') == -1) {
                    world = '博大'
                } else {
                    // continue
                }
                this.setFuzzyQueryData(world, i, length - 1);
            }
        }
    },
    async setFuzzyQueryData(res, index, length) {
        if (res == "信息技术" || res == "生物医药" || res == "机器人" || res == "汽车") {
            shengwuSearch(res).then(result => {
                var that = this;
                store.queryLayer.data = [];
                result.features.forEach(val => {
                    let itemObj = {
                        type: "园区",
                        name: val.properties.YQmingchen,
                        address: val.properties.YQdizhi,
                        lon: val.properties.longtitude,
                        lat: val.properties.latitude,
                        geom: val.geometry.coordinates[0].flat()
                    };
                    that.objArr.push(itemObj);
                });
                if (index == length) {
                    if (that.objArr.length <= 0) {
                        vueEvents.$emit("queryData", true);
                        return;
                    }
                    var num = that.objArr.length;
                    for (var i = 0; i < num; i++) {
                        if (i < 6) {
                            that.dataQuery.push(that.objArr[i]);
                        }
                    }
                    store.queryLayer.data = that.dataQuery;
                    that.setClearAllMsg();
                    setTimeout(() => {
                        vueEvents.$emit("queryData", true);
                        that.setLocation(that.dataQuery[0]);
                    }, 1000);
                }
            })
        } else {
            Promise.all([
                ent_selectByName(res), //企业
                liushisijiayuanqudizhibianmafuwu(res), //园区
                findAddressCandidates(res),//地块,
            ]).then(result => {
                var that = this;
                store.queryLayer.data = [];
                // ä¼ä¸š(新)
                var EntArr = result[0].data.filter(item => {
                    return item.entName.includes(res) && item.geom;
                });
                EntArr.forEach(val => {
                    const coordinates = this.extractCoordinates(val.geom);
                    let itemObj = {
                        type: "企业",
                        name: val.entName,
                        address: val.address,
                        lon: coordinates.x,
                        lat: coordinates.y
                    };
                    that.objArr.push(itemObj);
                });
                // ä¼ä¸š(旧)
                // var EntArr = result[0].data.result.filter(item => {
                //     return item.entName.includes(res) && item.x != 0;
                // });
                // EntArr.forEach(val => {
                //     let itemObj = {
                //         type: "企业",
                //         name: val.entName,
                //         address: val.address,
                //         lon: val.x,
                //         lat: val.y
                //     };
                //     that.objArr.push(itemObj);
                // });
                //园区
                var YQArr = result[1].features.filter(item => {
                    return item.properties.YQmingchen.includes(res);
                });
                YQArr.forEach(val => {
                    let itemObj = {
                        type: "园区",
                        name: val.properties.YQmingchen,
                        address: val.properties.YQdizhi,
                        lon: val.properties.longtitude,
                        lat: val.properties.latitude,
                        geom: val.geometry.coordinates[0].flat()
                        // lon: val.geometry.coordinates[0],
                        // lat: val.geometry.coordinates[1],
                        // geom: val.properties.Coor1 + val.properties.Coor2
                    };
                    that.objArr.push(itemObj);
                });
                //地块
                var LandArr = result[2].candidates.filter((item) => {
                    return item.attributes.QYMC.includes(res);
                })
                // ç»“果根据QYMC从短到长排序
                LandArr.sort((a, b) => (b.attributes.QYMC.length === a.attributes.QYMC.length ? 0 : a.attributes.QYMC.length > b.attributes.QYMC.length ? 1 : -1))
                LandArr.forEach((val) => {
                    let itemObj = {
                        type: "地块",
                        name: val.attributes.QYMC,
                        area: val.attributes.area,
                        code: val.attributes["地块编"],
                        lon: val.location.x,
                        lat: val.location.y,
                    };
                    that.objArr.push(itemObj);
                });
                // console.log(that.objArr);
                if (index == length) {
                    if (that.objArr.length <= 0) {
                        vueEvents.$emit("queryData", true);
                        return;
                    }
                    var num = that.objArr.length;
                    for (var i = 0; i < num; i++) {
                        if (i < 6) {
                            that.dataQuery.push(that.objArr[i]);
                        }
                    }
                    store.queryLayer.data = that.dataQuery;
                    that.setClearAllMsg();
                    setTimeout(() => {
                        vueEvents.$emit("queryData", true);
                        that.setLocation(that.dataQuery[0]);
                    }, 1000);
                }
            });
        }
    },
    getFuzzyQueryData(res, index, length, flag) {
        if (!res || res.length <= 0) return;
        for (var i in res) {
            if (this.dataQuery.length < 6) {
                this.dataQuery.push(res[i]);
            }
        }
        if (index == length) {
            if (this.dataQuery.length <= 0) {
                vueEvents.$emit("queryData", false);
                return;
            }
            // store.queryLayer.data = this.dataQuery;
            this.setClearAllMsg();
            setTimeout(() => {
                vueEvents.$emit("queryData", true);
                this.setLocation(this.dataQuery[0]);
            }, 1000);
        }
    },
    // æå–两个坐标
    extractCoordinates(pointStr) {
        const regex = /POINT\((-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)\)/;
        const match = pointStr.match(regex);
        if (match) {
            return {
                x: parseFloat(match[1]),
                y: parseFloat(match[2])
            };
        } else {
            // throw new Error('Invalid POINT format');
        }
    },
    // æ˜¾ç¤ºåœ°å—范围
    getLandmass(res) {
        let that = this;
        if (res.type == "园区") {
            this.setDrawPolyExtent(res.geom)
            // var geom = res.geom.split(',');
            // var coord = [];
            // for (var i in geom) {
            //     coord.push(parseFloat(geom[i]))
            // }
            // this.setDrawPolyExtent(coord)
        } else if (res.type == "地块" || res.type == "企业") {
            getDiKuanFanWei(res.lon, res.lat).then(response => {
                let center = { lon: 0, lat: 0 };
                let polygon = that.read(response.data.geometry);
                if (polygon.length > 0) {
                    var geometry = [];
                    let points = polygon[0].split(",");
                    for (let i = 0; i < points.length; i++) {
                        let point = points[i].replace(/^\s+|\s+$/g, "").split(" ");
                        // center.lon += parseFloat(point[0]) / points.length;
                        // center.lat += parseFloat(point[1]) / points.length;
                        geometry.push(parseFloat(point[0]), parseFloat(point[1]))
                    }
                    that.setDrawPolyExtent(geometry)
                }
            });
        }
    },
    // ç«‹ä½“墙效果
    setDrawPolyExtent(res) {
        this.setLacationLineClear()
        var position = Cesium.Cartesian3.fromDegreesArray(res)
        this.lacationLine = Viewer.entities.add({
            name: "立体墙效果",
            wall: {
                positions: position,
                material: new Cesium.DynamicWallMaterialProperty({
                    // color: new Cesium.Color.fromCssColorString('#73DB0E'),
                    color: new Cesium.Color.fromCssColorString('#1f1fa8'),
                    duration: 4000,
                }),
                // è®¾ç½®é«˜åº¦
                maximumHeights: Array(position.length).fill(80),
                minimumHeights: Array(position.length).fill(10),
            }
        })
    },
    read(wkt) {
        var regExes = {
            typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
            emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/,
            spaces: /\s+/,
            parenComma: /\)\s*,\s*\(/,
            doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
            trimParens: /^\s*\(?(.*?)\)?\s*$/
        };
        /**
         * Object with properties corresponding to the geometry types. Property values
         * are functions that do the actual parsing.
         * @private
         */
        var parse$1 = {
            /**
             * Return point geometry given a point WKT fragment.
             *
             * @param {String} str A WKT fragment representing the point.
             * @return {Point} A point geometry.
             * @private
             */
            point: function point(str) {
                if (str === undefined) {
                    return [];
                }
                var coords = str.trim().split(regExes.spaces);
                return [Number.parseFloat(coords[0]), Number.parseFloat(coords[1])];
            },
            /**
             * Return a multipoint geometry given a multipoint WKT fragment.
             *
             * @param {String} str A WKT fragment representing the multipoint.
             * @return {Point} A multipoint feature.
             * @private
             */
            multipoint: function multipoint(str) {
                var this$1 = this;
                if (str === undefined) {
                    return [];
                }
                var point;
                var points = str.trim().split(",");
                var components = [];
                for (var i = 0, len = points.length; i < len; ++i) {
                    point = points[i].replace(regExes.trimParens, "$1");
                    components.push(parse$1.point(point));
                }
                return components;
            },
            /**
             * Return a linestring geometry given a linestring WKT fragment.
             *
             * @param {String} str A WKT fragment representing the linestring.
             * @return {LineString} A linestring geometry.
             * @private
             */
            linestring: function linestring(str) {
                if (str === undefined) {
                    return [];
                }
                var points = str.trim().split(",");
                var components = [];
                var coords;
                for (var i = 0, len = points.length; i < len; ++i) {
                    coords = points[i].trim().split(regExes.spaces);
                    components.push([
                        Number.parseFloat(coords[0]),
                        Number.parseFloat(coords[1])
                    ]);
                }
                return components;
            },
            /**
             * Return a linearring geometry given a linearring WKT fragment.
             *
             * @param {String} str A WKT fragment representing the linearring.
             * @return {LinearRing} A linearring geometry.
             * @private
             */
            linearring: function linearring(str) {
                if (str === undefined) {
                    return [];
                }
                var points = str.trim().split(",");
                var components = [];
                var coords;
                for (var i = 0, len = points.length; i < len; ++i) {
                    coords = points[i].trim().split(regExes.spaces);
                    components.push([
                        Number.parseFloat(coords[0]),
                        Number.parseFloat(coords[1])
                    ]);
                }
                return components;
            },
            /**
             * Return a multilinestring geometry given a multilinestring WKT fragment.
             *
             * @param {String} str A WKT fragment representing the multilinestring.
             * @return {MultiLineString} A multilinestring geometry.
             * @private
             */
            multilinestring: function multilinestring(str) {
                var this$1 = this;
                if (str === undefined) {
                    return [];
                }
                var line;
                var lines = str.trim().split(regExes.parenComma);
                var components = [];
                for (var i = 0, len = lines.length; i < len; ++i) {
                    line = lines[i].replace(regExes.trimParens, "$1");
                    components.push(parse$1.linestring(line));
                }
                return components;
            },
            /**
             * Return a polygon geometry given a polygon WKT fragment.
             *
             * @param {String} str A WKT fragment representing the polygon.
             * @return {Polygon} A polygon geometry.
             * @private
             */
            polygon: function polygon(str) {
                var this$1 = this;
                if (str === undefined) {
                    return [];
                }
                var ring, linestring, linearring;
                var rings = str.trim().split(regExes.parenComma);
                var shell;
                var holes = [];
                //for (var i = 0, len = rings.length; i < len; ++i) {
                ring = rings[0].replace(regExes.trimParens, "$1");
                linestring = ring;
                //}
                return linestring;
            },
            /**
             * Return a multipolygon geometry given a multipolygon WKT fragment.
             *
             * @param {String} str A WKT fragment representing the multipolygon.
             * @return {MultiPolygon} A multipolygon geometry.
             * @private
             */
            multipolygon: function multipolygon(str) {
                var this$1 = this;
                if (str === undefined) {
                    return [];
                }
                var polygon;
                var polygons = str.trim().split(regExes.doubleParenComma);
                var components = [];
                for (var i = 0, len = polygons.length; i < len; ++i) {
                    polygon = polygons[i].replace(regExes.trimParens, "$1");
                    components.push(parse$1.polygon(polygon));
                }
                return components;
            }
        };
        var geometry, type, str;
        wkt = wkt.replace(/[\n\r]/g, " ");
        var matches = regExes.typeStr.exec(wkt);
        if (wkt.search("EMPTY") !== -1) {
            matches = regExes.emptyTypeStr.exec(wkt);
            matches[2] = undefined;
        }
        if (matches) {
            type = matches[1].toLowerCase();
            str = matches[2];
            if (parse$1[type]) {
                geometry = parse$1[type].apply(this, [str]);
            }
        }
        if (geometry === undefined) {
            throw new Error("Could not parse WKT " + wkt);
        }
        return geometry;
    },
    //地图复位
    setMapRest() {
        const data = mapData.mapRest;
        sgworld.Navigate.flyToPointsInterest({
            destination: SmartEarth.Cesium.Cartesian3.fromDegrees(data.lng, data.lat, data.alt),
            orientation: {
                heading: SmartEarth.Cesium.Math.toRadians(data.heading),
                pitch: SmartEarth.Cesium.Math.toRadians(data.pitch),
                roll: SmartEarth.Cesium.Math.toRadians(data.roll)
            },
            // {
            //     x: data.lng,
            //     y: data.lat,
            //     z: data.alt
            // },
            // orientation: {
            //     heading: data.heading,
            //     pitch: data.pitch,
            //     roll: data.roll
            // },
            duration: 8 //飞行时间8s
        });
    },
    //动画导航
    setLineRoaming() {
        var valdata = mapData.animaNavigation;
        this.marksIndex = 1;
        this.pitchValue = -20;
        this.setShowPathLine(valdata);
        var geom = [];
        for (var i in valdata) {
            geom.push(valdata[i].lng, valdata[i].lat, valdata[i].height);
        }
        var that = this;
        sgworld.Creator.getFlyData(geom, data => {
            data.showPoint = false;
            data.showLine = false;
            data.mode = 1;
            data.pitch = -10;
            data.height = 100;
            data.speed = 25;
            that.LineRoaming = sgworld.Creator.createDynamicObject(
                data,
                null,
                res => {
                    if (res.time >= res.Totaltime) {
                        that.setCloseLineRomaing();
                        that.setMapRest();
                    }
                }
            );
        });
    },
    //点击获取坐标
    clickToCoordinates() {
        const handlerClick = new Cesium.ScreenSpaceEventHandler(
            Viewer.scene.canvas
        );
        handlerClick.setInputAction(event => {
            let cartesian = Viewer.camera.pickEllipsoid(
                event.position,
                Viewer.scene.globe.ellipsoid
            );
            if (cartesian == undefined) {
                console.log("没有获取到坐标");
            } else {
                // ç©ºé—´åæ ‡è½¬ä¸–界坐标(弧度)
                let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
                // å¼§åº¦è½¬ä¸ºè§’度(经纬度)
                let lon = Cesium.Math.toDegrees(cartographic.longitude); // ç»åº¦å€¼
                let lat = Cesium.Math.toDegrees(cartographic.latitude); // çº¬åº¦å€¼
                console.log("经纬度是:", { x: lon, y: lat });
            }
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    },
    //定位弹窗
    setLocation(res) {
        var objdata = {
            name: res.name,
            address: res.address,
            area: res.area,
            code: res.code,
            lat: res.lat,
            lon: res.lon
        };
        //添加定位弹窗
        this.setAddPointLocation(objdata);
        //范围调用
        this.getLandmass(res);
    },
    setAddPointLocation(res) {
        // æ¸…除方法
        store.setlocalLayerShowAction(false);
        store.setlocalLayerListAction({});
        store.setlocalLayerShowAction(true);
        store.setlocalLayerListAction(res);
        this.instance = new PoiLayerConstructor({
            data: {
                list: res
            }
        });
        this.instance.$mount();
        this.divPoint = sgworld.Creator.createDivPoint(
            "",
            {
                lon: res.lon,
                lat: res.lat,
                height: 50
            },
            {
                type: "custom",
                offset: ["c", 100],
                description: this.instance.$el,
                near: 0,
                far: 100000
            }
        );
        this.position = window.Viewer.entities.add({
            name: "FLYToMap",
            position: Cesium.Cartesian3.fromDegrees(res.lon, res.lat, 0),
            point: {
                pixelSize: 1,
                color: Cesium.Color.WHITE.withAlpha(0),
                outlineColor: Cesium.Color.WHITE.withAlpha(0.9),
                outlineWidth: 1
            }
        });
        window.Viewer.flyTo(this.position, {
            offset: {
                heading: Cesium.Math.toRadians(-200),
                pitch: Cesium.Math.toRadians(-45),
                range: this.pointrange
            },
            duration: 3
        });
        setTimeout(() => {
            window.Viewer.entities.remove(this.position);
        }, 1000);
        // setTimeout(() => {
        //     this.setPointFly(res);
        // }, 4000);
    },
    setflyExtent(res) {
        if (this.unsubscribeTicks) {
            window.Viewer.clock.onTick.removeEventListener(this.unsubscribeTicks);
            this.unsubscribeTicks = null;
        }
        // ç›¸æœºçœ‹ç‚¹çš„角度,如果大于0那么则是从地底往上看,所以要为负值
        var pitch = Cesium.Math.toRadians(this.pitchValue);
        // æ—¶é—´é—´éš”2秒钟
        this.setExtentTime(res[this.marksIndex].flytime);
        var Exection = () => {
            var preIndex = this.marksIndex - 1;
            if (this.marksIndex == 0) {
                preIndex = res.length - 1;
            }
            var heading = this.bearing(
                res[preIndex].lat,
                res[preIndex].lng,
                res[this.marksIndex].lat,
                res[this.marksIndex].lng
            );
            heading = Cesium.Math.toRadians(heading);
            // å½“前已经过去的时间,单位s
            var delTime = Cesium.JulianDate.secondsDifference(
                window.Viewer.clock.currentTime,
                window.Viewer.clock.startTime
            );
            var originLat =
                this.marksIndex == 0
                    ? res[res.length - 1].lat
                    : res[this.marksIndex - 1].lat;
            var originLng =
                this.marksIndex == 0
                    ? res[res.length - 1].lng
                    : res[this.marksIndex - 1].lng;
            var endPosition = Cesium.Cartesian3.fromDegrees(
                originLng +
                ((res[this.marksIndex].lng - originLng) /
                    res[this.marksIndex].flytime) *
                delTime,
                originLat +
                ((res[this.marksIndex].lat - originLat) /
                    res[this.marksIndex].flytime) *
                delTime,
                res[this.marksIndex].height
            );
            // console.log(1, pitch);
            window.Viewer.scene.camera.setView({
                destination: endPosition,
                orientation: {
                    heading: heading,
                    pitch: Cesium.Math.toRadians(-5)
                }
            });
            if (
                Cesium.JulianDate.compare(
                    window.Viewer.clock.currentTime,
                    window.Viewer.clock.stopTime
                ) >= 0
            ) {
                this.unsubscribeTicks = window.Viewer.clock.onTick.removeEventListener(
                    Exection
                );
                this.changeCameraHeading(res);
            }
        };
        window.Viewer.clock.onTick.addEventListener(Exection);
    },
    setPointFly(res) {
        var that = this;
        that.pointerFly = window.sgworld.Analysis.setPointFly({
            position: Cesium.Cartesian3.fromDegrees(res.lon, res.lat, 200),
            hideImage: true,
            time: 120,
            limitTime: true,
            limitAngel: 120,
            end: () => {
                that.pointerFly = null;
            }
        });
        setTimeout(() => {
            this.setClearPointFly();
        }, 8000);
    },
    changeCameraHeading(res) {
        var nextIndex = this.marksIndex + 1;
        if (this.marksIndex == res.length - 1) {
            if (this.unsubscribeTicks) {
                window.Viewer.clock.onTick.removeEventListener(this.unsubscribeTicks);
                this.unsubscribeTicks = null;
            }
            return;
        }
        // è®¡ç®—两点之间的方向
        var heading = this.bearing(
            res[this.marksIndex].lat,
            res[this.marksIndex].lng,
            res[nextIndex].lat,
            res[nextIndex].lng
        );
        // ç›¸æœºçœ‹ç‚¹çš„角度,如果大于0那么则是从地底往上看,所以要为负值
        var pitch = Cesium.Math.toRadians(this.pitchValue);
        // ç»™å®šé£žè¡Œä¸€å‘¨æ‰€éœ€æ—¶é—´ï¼Œæ¯”如10s, é‚£ä¹ˆæ¯ç§’转动度数
        var angle =
            (heading - Cesium.Math.toDegrees(window.Viewer.camera.heading)) / 2;
        // æ—¶é—´é—´éš”2秒钟
        this.setExtentTime(2);
        // ç›¸æœºçš„当前heading
        var initialHeading = window.Viewer.camera.heading;
        var Exection = () => {
            // å½“前已经过去的时间,单位s
            var delTime = Cesium.JulianDate.secondsDifference(
                window.Viewer.clock.currentTime,
                window.Viewer.clock.startTime
            );
            var heading = Cesium.Math.toRadians(delTime * angle) + initialHeading;
            window.Viewer.scene.camera.setView({
                orientation: {
                    heading: heading,
                    pitch: Cesium.Math.toRadians(-5)
                }
            });
            if (
                Cesium.JulianDate.compare(
                    window.Viewer.clock.currentTime,
                    window.Viewer.clock.stopTime
                ) >= 0
            ) {
                window.Viewer.clock.onTick.removeEventListener(Exection);
                this.marksIndex = ++this.marksIndex >= res.length ? 0 : this.marksIndex;
                this.setflyExtent(res);
            }
        };
        window.Viewer.clock.onTick.addEventListener(Exection);
    },
    bearing(startLat, startLng, destLat, destLng) {
        startLat = this.toRadians(startLat);
        startLng = this.toRadians(startLng);
        destLat = this.toRadians(destLat);
        destLng = this.toRadians(destLng);
        let y = Math.sin(destLng - startLng) * Math.cos(destLat);
        let x =
            Math.cos(startLat) * Math.sin(destLat) -
            Math.sin(startLat) * Math.cos(destLat) * Math.cos(destLng - startLng);
        let brng = Math.atan2(y, x);
        let brngDgr = this.toDegrees(brng);
        return (brngDgr + 360) % 360;
    },
    toRadians(degrees) {
        return (degrees * Math.PI) / 180;
    },
    toDegrees(radians) {
        return (radians * 180) / Math.PI;
    },
    setExtentTime(time) {
        var startTime = Cesium.JulianDate.fromDate(new Date());
        var stopTime = Cesium.JulianDate.addSeconds(
            startTime,
            time,
            new Cesium.JulianDate()
        );
        window.Viewer.clock.startTime = startTime.clone(); // å¼€å§‹æ—¶é—´
        window.Viewer.clock.stopTime = stopTime.clone(); // ç»“速时间
        window.Viewer.clock.currentTime = startTime.clone(); // å½“前时间
        window.Viewer.clock.clockRange = Cesium.ClockRange.CLAMPED; // è¡Œä¸ºæ–¹å¼
        window.Viewer.clock.clockStep = Cesium.ClockStep.SYSTEM_CLOCK; // æ—¶é’Ÿè®¾ç½®ä¸ºå½“前系统时间; å¿½ç•¥æ‰€æœ‰å…¶ä»–设置。
    },
    // å¯¼èˆªçº¿
    setShowPathLine(res) {
        console.log(res);
        var geom = [];
        for (var i in res) {
            geom.push([res[i].lng, res[i].lat]);
        }
        var url = {
            type: "FeatureCollection",
            features: [
                {
                    type: "Feature",
                    geometry: {
                        type: "LineString",
                        coordinates: geom
                    }
                }
            ]
        };
        this.pathLayer = window.sgworld.Creator.createPathLayer({
            url: url,
            color: "#0033FF", //线的颜色
            width: 4.0, //线的宽度
            pointColor: "#FFFFFF", //移动点的颜色
            speed: 5,
            far: 50000
        });
    },
    //结束事件
    setClearAllMsg() {
        if (this.divPoint) {
            this.divPoint && this.divPoint.deleteObject();
            this.divPoint = null;
        }
        if (this.instance) {
            this.instance && this.instance.$destroy();
            this.instance = null;
        }
        //地块
        this.setLacationLineClear()
        // è½¨è¿¹çº¿
        this.setClosePathLine();
        // æ¼«æ¸¸
        this.setCloseLineRomaing();
        //定点漫游
        this.setClearPointFly();
        // vueEvents.$emit("queryLayer", false);
    },
    setLacationLineClear() {
        if (this.lacationLine) {
            Viewer.entities.remove(this.lacationLine)
            this.lacationLine = null;
        }
    },
    setClearPointFly() {
        if (this.pointerFly) {
            this.pointerFly && this.pointerFly.end();
            this.pointerFly = null;
        }
    },
    setCloseLineRomaing() {
        if (this.LineRoaming) {
            this.LineRoaming && this.LineRoaming.exit();
            this.LineRoaming = null;
        }
    },
    setClosePathLine() {
        if (this.pathLayer) {
            this.pathLayer && this.pathLayer.deleteObject();
        }
    }
};
export default rpc;
src/components/index.vue
@@ -1,12 +1,19 @@
<template>
  <div class="mapViewer">
    <div class="cacheImage">
    <img style="display: none;" src="@assets/img/new/rightCircle-y.png" alt="" />
    <img style="display: none;" src="@assets/img/new/leftCircle-y.png" alt="" />
    <img style="display: none;" src="@assets/img/new/treeClose-y.png" alt="" />
    <img style="display: none;" src="@assets/img/new/h1.png" alt="" />
  </div>
      <img
        style="display: none"
        src="@assets/img/new/rightCircle-y.png"
        alt=""
      />
      <img
        style="display: none"
        src="@assets/img/new/leftCircle-y.png"
        alt=""
      />
      <img style="display: none" src="@assets/img/new/treeClose-y.png" alt="" />
      <img style="display: none" src="@assets/img/new/h1.png" alt="" />
    </div>
    <div class="tooltip" :class="{ tooltiphide: !tooltipShow }">
      <span>
@@ -19,20 +26,34 @@
          <img class="searchBtn" src="@/assets/img/right/closeinput1.png" />
        </el-button>
      </div>
    </div>
    <viewer1 class="mapViewer" :key="switchKey" v-if="viewer1Show" :style="viewer1Style"
      @mousemove.native="viewer1MouseMove" />
    <viewer class="mapViewer" ref="mapViewer" :style="viewerStyle" @mousemove.native="viewerMouseMove" />
    <div class="controlPanel" :style="{
      width: `${size}`,
      height: `${size}`,
      transform: `scale(${scale}) translate(${offset},${offset})`,
      '-webkit-transform': `scale(${scale}) translate(${offset},${offset})`,
      '-moz-transform': `scale(${scale}) translate(${offset},${offset})`,
      '-o-transform': `scale(${scale}) translate(${offset},${offset})`,
      '-ms-transform': `scale(${scale}) translate(${offset},${offset})`,
    }">
    <left-menu></left-menu>
    <viewer1
      class="mapViewer"
      :key="switchKey"
      v-if="viewer1Show"
      :style="viewer1Style"
      @mousemove.native="viewer1MouseMove"
    />
    <viewer
      class="mapViewer"
      ref="mapViewer"
      :style="viewerStyle"
      @mousemove.native="viewerMouseMove"
    />
    <div
      class="controlPanel"
      :style="{
        width: `${size}`,
        height: `${size}`,
        transform: `scale(${scale}) translate(${offset},${offset})`,
        '-webkit-transform': `scale(${scale}) translate(${offset},${offset})`,
        '-moz-transform': `scale(${scale}) translate(${offset},${offset})`,
        '-o-transform': `scale(${scale}) translate(${offset},${offset})`,
        '-ms-transform': `scale(${scale}) translate(${offset},${offset})`,
      }"
    >
      <img @click="changePwd" id="headlog" src="@/assets/img/new/topBar.png" />
      <img id="bottomBar" src="@/assets/img/new/bottomBar.png" />
      <!-- <el-slider
@@ -67,6 +88,8 @@
import signalling from "@/components/menu/signalling";
import bottommenu from "@/components/menu/bottom-menu";
import { mapState, mapMutations } from "vuex";
import vueEvents from "@/utils/vueEvent.js";
import leftMenu from "@/components/menu/leftMenu.vue";
export default {
  name: "index",
@@ -82,7 +105,8 @@
    setting,
    qycharts,
    History,
    signalling
    signalling,
    leftMenu,
  },
  data() {
    return {
@@ -96,8 +120,9 @@
      offset: "0%",
      tooltipInfo: "请稍后。。。",
      tooltipShow: false,
      signallingShow:false,
      signallingShow: false,
      switchKey: 0,
      // viewer1Show: false,
    };
  },
@@ -106,6 +131,9 @@
    this.scale = (100 / size).toFixed(2);
    this.offset = "-" + ((size - 100) / 2).toFixed(2) + "%";
    this.size = size + "%";
    vueEvents.$on("queryLayer", (res) => {
      this.queryShow = res;
    });
  },
  computed: {
    ...mapState(["viewer1Show", "isLand", "yqfk"]),
@@ -135,10 +163,11 @@
      this.tooltipShow = show;
      this.tooltipInfo = msg ? msg : "";
    },
    changePwd() {
      console.log(111);
    },
    changeMode(mode){
    changeMode(mode) {
      this.$refs.mapViewer.changeMode(mode);
    },
    detectZoom() {
@@ -239,13 +268,13 @@
      this.$store.commit("showHistory", false);
    },
  },
  beforeDestroy(){
  beforeDestroy() {
    this.$refs.bottommenu.switchMenu(0);
  },
};
</script>
<style scoped>
.cacheImage{
.cacheImage {
  display: none !important;
}
.mapViewer {
src/components/left/layerTree/Layer.vue
@@ -492,18 +492,45 @@
        });
    },
    // æ¸…除本地所有标绘信息
    deleteAllPlot() {
      this.$confirm("该操作将清除所有标绘信息,是否继续?", "清除", {
   deleteAllPlot() {
      this.$confirm("该操作将删除所有标绘历史记录,是否继续?", "清除", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$message({
            message: "标绘数据已清除",
            type: "success",
          axios({
            method: "GET",
            url: "http://10.10.4.121:8070/PM20221203225_OpenAPI3_Service-0.0.1-SNAPSHOT/biaoHui/list",
          }).then((response) => {
            let hisIDArr = [];
            response.data.result.forEach((item) => {
              hisIDArr.push({
                id: item.id,
              });
            });
            axios
              .post(
                "http://10.10.4.121:8070/PM20221203225_OpenAPI3_Service-0.0.1-SNAPSHOT/biaoHui/del",
                hisIDArr,
                {
                  headers: {
                    "Content-Type": "application/json",
                  },
                }
              )
              .then((res) => {
                if (res.data.code == 200) {
                  this.$message({
                    message: "删除成功",
                    type: "success",
                  });
                  this.initData({});
                } else {
                  this.$message.error("删除失败!");
                }
              });
          });
          this.initData({});
        })
        .catch(() => {
          this.$message({
src/components/login.vue
@@ -9,7 +9,6 @@
        :model="loginForm"
        :rules="rules"
        ref="loginForm"
        @keyup.enter.native="submitForm('loginForm')"
      >
        <el-form-item prop="loginname">
          <div class="user-box">
@@ -54,6 +53,7 @@
                class="nobr"
                autocomplete="off"
                clearable
                @keyup.enter.native="submitForm('loginForm')"
              >
              </el-input>
            </div>
@@ -108,7 +108,6 @@
  },
  created() {},
  mounted() {
    window.addEventListener("keydown", this.keyDown);
    // if (
    //   window.location.href.match(/=(\S*)#/) &&
    //   window.location.href.match(/=(\S*)#/)[1] != ""
@@ -125,18 +124,7 @@
      this.passCAFree();
    }
  },
  destroyed() {
    // é”€æ¯äº‹ä»¶
    window.removeEventListener("keydown", this.keyDown, false);
  },
  methods: {
    // ç‚¹å‡»å›žè½¦é”®ç™»å½•
    keyDown(e) {
      // å›žè½¦åˆ™æ‰§è¡Œç™»å½•方法 enter键的ASCII是13
      if (e.keyCode == 13 || e.keyCode == 100) {
        this.submitForm("loginForm"); // å®šä¹‰çš„登录方法
      }
    },
    // è´¦å·å¯†ç ç™»å½•
    submitForm(formName) {
      // this.$router.push("/index");
@@ -148,7 +136,6 @@
            spinner: "el-icon-loading",
            background: "rgba(0, 0, 0, 0.7)",
          });
          login({
            username: this.loginForm.loginname,
            password: this.loginForm.password,
@@ -178,7 +165,6 @@
              return Promise.resolve(error.response);
              // reject(error);
            });
          // //如果登录失败,需要刷新验证码的
          // this.$refs.refresh.createdCode();
          // this.validCode = ""; //清空验证码输入框的内容
@@ -417,7 +403,7 @@
  bottom: -160px;
  animation: square 20s linear infinite;
  border-radius: 45%;
  box-shadow: 0px 0px 10px rgba(255,255,255,0.5);
  box-shadow: 0px 0px 10px rgba(255, 255, 255, 0.5);
}
.bg-squares li:nth-child(1) {
src/components/map/viewer.vue
@@ -1,6 +1,34 @@
<template>
  <div>
    <div id="sdkContainer"></div>
    <!-- <iframe
      id="digital_page"
      v-if="isShowDigitalPerson"
      src="https://iframetester.com/"
      height="450"
      width="600"
      frameborder="no"
      border="0"
      marginwidth="0"
      marginheight="0"
      scrolling="no"
      allowtransparency="yes"
    ></iframe> -->
    <iframe
      v-if="isShowDigitalPerson"
      id="digital_page"
      allow="microphone;"
      :src="digitalHuman"
      :height="digitalSize.height"
      :width="digitalSize.width"
      frameborder="no"
      border="0"
      marginwidth="0"
      marginheight="0"
      scrolling="no"
      allowtransparency="yes"
    ></iframe>
    <div class="listBox" v-show="viewer1Show && !isLand">
      <ul id="viewer_lsyx">
        <li
@@ -12,6 +40,7 @@
        </li>
      </ul>
    </div>
    <layerTreeTwoScreen v-if="layerTreeTwoScreen" />
    <!-- <div id="bottomInfo" v-html="bottomInfo"></div> -->
    <div
@@ -67,6 +96,10 @@
import "animate.css";
import Bus from "@tools/Bus";
import mapData from "../../../static/mapData";
import mapMsg from "../../assets/js/mapMsg";
import vueEvents from "@/utils/vueEvent.js";
let activeLi, nLayer, LWLayer;
export default {
  name: "viewer",
@@ -88,6 +121,8 @@
      scale: "1",
      offset: "0%",
      radio: 3,
      digitalHuman: null,
      digitalSize: {},
      arr: [
        2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
        2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
@@ -96,6 +131,9 @@
  },
  computed: {
    ...mapState(["viewer1Show", "isLand", "layerTreeTwoScreen", "cesiumInit"]),
    isShowDigitalPerson() {
      return this.$store.state.isShowDigitalPerson;
    },
  },
  watch: {
    viewer1Show(newvalue, oldvalue) {
@@ -116,15 +154,22 @@
    },
  },
  mounted() {
    this.digitalHuman = window.digitalHumanURL;
    this.digitalSize = window.digitalSize;
    let pathName = window.location.pathname.split("/");
    let StaticFileBaseUrl;
    if (pathName.length != 2) {
      StaticFileBaseUrl = `../../../${pathName[1]}/static/CimSDK/`;
    } else {
      StaticFileBaseUrl = `../../../static/CimSDK/`;
    }
    this.$nextTick(function () {
      let that = this;
      //*********北京sdk************
      window.sgworld = new SmartEarth.EarthCtrl(
        "sdkContainer",
        {
          StaticFileBaseUrl: "../../../static/CimSDK/",
          // StaticFileBaseUrl: "../../../SW/static/CimSDK/",
          // StaticFileBaseUrl: "../../../YZXNCS/static/CimSDK/",
          StaticFileBaseUrl: StaticFileBaseUrl,
        },
        {},
        {},
@@ -164,6 +209,7 @@
              },
              duration: 5, //飞行时间8s
            });
            // console.log("加载完成");
          }, 14000);
          that.setCesiumInit(true);
        }
@@ -179,6 +225,10 @@
      // Viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;
      Viewer.scene.globe.translucency.frontFaceAlpha = 0.5;
      Viewer.scene.globe.undergroundColor = undefined;
      mapMsg.init();
      // rpc.clickToCoordinates();
      // mapMsg.setTime();
      //开启编辑并启用属性弹窗
      sgworld.Creator.SimpleGraphic.setEdit(true, {
        editProp: true,
@@ -594,7 +644,12 @@
  border-radius: 10px;
  /* box-shadow: 0px 0px 5px 3px #fff; */
}
#digital_page {
  position: absolute;
  left: 0;
  bottom: 120px;
  z-index: 10;
}
/* #switchImagerLayer:before {
  content: "";
  position: absolute;
src/components/map/viewer1.vue
@@ -285,6 +285,13 @@
    },
  },
  mounted() {
    let pathName = window.location.pathname.split("/");
    let StaticFileBaseUrl;
    if (pathName.length != 2) {
      StaticFileBaseUrl = `../../../${pathName[1]}/static/CimSDK/`;
    } else {
      StaticFileBaseUrl = `../../../static/CimSDK/`;
    }
    let size = this.detectZoom();
    this.scale = (100 / size).toFixed(2);
    this.offset = "-" + ((size - 100) / 2).toFixed(2) + "%";
@@ -308,9 +315,7 @@
      window.sgworld1 = new SmartEarth.EarthCtrl(
        "sdkContainer1",
        {
          StaticFileBaseUrl: "../../static/CimSDK/",
          // StaticFileBaseUrl: "../../../SW/static/CimSDK/",
          // StaticFileBaseUrl: "../../../YZXNCS/static/CimSDK/",
          StaticFileBaseUrl: StaticFileBaseUrl,
        },
        {},
        null,
@@ -548,7 +553,8 @@
            }
            axios
              .get(
                "http://10.10.4.115:8022/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" +
                "http://10.10.4.116:8089/cs/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" +
                // "http://10.10.4.115:8022/geowinmap_xncs/ds?r=0.9158559377752831&serviceproviderid=map.vectorserviceprovider&serviceid=queryfeature&featcls=225%25E8%258C%2583%25E5%259B%25B4%25E5%2588%2586%25E5%258C%25BA%25E8%25A7%2584%25E5%2588%2592.geojson&lng=" +
                  p.lon +
                  "&lat=" +
                  p.lat +
@@ -596,7 +602,8 @@
                if (center.lon != 0 && center.lat != 0) {
                  axios
                    .get(
                      "http://10.10.4.115:8022//poisearch/guihuacon/getInfo?ydbm=" +
                      "http://10.10.4.116:8089/cs/poisearch/guihuacon/getInfo?ydbm=" +
                      // "http://10.10.4.115:8022//poisearch/guihuacon/getInfo?ydbm=" +
                        response.data.NO
                    )
                    .then(
src/components/menu/bottom-menu.vue
@@ -1,7 +1,9 @@
<template>
  <div class="specialTool">
    <div class="bottomwrapper" :class="{ 'top-btn-active': viewer1Show && isLand }">
    <div
      class="bottomwrapper"
      :class="{ 'top-btn-active': viewer1Show && isLand }"
    >
      <div class="imgbox" @click="tdglHandle">
        <img src="@assets/img/new/tudiguanli.png" alt="" />
      </div>
@@ -10,7 +12,11 @@
      </div>
    </div>
    <div class="bottomwrapper" @click="historyHandle" :class="{ 'top-btn-active': viewer1Show && !isLand }">
    <div
      class="bottomwrapper"
      @click="historyHandle"
      :class="{ 'top-btn-active': viewer1Show && !isLand }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/chengshigengxin.png" alt="" />
      </div>
@@ -18,7 +24,11 @@
        <span> åŽ†å²å½±åƒ </span>
      </div>
    </div>
    <div class="bottomwrapper csbj" @click="spjkHandle" :class="{ 'top-btn-active': !isShowSPJK }">
    <div
      class="bottomwrapper csbj"
      @click="spjkHandle"
      :class="{ 'top-btn-active': !isShowSPJK }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/spjk.png" alt="" />
      </div>
@@ -27,8 +37,11 @@
      </div>
    </div>
    <div class="bottomwrapper spjk" @click="shoujixinling" :class="{ 'top-btn-active': !isShowSjxl }">
    <div
      class="bottomwrapper spjk"
      @click="shoujixinling"
      :class="{ 'top-btn-active': !isShowSjxl }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/sjxl.png" alt="" />
      </div>
@@ -36,7 +49,6 @@
        <span> æ‰‹æœºä¿¡ä»¤ </span>
      </div>
    </div>
    <div class="bottomwrapper jxmx">
      <el-dropdown trigger="click" @command="handleCommand">
@@ -46,11 +58,19 @@
        <div class="textbox">
          <span> ç²¾æ¨¡ç¤ºèŒƒ </span>
        </div>
        <el-dropdown-menu slot="dropdown" :append-to-body="false" class="popper-dropdown">
        <el-dropdown-menu
          slot="dropdown"
          :append-to-body="false"
          class="popper-dropdown"
        >
          <el-dropdown-item command="fcfhHandle">分层分户</el-dropdown-item>
          <!-- <el-dropdown-item command="sprhHandle">场景视频融合</el-dropdown-item> -->
          <el-dropdown-item v-if="isShowSPRH" command="jiqirendahui">场景视频融合</el-dropdown-item>
          <el-dropdown-item v-else command="jiqirendahui">关闭视频融合</el-dropdown-item>
          <el-dropdown-item v-if="isShowSPRH" command="jiqirendahui"
            >场景视频融合</el-dropdown-item
          >
          <el-dropdown-item v-else command="jiqirendahui"
            >关闭视频融合</el-dropdown-item
          >
        </el-dropdown-menu>
      </el-dropdown>
    </div>
@@ -65,33 +85,70 @@
            @input="updateVideo"
          >
          </el-slider> -->
          <el-slider :min="0" :max="360" v-model="robotVideoList[3].heading" @input="updateVideo">
          <el-slider
            :min="0"
            :max="360"
            v-model="robotVideoList[3].heading"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="俯仰角度:">
          <el-slider :min="-89" :max="89" v-model="robotVideoList[3].pitch" @input="updateVideo">
          <el-slider
            :min="-89"
            :max="89"
            v-model="robotVideoList[3].pitch"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="水平视角:">
          <el-slider :min="30" :max="120" v-model="robotVideoList[3].horizonAngle" @input="updateVideo">
          <el-slider
            :min="30"
            :max="120"
            v-model="robotVideoList[3].horizonAngle"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="垂直视角:">
          <el-slider :min="30" :max="120" v-model="robotVideoList[3].verticalAngle" @input="updateVideo">
          <el-slider
            :min="30"
            :max="120"
            v-model="robotVideoList[3].verticalAngle"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="最远投射:">
          <el-slider :min="100" :max="300" v-model="robotVideoList[3].far" @input="updateVideo">
          <el-slider
            :min="100"
            :max="300"
            v-model="robotVideoList[3].far"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="透明度:">
          <el-slider :step="0.1" :min="0" :max="1" v-model="robotVideoList[3].alpha" @input="updateVideo">
          <el-slider
            :step="0.1"
            :min="0"
            :max="1"
            v-model="robotVideoList[3].alpha"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
      </el-form>
    </div>
    <div class="textAreaBox" v-if="isShowTextArea">
      <el-input
        v-model="input"
        placeholder="请输入内容"
        clearable
        @keyup.enter.native="sendCommand($event)"
      ></el-input>
    </div>
  </div>
</template>
@@ -108,9 +165,23 @@
  display: flex;
  justify-content: space-between;
}
.textAreaBox {
  background: rgba(5, 39, 126, 0.7);
  padding: 10px;
  /* width: 375px; */
  position: absolute;
  bottom: 165px;
  color: #fff;
  left: 50%;
  transform: translateX(-50%);
  z-index: 99999;
}
.textAreaBox .el-form-item {
  margin: 0;
}
.textAreaBox .el-input {
  width: 300px;
}
.specialTool .bottomwrapper:nth-of-type(3) {
  /* background: red; */
  position: relative;
@@ -289,16 +360,15 @@
let video4;
let heatMapItem;
import { mapState, mapMutations } from "vuex";
import { queryBySquare } from "@/utils/request";
import { queryBySquare } from "@/api/api";
import Bus from "../tools/Bus";
import { roman } from "../../assets/json/index.js";
import URLInCode from "@/assets/js/urlInCode";
import axios from "axios";
export default {
  components: {
  },
  components: {},
  name: "bottom-menu",
  data() {
    return {
@@ -307,7 +377,7 @@
      isShowSPRH: true,
      csbjShow: false,
      jxmxShow: false,
      input: "",
      romanOption: [
        { name: "核心区" },
        { name: "景观绿地" },
@@ -435,6 +505,12 @@
  },
  computed: {
    ...mapState(["viewer1Show", "isLand", "yqfk", "qyEchartsShow"]),
    isShowTextArea() {
      if (this.$store.state.isShowTextArea) {
        this.input = "";
      }
      return this.$store.state.isShowTextArea;
    },
  },
  methods: {
    ...mapMutations(["setViewer1Show", "setIsLand", "setqyEchartsShow"]),
@@ -450,8 +526,13 @@
          break;
      }
    },
    handleCommand(command) {
    sendCommand(event) {
      mapMsg.testMsg(event.target.value);
      // é˜»æ­¢é»˜è®¤è¡Œä¸ºï¼ˆå¦‚果需要的话)
      event.preventDefault();
    },
    handleCommand(command) {
      switch (command) {
        case "spjkHandle":
          this.spjkHandle();
@@ -570,7 +651,6 @@
      );
    },
    switchMenu(id) {
      if (id != 1) {
        this.setViewer1Show(false);
      }
@@ -594,10 +674,8 @@
      }
    },
    closeSjxl() {
        this.isShowSjxl = true;
        this.$parent.signallingShow = false;
      this.isShowSjxl = true;
      this.$parent.signallingShow = false;
    },
    // historyHandle() {
    //   this.$store.commit("showHistory", true);
src/components/menu/leftMenu.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
<template>
  <div class="menuBox">
    <div v-if="list.length == 0 && val == null"></div>
    <div class="boxCntent" v-else-if="list.length == 0">
      {{ val }} æ•°æ®æ­£åœ¨è¡¥å……中
      <!-- <div class="close" @click.stop="closelist"></div> -->
    </div>
    <ul class="boxCntent" v-if="list.length != 0">
      <!-- <div class="close" @click.stop="closelist"></div> -->
      <div>
        <li v-for="(item, index) in list" :key="index">
          <div>
            {{ item.name }}
          </div>
          <div v-if="item.address">地址: {{ item.address }}</div>
          <div v-if="item.code">地块编号: {{ item.code }}</div>
        </li>
      </div>
    </ul>
  </div>
</template>
<script>
import store from "@/utils/store";
import rpc from "@/assets/js/rpc";
import vueEvents from "@/utils/vueEvent.js";
export default {
  data() {
    return {
      list: [],
      val: null,
    };
  },
  mounted() {
    vueEvents.$on("queryData", (res) => {
      this.list = [];
      this.val = null;
      if (res) {
        if (store.queryLayer.data) {
          this.list = store.queryLayer.data;
        }
        this.val = store.queryLayer.val;
      }
    });
  },
  methods: {
    closelist() {
      vueEvents.$emit("queryData", false);
      rpc.setClearAllMsg();
      store.queryLayer.data = [];
    },
  },
};
</script>
<style scoped>
.menuBox {
  border-radius: 3px;
  background-image: url("~@/assets/img/new/listbg.png");
  background-size: 100% 100%;
  position: absolute;
  z-index: 30;
  bottom: 130px;
  right: 70px;
  width: 300px;
  color: white;
  font-family: Source Han Sans SC;
  font-size: 16px;
}
.close {
  pointer-events: all;
  width: 28px;
  height: 28px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url("../poplayer/img/close.png");
  cursor: pointer;
}
.menuBox .boxCntent {
  margin: 1%;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
}
.menuBox li {
  padding: 10px;
  border: 1px solid gray;
  margin-top: 2px;
}
</style>
src/components/menu/tools/special.vue
@@ -237,6 +237,15 @@
}
</style>
<script>
import Vue from "vue";
import store from "@/utils/store";
import poiLayer from "@/components/poplayer/main";
import rpc from "@/assets/js/rpc";
import mapData from "../../../../static/mapData";
import mapMsg from "@/assets/js/mapMsg";
import vueEvents from "@/utils/vueEvent.js";
let PoiLayerConstructor = Vue.extend(poiLayer);
import axios from "axios";
import { mapState, mapMutations } from "vuex";
import Bus from "../../tools/Bus";
@@ -244,19 +253,17 @@
import URLInCode from "@/assets/js/urlInCode";
import keyName from "@/utils/poiKeys";
import LayerField from "@/utils/NameConf";
let handler;
let handler, buildingPolygon, objdata, video, promiseS3M;
window.divPoint3 = null;
window.instance = null;
let tooltipHTML;
window.divPoint1 = null;
window.pickFeature = null;
window.imgUrl = null;
window.scale = null;
let buildingPolygon;
let tooltip;
let lineArr = [];
let video;
let promiseS3M;
//交通图层
let panoramaLayer;
window.panoramaLayer = null;
export default {
  name: "special",
  data() {
src/components/poplayer/coord.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<template>
  <div v-if="state.show">
    <location :list="list"></location>
  </div>
</template>
<script>
import location from "./location.vue";
import store from "@/utils/store";
export default {
  name: "Main",
  components: {
    location,
  },
  data() {
    return {
      state: store.localLayer,
    };
  },
  mounted() {
  },
};
</script>
<style scoped>
</style>
src/components/poplayer/img/bg.png
src/components/poplayer/img/bg1.png
src/components/poplayer/img/bgColor.png
src/components/poplayer/img/bgSelect.png
src/components/poplayer/img/bgSelect1.png
src/components/poplayer/img/close.png
src/components/poplayer/img/policeAround.png
src/components/poplayer/img/videoAround.png
src/components/poplayer/location.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
<template>
  <div style="z-index: 100000000">
    <div class="Poplayer">
      <div class="close" @click.stop="closehandle"></div>
      <div class="content">
        <div class="ssdw">{{ state.list.name }}</div>
        <div class="lxr" v-if="state.list.address">
          åœ°å€ï¼š{{ state.list.address }}
        </div>
        <div class="lxr" v-if="state.list.code">
          åœ°å—编号:{{ state.list.code }}
        </div>
        <div class="lxr" v-if="state.list.area">
          åœ°å—面积:{{ state.list.area }} å¹³æ–¹ç±³
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import store from "@/utils/store";
import keys from "@/utils/poiKeys";
import rpc from "../../assets/js/rpc";
import mapData from "../../../static/mapData";
export default {
  name: "Main",
  components: {},
  props: {
    keys: {
      type: Object,
    },
    list: {
      type: Object,
    },
  },
  data() {
    return {
      state: store.localLayer,
      KEY: {},
    };
  },
  computed: {},
  mounted() {
    if (this.list) {
      this.state.list = this.list;
    }
    // this.KEY = keys[this.state.list.POITYPE];
  },
  watch: {
    "state.list": function (val) {
      this.KEY = keys[val.POITYPE];
    },
  },
  methods: {
    closehandle() {
      if (window.pickFeature && window.pickFeature.primitive) {
        window.pickFeature.primitive.image = window.imgUrl;
        window.pickFeature.primitive.scale = window.scale;
        window.pickFeature = null;
      }
      store.setlocalLayerListAction({});
      divPoint3 && divPoint3.deleteObject();
      store.setlocalLayerShowAction(false);
      if (window.tdglLine) {
        sgworld.Creator.DeleteObject(window.tdglLine);
        window.tdglLine = null;
      }
      rpc.setLacationLineClear();
    },
  },
};
</script>
<style scoped>
.Poplayer {
  min-width: 380px;
  max-width: 580px;
  /* width: 380px; */
  /* min-height: 183px; */
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url("./img/bg.png");
  z-index: 999;
  color: #fff;
  font-family: SourceHanSansSC-R;
  /* padding: 20px; */
  padding: 10px 5px 10px 5px;
  box-sizing: border-box;
  font-size: 16px;
  pointer-events: all;
}
.title {
  text-align: center;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 4px;
  padding-left: 26px;
}
/* .title {
  display: none;
  width: 100%;
  height: 30px;
  line-height: 30px;
  padding-left: 20px;
  margin-top: 10px;
} */
.close {
  pointer-events: all;
  width: 28px;
  height: 28px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url("./img/close.png");
  float: right;
  margin-top: 8px;
  margin-right: 15px;
  cursor: pointer;
}
.content {
  width: 100%;
  margin: auto;
}
.con-item {
  width: 90%;
  overflow: hidden;
  margin-bottom: 7px;
  margin-left: 25px;
  margin-right: 20px;
  word-break: break-all;
}
.name {
  /* min-width: 100px; */
  float: left;
}
.value {
  max-width: 400px;
  float: left;
  color: aqua;
}
.ssdw {
  width: 94%;
  margin: 20px auto 0;
  text-align: center;
  color: #f2be10;
  font: bold 18px sans-serif;
}
.lxr {
  margin: 13px auto 0;
  max-width: 80%;
  text-align: center;
  color: #fff;
  font: bold 15px sans-serif;
}
.dz {
  margin: 13px auto 20px;
  max-width: 80%;
  text-align: center;
  color: #fff;
  font: bold 15px sans-serif;
}
</style>
src/components/poplayer/main.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<template>
  <div v-if="state.show">
      <poplayer :list="list" />
  </div>
</template>
<script>
import poplayer from "./poplayer.vue";
import store from "@/utils/store";
export default {
  name: "Main",
  components: {
    poplayer,
  },
  data() {
    return {
      state: store.Poplayer,
    };
  },
  mounted() {
  },
};
</script>
<style scoped>
</style>
src/components/poplayer/poplayer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
<template>
  <div style="z-index: 100000000">
    <div class="Poplayer">
      <div class="close" @click.stop="closehandle"></div>
      <!-- <div class="title">点位详情</div> -->
      <div class="content">
        <div class="ssdw">{{ state.list[KEY["所属单位"]] }}</div>
        <div class="lxr">联系人:{{ state.list[KEY["联系人"]] }}</div>
        <div class="dz">地址:{{ state.list[KEY["地址"]] }}</div>
        <!-- <div class="con-item" v-for="(item, index) in KEY" :key="index">
          <span class="name">{{ index }}:</span>
          <span class="value">{{ state.list[item] }}</span>
        </div> -->
      </div>
    </div>
  </div>
</template>
<script>
import store from "@/utils/store";
import keys from "@/utils/poiKeys";
export default {
  name: "Main",
  components: {},
  props: {
    keys: {
      type: Object,
    },
    list: {
      type: Object,
    },
  },
  data() {
    return {
      state: store.Poplayer,
      KEY: {},
    };
  },
  computed: {},
  mounted() {
    if (this.list) {
      this.state.list = this.list;
    }
    this.KEY = keys[this.state.list.POITYPE];
  },
  watch: {
    "state.list": function (val) {
      this.KEY = keys[val.POITYPE];
    },
  },
  methods: {
    closehandle() {
      if (window.pickFeature && window.pickFeature.primitive) {
        window.pickFeature.primitive.image = window.imgUrl;
        window.pickFeature.primitive.scale = window.scale;
        window.pickFeature = null;
      }
      store.setPoplayerListAction({});
      divPoint3 && divPoint3.deleteObject();
      store.setPoplayerShowAction(false);
      if (window.tdglLine) {
        sgworld.Creator.DeleteObject(window.tdglLine);
        window.tdglLine = null;
      }
    },
  },
};
</script>
<style scoped>
.Poplayer {
  min-width: 380px;
  max-width: 580px;
  /* width: 380px; */
  /* min-height: 183px; */
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url("./img/bg.png");
  z-index: 999;
  color: #fff;
  font-family: SourceHanSansSC-R;
  /* padding: 20px; */
  padding: 10px 5px 10px 5px;
  box-sizing: border-box;
  font-size: 16px;
  pointer-events: all;
}
.title {
  text-align: center;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 4px;
  padding-left: 26px;
}
/* .title {
  display: none;
  width: 100%;
  height: 30px;
  line-height: 30px;
  padding-left: 20px;
  margin-top: 10px;
} */
.close {
  pointer-events: all;
  width: 28px;
  height: 28px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url("./img/close.png");
  float: right;
  margin-top: 8px;
  margin-right: 15px;
  cursor: pointer;
}
.content {
  width: 100%;
  margin: auto;
}
.con-item {
  width: 90%;
  overflow: hidden;
  margin-bottom: 7px;
  margin-left: 25px;
  margin-right: 20px;
  word-break: break-all;
}
.name {
  /* min-width: 100px; */
  float: left;
}
.value {
  max-width: 400px;
  float: left;
  color: aqua;
}
.ssdw {
  width: 94%;
  margin: 20px auto 0;
  text-align: center;
  color: #f2be10;
  font: bold 18px sans-serif;
}
.lxr {
  margin: 13px auto 0;
  max-width: 80%;
  text-align: center;
  color: #fff;
  font: bold 15px sans-serif;
}
.dz {
  margin: 13px auto 20px;
  max-width: 80%;
  text-align: center;
  color: #fff;
  font: bold 15px sans-serif;
}
</style>
src/components/right/right-bottom.vue
@@ -5,6 +5,40 @@
        <el-tooltip
          class="item"
          effect="dark"
          content="数字人"
          placement="left"
          popper-class="item_tooltip"
        >
          <div
            class="legend-bg"
            @click="showDigitalPerson"
            :class="{ active: isShowDP }"
          >
            <img class="legendImg" src="@/assets/img/new/数字人.png" />
          </div>
        </el-tooltip>
      </div>
      <div class="mapTool">
        <el-tooltip
          class="item"
          effect="dark"
          content="文本操作"
          placement="left"
          popper-class="item_tooltip"
        >
          <div
            class="legend-bg"
            @click="showTextArea"
            :class="{ active: isShowTA }"
          >
            <img class="legendImg" src="@/assets/img/new/文本输入.png" />
          </div>
        </el-tooltip>
      </div>
      <div class="mapTool">
        <el-tooltip
          class="item"
          effect="dark"
          content="亦庄新区范围"
          placement="left"
          popper-class="item_tooltip"
@@ -207,10 +241,13 @@
  background-image: url("~@/assets/img/new/leftCircle.png");
  background-size: 100%;
  background-color: transparent;
  width:  35px;
  height:  35px;
  width: 35px;
  height: 35px;
  position: relative;
  cursor: pointer;
}
.active {
  background-image: url("~@/assets/img/new/leftCircle-y.png");
}
.tcqp {
  background-color: rgba(0, 138, 252, 0.6);
@@ -312,6 +349,8 @@
    return {
      isWideAngle: false,
      wideAngle: 1.04,
      isShowDP: false,
      isShowTA: false,
      clickIndex: 0,
      camera: {
        position: [116.540659, 39.744945, 50000],
@@ -356,7 +395,14 @@
      let p = sgworld.Navigate.getCameraInfo();
      console.log(p);
    },
    showDigitalPerson() {
      this.isShowDP = !this.isShowDP;
      this.$store.commit("showDigitalPerson", this.isShowDP);
    },
    showTextArea() {
      this.isShowTA = !this.isShowTA;
      this.$store.commit("showTextArea", this.isShowTA);
    },
    maskingOut() {
      if (!window.maskinglayer) {
        window.maskinglayer = sgworld.Creator.createImageryProvider(
src/components/right/right-top.vue
@@ -788,7 +788,7 @@
import common from "@/components/common";
import { mapState, mapMutations } from "vuex";
import Bus from "../tools/Bus";
import { queryBySquare } from "@/utils/request";
import { queryBySquare } from "@/api/api";
import FCFH from "@/components/right/FCFH";
//交通图层
src/router/index.js
@@ -30,12 +30,13 @@
];
const router = new Router({
  mode: "history",
  base: '/SW',//测试版 æ‰“包时解开
  // base: '/SW',//测试版 æ‰“包时解开
  base: '/TEST',//测试版 æ‰“包时解开
  // base: '/YZXNCS',//正式版 æ‰“包时解开
  routes,
});
router.beforeEach((to, from, next) => {
  // next();
  // next();
  // åŽ»ç™»å½•é¡µï¼Œç›´æŽ¥è·³è½¬
  if (to.path === "/login") {
    next();
src/store/index.js
@@ -29,6 +29,8 @@
    cesiumInit: false, //地图是否初始化完成
    showSetting: false,
    isShowHistory: false,
    isShowTextArea: false,
    isShowDigitalPerson: false,
    description: {},
    selectedLayers: [],
    userId: "",
@@ -47,6 +49,12 @@
    showHistory(state, b) {
      state.isShowHistory = b
    },
    showTextArea(state, b) {
      state.isShowTextArea = b
    },
    showDigitalPerson(state, b) {
      state.isShowDigitalPerson = b
    },
    // saveData(state, b) {
    //   state.layerData = b
    // },
src/utils/request.js
@@ -2,8 +2,9 @@
// import { Message } from "element-ui";
// import router from "../router"
// create an axios instance
const service = axios.create({
// åŽå°8089
const request = axios.create({
    baseURL: 'http://10.10.4.116:8089/', // api的base_url
    timeout: 35000, // è¯·æ±‚è¶…æ—¶æ—¶é—´
    headers: {
@@ -11,29 +12,9 @@
    },
    withCredentials: true,
});
const GISSERVER = axios.create({
    baseURL: 'http://10.10.4.116:8070/gisserver/', // api的base_url
    timeout: 35000, // è¯·æ±‚è¶…æ—¶æ—¶é—´
});
// gisserver åå­—查询
// export function queryPOI(servername, layer, name) {
//     return GISSERVER.get("wfsserver/" + servername + "?version=1.3.0&request=GetFeature&format=json&typename=" + layer + "&propertyname=*&filter=%3CFilter%3E%3CPropertyIsLike+wildCard%3D%22*%22%3E%3CPropertyName%3E%E4%BA%95%E7%BC%96%E5%8F%B7%3C%2FPropertyName%3E%3CLiteral%3E" + name + "%3C%2FLiteral%3E%3C%2FPropertyIsLike%3E%3C%2FFilter%3E");
// }
// // gisserver èŒƒå›´æŸ¥è¯¢
export function queryBySquare(url, layer, area) {
    return GISSERVER.get(url, {
        params: {
            version: '1.3.0',
            request: 'GetFeature',
            typename: layer,
            propertyname: '*',
            format: "json",
            filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Intersects><ogc:PropertyName /><gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>${area}</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></ogc:Intersects></ogc:Filter>`,
        }
    });
}
// request interceptor
service.interceptors.request.use(
request.interceptors.request.use(
    (config) => {
        // è¯·æ±‚携带token
        const token = window.localStorage.getItem('TokenKey');
@@ -46,7 +27,7 @@
        return Promise.reject(error);
    }
);
service.interceptors.response.use(
request.interceptors.response.use(
    (response) => {
        //登录之后有token
        if (window.localStorage.getItem('TokenKey') != null) {
@@ -69,4 +50,4 @@
        return Promise.reject(error);
    }
);
export default service;
export default request;
src/utils/searchQY.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
import axios from "axios";
// import { Message } from "element-ui";
import router from "../router"
// ä¼ä¸šæŽ¥å£8086
const request = axios.create({
    baseURL: 'http://10.10.4.116:8086/', // api的base_url
    timeout: 35000, // è¯·æ±‚è¶…æ—¶æ—¶é—´
    headers: {
        "content-type": "application/json;charset=UTF-8",
    },
    withCredentials: true,
});
// request interceptor
request.interceptors.request.use(
    (config) => {
        // è¯·æ±‚携带token
        const token = window.localStorage.getItem('TokenKey');
        if (token) {
            config.headers["Authorization"] = token;
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);
request.interceptors.response.use(
    (response) => {
        //登录之后有token
        if (window.localStorage.getItem('TokenKey') != null) {
            // console.log(response);
            // if (response.data.code !== 200) {
            //     router.push('/login');
            //     localStorage.removeItem("TokenKey");
            //     localStorage.removeItem("TokenTime");
            // }
            // //token过期返回登录页
            // if (response.data.code == 500104) {
            //     router.push('/login')
            //     localStorage.removeItem("TokenKey");
            //     localStorage.removeItem("TokenTime");
            // }
        }
        return response.data;
    },
    (error) => {
        return Promise.reject(error);
    }
);
export default request;
src/utils/service.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
import axios from "axios";
// import mapData from "../../static/mapData";
import router from "../router"
// 121:8070
const service = axios.create({
    // baseURL: 'https://skyzt.bda.gov.cn/dataApi/gisserver/', // api的base_url
    baseURL: 'http://10.10.4.121:8070/gisserver/', // api的base_url
    timeout: -1, // è¯·æ±‚è¶…æ—¶æ—¶é—´
    headers: {
        "content-type": "application/json;charset=UTF-8",
    },
    withCredentials: false,
});
// request interceptor
service.interceptors.request.use(
    (config) => {
        // è¯·æ±‚携带token
        const token = window.localStorage.getItem('TokenKey');
        if (token) {
            config.headers["Authorization"] = token;
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);
service.interceptors.response.use(
    (response) => {
        //登录之后有token
        if (window.localStorage.getItem('TokenKey') != null) {
            // if (response.data.code !== 200) {
            //     router.push('/login');
            //     localStorage.removeItem("TokenKey");
            //     localStorage.removeItem("TokenTime");
            // }
            // //token过期返回登录页
            // if (response.data.code == 500104) {
            //     router.push('/login')
            //     localStorage.removeItem("TokenKey");
            //     localStorage.removeItem("TokenTime");
            // }
        }
        return response.data;
    },
    (error) => {
        return Promise.reject(error);
    }
);
export default service;
src/utils/store.js
@@ -4,6 +4,15 @@
        list: {},
        show: false
    },
    localLayer: {
        list: {},
        show: false
    },
    queryLayer: {
        data: null,
        isShow: false,
        val: null,
    },
    setPoplayerListAction(newValue) {
        if (this.debug) { }
        this.Poplayer.list = newValue
@@ -12,6 +21,14 @@
        if (this.debug) { }
        this.Poplayer.show = newValue
    },
    setlocalLayerListAction(newValue) {
        if (this.debug) { }
        this.localLayer.list = newValue
    },
    setlocalLayerShowAction(newValue) {
        if (this.debug) { }
        this.localLayer.show = newValue
    },
};
export default store;
src/utils/vueEvent.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
import Vue from 'vue'
var vueEvents = new Vue();
export default vueEvents;
static/SmartEarthSDK/Workers/image/1.png
static/SmartEarthSDK/Workers/image/bgbox.png
static/SmartEarthSDK/Workers/image/tuli.zip
Binary files differ
static/SmartEarthSDK/Workers/image/ÒàÆó·þÎñ¸Û.png
static/SmartEarthSDK/Workers/image/Ô°Çø·þÎñÕ¾.png
static/SmartEarthSDK/Workers/image/ÉçÇø·þÎñÕ¾.png
static/SmartEarthSDK/Workers/image/¾­¿ªÇøÕþÎñ·þÎñÖÐÐÄ.png
static/SmartEarthSDK/Workers/image/½ÖµÀ.png
static/conf.js
@@ -1,5 +1,9 @@
window.GIS_IP = 'http://10.10.4.116:8070'
window.digitalHumanURL = "https://szr.bda.gov.cn/human/#/yizhuang/b1401669626c4b1faf7a9940be866b2a?model=yingshang"
window.digitalSize = {
  width: "600",
  height: "450"
}
window.KEYPOIS = [{
  lon: 116.496476,
  lat: 39.801245,
@@ -20,4 +24,4 @@
  lon: 116.572530,
  lat: 39.762424,
  name: '北京市通州区物流基地管理委员会'
}, ]
},]
static/layers 12.1.json
ÎļþÒÑɾ³ý
static/layers-1208.json
ÎļþÒÑɾ³ý
static/layers-zj.json
ÎļþÒÑɾ³ý
static/layers.json
@@ -3843,7 +3843,7 @@
                    "alpha": 1,
                    "zIndex": 3,
                    "Level": "9,20",
                    "checked": true,
                    "checked": false,
                    "rename": false,
                    "flyTo": [
                        "116.51352",
@@ -3869,7 +3869,7 @@
                        "0.0",
                        "-89.8"
                    ],
                    "checked": true,
                    "checked": false,
                    "rename": false
                },
                {
static/layers_zs.json
ÎļþÒÑɾ³ý
static/mapData.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
const mapData = {
    // apiUrl: 'https://skyzt.bda.gov.cn/',    //接口调用地址
    // apiUrl1: 'https://skyzt.bda.gov.cn/dataApi/PoiExcel/',    //接口调用地址
    apiUrl: 'https://10.10.4.116/',    //接口调用地址
    apiUrl1: 'https://10.10.4.116/PoiExcel',    //接口调用地址
    mapRest: {
        lng: 116.502368, //经度0
        lat: 39.791361, //纬度
        alt: 225.59, //高度
        heading: 328.5, //偏移角度
        pitch: -27.5, //俯仰角度
        roll: 0.0 //旋转角度
        // lng:  -2189204.3052408984, //经度0
        // lat:  4391299.928900704, //纬度
        // alt: 4061302.0742125358, //高度
        // heading: 2.706017718142978, //偏移角度
        // pitch: -0.06450211339012002, //俯仰角度
        // roll: 0.0000010046555702913906 //旋转角度
    },
    //动画导航点
    animaNavigation: [
        {
            lng: 116.499038465066,
            lat: 39.79379384829494,
            height: 50,
            flytime: 15
        },
        {
            lng: 116.50131516549982,
            lat: 39.794912006682736,
            height: 50,
            flytime: 15
        },
        {
            lng: 116.50385532465293,
            lat: 39.79171002696756,
            height: 50,
            flytime: 15
        },
        {
            lng: 116.50153479330987,
            lat: 39.790688924207245,
            height: 50,
            flytime: 15
        },
        {
            lng: 116.499038465066,
            lat: 39.79379384829494,
            height: 50,
            flytime: 15
        },
        // {
        //     lng: 116.49950473277674,
        //     lat: 39.80189614394973,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.50864967659528,
        //     lat: 39.79067016691884,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.51750657045278,
        //     lat: 39.779885531673784,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.51491897145428,
        //     lat: 39.777801533477216,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.50928535631186,
        //     lat: 39.7849775227156,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.50450607791721,
        //     lat: 39.790780793020865,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.50176984584178,
        //     lat: 39.794178695978616,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.49910758277029,
        //     lat: 39.79756565468724,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.49371390522775,
        //     lat: 39.80404038134903,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.49681980501585,
        //     lat: 39.805157599150505,
        //     height: 50,
        //     flytime: 15
        // },
        // {
        //     lng: 116.49938716960466,
        //     lat: 39.80200828692789,
        //     height: 50,
        //     flytime: 15
        // }
    ],
    //定位弹窗
    pointPop: {
        lng: 116.50450607791721,
        lat: 39.790780793020865,
        height: 50,
        flytime: 15,
        text: "这是一条测试数据"
    },
    msgMach: {
        rest: ['复位', '还原', '初始化', '初始位置'],
        lineRoam: ['漫游', '导航'],
        closeRoam: ['停止漫游', '停止导航'],
        localPage: ['一', '二', '三', '四', '五', '六', '1', '2', '3', '4', '5', '6'],
        acceptMsg: ['定位', '奔驰', '京东', '小米', '博大大厦', '博大', '第', '园', '信息技术', '生物医药', '机器人', '汽车',]
    }
};
export default mapData;
static/polyline.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
/**
 * @description:动态立体墙材质
 * @date: 2022-02-11
 */
//动态墙材质
function DynamicWallMaterialProperty(options) {
    // é»˜è®¤å‚数设置
    this._definitionChanged = new Cesium.Event();
    this._color = undefined;
    this._colorSubscription = undefined;
    this.color = options.color;
    this.duration = options.duration;
    this.trailImage = options.trailImage;
    this._time = (new Date()).getTime();
}
Object.defineProperties(DynamicWallMaterialProperty.prototype, {
    isConstant: {
        get: function () {
            return false;
        }
    },
    definitionChanged: {
        get: function () {
            return this._definitionChanged;
        }
    },
    color: Cesium.createPropertyDescriptor('color')
});
DynamicWallMaterialProperty.prototype.getType = function (time) {
    return 'DynamicWall';
};
DynamicWallMaterialProperty.prototype.getValue = function (time, result) {
    if (!Cesium.defined(result)) {
        result = {};
    }
    result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color);
    if (this.trailImage) {
        result.image = this.trailImage;
    } else {
        result.image = Cesium.Material.DynamicWallImage
    }
    if (this.duration) {
        result.time = (((new Date()).getTime() - this._time) % this.duration) / this.duration;
    }
    viewer.scene.requestRender();
    return result;
};
DynamicWallMaterialProperty.prototype.equals = function (other) {
    return this === other ||
        (other instanceof DynamicWallMaterialProperty &&
            Cesium.Property.equals(this._color, other._color))
};
Cesium.DynamicWallMaterialProperty = DynamicWallMaterialProperty;
Cesium.Material.DynamicWallType = 'DynamicWall';
Cesium.Material.DynamicWallImage = "./colors.png";
Cesium.Material.DynamicWallSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n\
                                            {\n\
                                            czm_material material = czm_getDefaultMaterial(materialInput);\n\
                                            vec2 st = materialInput.st;\n\
                                            vec4 colorImage = texture(image, vec2(fract(st.t - time), st.t));\n\
                                            vec4 fragColor;\n\
                                            fragColor.rgb = color.rgb / 1.0;\n\
                                            fragColor = czm_gammaCorrect(fragColor);\n\
                                            material.alpha = colorImage.a * color.a;\n\
                                            material.diffuse = color.rgb;\n\
                                            material.emission = fragColor.rgb;\n\
                                            return material;\n\
                                            }";
Cesium.Material._materialCache.addMaterial(Cesium.Material.DynamicWallType, {
    fabric: {
        type: Cesium.Material.DynamicWallType,
        uniforms: {
            color: new Cesium.Color(1.0, 1.0, 1.0, 1),
            image: Cesium.Material.DynamicWallImage,
            time: 0
        },
        source: Cesium.Material.DynamicWallSource
    },
    translucent: function (material) {
        return true;
    }
});
static/tudiguanli.json
ÎļþÒÑɾ³ý
static/tudiguanli2.json
ÎļþÒÑɾ³ý