123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <template>
- <div id="cesiumContainer" style="width: 100%; height: 100%;background: none;" />
- </template>
- <script>
- import {
- iconList,
- getDeviceList
- } from '@/api/components/supermap.js'
- import Cookies from 'js-cookie'
- import { getConfigKey } from "@/api/system/config";
- export default {
- name: 'supermap-2.5d',
- data() {
- return {
- superMapRootUrl:null,
- layerList:[],
- viewer:null,
- scene:null,
- handler:null,
- pick:null,
- back_position:null,
- content:null,
- mvtMap0:null,
- shuixi_name:null,
- mvtMap1:null,
- mvtMap2:null,
- mvtMap3:null,
- road_name:null,
- layer_xiangzhenjie_name:null,
- /*************************原地图属性*********************/
- isEditableLayers: false, //绘图控件
- /*************************原地图属性*********************/
- aac:null,
- queryParams: {
- name:null,
- mapData: null,
- mapName: null
- },
- }
- },
- watch: {},
- created() {
- this.superMapRootUrl = Cookies.get('superMap.iServer');
- //进入主页时就获取超图地址并存入cookie
- if(this.superMapRootUrl != null && this.superMapRootUrl != '' && this.superMapRootUrl != undefined && this.superMapRootUrl != 'undefined'){
- this.onload();
- }else{
- this.superMapInfo();
- }
- },
- mounted() {
- },
- props: {},
- methods: {
- superMapInfo(){
- getConfigKey('superMap.iServer').then(response => {
- this.superMapRootUrl = response.msg;
- Cookies.set('superMap.iServer', response.msg, {
- expires: 300
- })
- this.onload();
- })
- },
- onload(){
- let that = this;
- //1.添加地形数据
- that.viewer = new Cesium.Viewer('cesiumContainer',{
- //创建地形服务提供者的实例,url为SuperMap iServer发布的TIN地形服务
- terrainProvider : new Cesium.CesiumTerrainProvider({
- url :that.superMapRootUrl+"/3D-sipingchangjing/rest/realspace/datas/dem%40spyx4326",
- //isSct : false,//地形服务源自SuperMap iServer发布时需设置isSct为true
- invisibility:true
- }),
- infoBox:true,
- navigation: false
- }, {
- contextOptions: {
- msaaLevel: 4,
- requestWebgl2: true
- },
- orderIndependentTranslucency: false
- });
- that.scene = that.viewer.scene;
- that.viewer.cesiumWidget.creditContainer.style.display = "none" // 去掉超图logo水印
- //2.添加SuperMap iServer发布的影像服务
- let layer = that.viewer.imageryLayers.addImageryProvider(new Cesium.SuperMapImageryProvider({
- url : that.superMapRootUrl+"/3D-sipingchangjing/rest/realspace/datas/siping_2m@spyx4326",
- }));
- //飞行值坐标点,每3秒推进一级
- //heading-代表镜头左右方向,正值为右,负值为左
- //pitch-代表镜头上下方向,正值为上,负值为下.
- //roll-代表镜头左右倾斜,正值,向右倾斜,负值向左倾斜
- setTimeout(function() {
- that.viewer.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(124.49980650138238, 43.428263986216815, 950000),
- orientation: {
- // heading : Cesium.Math.toRadians(346.4202942851978),
- // pitch : Cesium.Math.toRadians(-56.74026687972041),
- // roll : Cesium.Math.toRadians(0)
- }
- });
- }, 3000);
- setTimeout(function() {
- that.viewer.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(124.49980650138238, 43.428263986216815, 650000),
- orientation: {
- // heading : Cesium.Math.toRadians(346.4202942851978),
- // pitch : Cesium.Math.toRadians(-56.74026687972041),
- // roll : Cesium.Math.toRadians(0)
- }
- });
- }, 3000);
- setTimeout(function() {
- that.viewer.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(124.49980650138238, 43.428263986216815, 350000),
- orientation: {
- // heading : Cesium.Math.toRadians(346.4202942851978),
- // pitch : Cesium.Math.toRadians(-56.74026687972041),
- // roll : Cesium.Math.toRadians(0)
- }
- });
- }, 3000);
- //开始加载专题图等数据,8秒后开始执行
- setTimeout(function() {
- // // 3.水系
- // let shuixi = that.superMapRootUrl+"/map-mvt-shuixiMian/restjsr/v1/vectortile/maps/shuixi_Mian";
- // that.mvtMap0 = that.scene.addVectorTilesMap({
- // url: shuixi,
- // canvasWidth: 512,
- // name: 'mvt_map0',
- // viewer: that.viewer,
- // selectedColor:new Cesium.Color(6,169,254,0.5),
- // show:true,
- // });
- // //4.林地
- // let lindi = that.superMapRootUrl+"/map-mvt-lindi/restjsr/v1/vectortile/maps/lindi";
- // that.mvtMap1 = that.scene.addVectorTilesMap({
- // url: lindi,
- // canvasWidth: 512,
- // name: 'mvt_map1',
- // viewer: that.viewer,
- // selectedColor:new Cesium.Color(6,254,181,0.5),
- // show:true,
- // });
- //
- //5.农田
- let nongtian = that.superMapRootUrl+"/map-mvt-nongtian/restjsr/v1/vectortile/maps/nongtian";
- that.mvtMap2 = that.scene.addVectorTilesMap({
- url: nongtian,
- canvasWidth: 512,
- name: 'mvt_map2',
- viewer: that.viewer,
- selectedColor:new Cesium.Color(250, 236, 246,1.0),
- show:true,
- });
- //
- // //6.路网
- // let road = that.superMapRootUrl+"/map-mvt-roadXian/restjsr/v1/vectortile/maps/road_Xian";
- // that.mvtMap3 = that.scene.addVectorTilesMap({
- // url: road,
- // canvasWidth: 512,
- // name: 'mvt_map3',
- // viewer: that.viewer,
- // show:true,
- // });
- //
- // //7.添加路网NAME
- // let road_name_url = that.superMapRootUrl+'/3D-road_Name_S/rest/realspace';
- // that.road_name = that.scene.open(road_name_url);
- //
- // // 8.添加水系NAME
- // let shuixi_name_url = that.superMapRootUrl+'/3D-shuixi_Name/rest/realspace';
- // that.shuixi_name = that.scene.open(shuixi_name_url);
- //9.添加乡镇界
- let layer_xiangzhenjie = that.viewer.imageryLayers.addImageryProvider(new Cesium.SuperMapImageryProvider({
- url : that.superMapRootUrl+"/map-SIPING/rest/maps/XiangZhenJie",
- }));
- //10.添加县界
- let layer_xianjie = that.viewer.imageryLayers.addImageryProvider(new Cesium.SuperMapImageryProvider({
- url : that.superMapRootUrl+"/map-SIPING/rest/maps/XianJie",
- }));
- //11.添加县界名称 此处要先添加县界名称 否则县界名会不显示
- let layer_xianjie_name = that.superMapRootUrl+'/3D-XianJie_Name/rest/realspace';
- that.scene.open(layer_xianjie_name);
- //12.添加乡镇界名称
- let layer_xiangzhenjie_name = that.superMapRootUrl+'/3D-XiangZhenJie_Name/rest/realspace';
- that.scene.open(layer_xiangzhenjie_name);
- }, 3000);
- },
- //移除之前添加的点
- clearM(){
- this.viewer.entities.removeAll();
- },
- /**
- * 地图落点
- */
- setMarkers(makerList){
- let that = this;
- that.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
- clearInterval(that.aac);
- for (let i in makerList) {
- let longitude = makerList[i].lng;
- let latitude = makerList[i].lat;
- that.viewer.entities.add({
- name:"",
- position: Cesium.Cartesian3.fromDegrees(longitude, latitude),
- billboard: {
- image: iconList[makerList[i].icon],
- width: 48,
- height: 48,
- heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
- disableDepthTestDistance:Number.POSITIVE_INFINITY
- },
- description: makerList[i].bindPopupHtml,
- click: makerList[i].click,
- parameter: makerList[i].parameter,
- });
- }
- that.viewer.scene.globe.depthTestAgainstTerrain=false;
- that.createLeftClickDescription();
- that.createRightClickDescription();
- },
- /**
- *鼠标左击事件是原来的气泡
- */
- createLeftClickDescription() {
- let that = this;
- that.handler.setInputAction(function (movement) {
- }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- },
- /**
- *鼠标右击事件是原来的点击
- */
- createRightClickDescription() {
- let that = this;
- that.handler.setInputAction(function (movement) {
- // 监听鼠标的当前位置坐标,然后根据当前坐标去动态更新气泡窗口div的显示位置;
- that.pick = that.viewer.scene.pick(movement.position);
- if (that.pick && that.pick) {
- let id = Cesium.defaultValue(that.viewer.scene.pick(movement.position).id, that.viewer.scene.pick(movement.position).primitive.id);
- let clickName = id._click;
- that.$emit(clickName, id._parameter)
- }
- }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
- },
- /**
- * 地图落点(传感器)
- */
- setMarkers_cgq(makerList){
- let that = this;
- that.handler = new Cesium.ScreenSpaceEventHandler(this.scene.canvas);
- for (let i in makerList) {
- let longitude = makerList[i].lng;
- let latitude = makerList[i].lat;
- that.viewer.entities.add({
- name:"",
- position: Cesium.Cartesian3.fromDegrees(longitude, latitude),
- billboard: {
- image: iconList[makerList[i].icon],
- width: 48,
- height: 48,
- heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
- disableDepthTestDistance:Number.POSITIVE_INFINITY
- },
- description: makerList[i].bindPopupHtml,
- click: makerList[i].click,
- parameter: makerList[i].parameter,
- });
- }
- that.viewer.scene.globe.depthTestAgainstTerrain=false;
- that.createLeftClickDescription_cgq();
- },
- /**
- *鼠标左击事件是原来的气泡(传感器)
- */
- createLeftClickDescription_cgq() {
- let that = this;
- clearInterval(that.aac);
- that.handler.setInputAction(function (movement) {
- that.aac = setInterval(function (){
- let color = "green";
- let value = Math.random();
- let up = "▲";
- let down = "▼";
- if(value>0.5){
- color = "red";
- value = value +""+ up;
- }else{
- value = value +""+ down;
- }
- let html = "<span style='color:"+color+"'>当前传感器数值:"+value+"</span>";
- window.parent.frames[0].document.querySelector(".cesium-infoBox-description").innerHTML = html;
- },1000);
- }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- },
- /**
- * 落点定位
- */
- dropLocation(lat, lng) {
- this.viewer.camera.flyTo({
- destination: Cesium.Cartesian3.fromDegrees(lng, lat, 3000),
- });
- },
- },
- }
- </script>
|