define([ 'dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/html', "dojo/topic", 'jimu/BaseWidget', 'dojo/on', 'jimu/dijit/Popup', './GeologicalDisasterPanel', 'widgets/Scenic/js/coordtransform.js' ], function (declare, lang, array, html, topic, BaseWidget, on, Popup, GeologicalDisasterPanel, coordtransform ) { return declare([BaseWidget], { baseClass: 'jimu-widget-Scenic', name: 'Scenic', shidiLayer: null, datas: null, datasJQ: null, scenicState: "jq", startup: function () { this.inherited(arguments); var self = this; var time = new Date().getTime(); var sign = md5("5b5cfa9a7f2ab049" + "6dff7b875b5cfa9a7f2ab049481c955f" + time); $.ajax({ url: 'https://jxyunwan.com/api.php/external/access_token', data: { "appid": "5b5cfa9a7f2ab049", "time": time, "sign": sign }, type: "POST", dataType: "json", success: function success(res) { var token = res.data.access_token; $.ajax({ url: 'https://jxyunwan.com/api.php/external/scenic', data: { "token": token, "page": 1, "ckey": "scenic", "limit": 9999 }, type: "POST", dataType: "json", success: function success(data) { self.datas = data.data; self.createList(data.data); } }); $.ajax({ url: 'https://jxyunwan.com/api.php/external/viewpoint', data: { "token": token, "page": 1, "ckey": "viewpoint", "limit": 9999 }, type: "POST", dataType: "json", success: function success(data) { self.datasJQ = data.data; } }); } }); $('#Scenic_intro-bt1').on('click', function () { $('.jimu-widget-Scenic ul li').remove(); self.map.entities.removeAll(); if (self.scenicState == "jd") { document.getElementById("query-btn").click(); } else { //将标识改为景区 self.scenicState = "jq"; self.createList(self.datas); self.addPoint(self.datas); } self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(115.724880, 28.767446, 40000) }); $('#chosePage').attr('style', 'display:block;'); $('#intro').attr('style', 'display:none'); $(".hudong-head").stop().show(); //清空全景及音频 $('.jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-main .Scenic-enlarge-content ul').empty(); $('.jimu-widget-Scenic .Scenic-child-text div .Scenic-child-img-main .Scenic-child-img-content ul').empty(); $('#Scenic_qj').attr('src', ''); $('#Scenic_bgMusic').attr('src', "widgets/Scenic/" + ''); self._controlSendAll(false); }); //添加地图点击事件 this.addHandler(); //添加自动讲解模式切换监听 topic.subscribe('openAudoAudio', lang.hitch(this, this._openAudoAudio)); // iframe放大 $('.jimu-widget-Scenic .Scenic-content .Scenic-big-iframe').off('click').click(function () { var el = document.documentElement; var rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullscreen; if (typeof rfs != "undefined" && rfs) { rfs.call($('.jimu-widget-Scenic .Scenic-content #Scenic_qj')[0]); } return; }); $('#bt1').on('click', function () { self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(115.724880, 28.767446, 40000) }); //隐藏搜索框 $("#queryList").hide(); //清空表格 $('.jimu-widget-Scenic ul li').remove(); self.createList(self.datas); self.map.entities.removeAll(); self.addPoint(self.datas); //景区 $('#bt1').attr('class', 'layui-btn layui-btn-normal'); $('#bt2').attr('class', 'layui-btn layui-btn-primary'); //将全局状态标识改为景区 self.scenicState = "jq"; }); $('#bt2').on('click', function () { self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(115.724880, 28.767446, 40000) }); //显示搜索框 $("#queryList").show(); //清空表格 $('.jimu-widget-Scenic ul li').remove(); self.createList(self.datasJQ); self.map.entities.removeAll(); self.addPoint(self.datasJQ); //景点 $('#bt1').attr('class', 'layui-btn layui-btn-primary'); $('#bt2').attr('class', 'layui-btn layui-btn-normal'); //将全局状态标识改为景点 self.scenicState = "jd"; }); //查询事件 $("#query-btn").click(function () { var query = $(".query-inp").val(); var queryData = []; for (var i = 0; i < self.datasJQ.length; i++) { if (self.datasJQ[i].title.indexOf(query) != "-1") { queryData.push(self.datasJQ[i]); } } //清空表格 $('.jimu-widget-Scenic ul li').remove(); self.map.entities.removeAll(); self.createList(queryData); self.addPoint(queryData); }); //清空事件 $("#query-clean").click(function () { $(".query-inp").val(""); //清空表格 $('.jimu-widget-Scenic ul li').remove(); self.map.entities.removeAll(); self.createList(self.datasJQ); self.addPoint(self.datasJQ); }); // 详情轮播图的放大 $(".jimu-widget-Scenic .Scenic-content .Scenic-child-img-content").off('click', 'li img').on('click', 'li img', function () { $(".jimu-widget-Scenic .Scenic-enlarge-img").stop().show(); }); // 轮播图放大的关闭 $(".jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-close").off('click').click(function () { $(".jimu-widget-Scenic .Scenic-enlarge-img").stop().hide(); }); }, _openAudoAudio: function (flag) { if (flag == true && this.state != "closed") { this._autoIntroduce(); } else { for (var i = 0; i < this.datas.length; i++) { clearTimeout(this.datas[i].settimeoutId); } } }, //自动介绍 _autoIntroduce: function () { var self = this; var timeTotal = 0; for (var i = 0; i < self.datas.length; i++) { var element = self.datas[i]; //计算下一个湿地启动的等待时间,其中playTime为当前湿地播放时间,3秒为飞行所需时间 timeTotal = timeTotal + element.playTime + 3000; if (i < self.datas.length - 1) { self.datas[i + 1].waitTime = timeTotal; } (function (element) { element.settimeoutId = setTimeout(function () { self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(element.x, element.y, element.h), duration: 3, complete: function () { self.loadChirden(element); } }); }, element.waitTime); })(element); } }, onMinimize: function () { // this.resize(); }, onMaximize: function () { // this.resize(); }, onOpen: function () { //面板打开的时候触发,添加标签到地图上 var self = this; window.openAudioName = this.name; this.getData("https://jxyunwan.com/api.php/external/scenic", "scenic", "","jq"); setTimeout(function () { //自动讲解模式 if (window.modelIndex == 1) { self._autoIntroduce(); } }, 200); }, onClose: function () { //面板打开的时候触发,删除地图上标签 var self = this; self.map.entities.removeAll(); self._controlSendAll(false); $('#chosePage').attr('style', 'display:block;'); $('#intro').attr('style', 'display:none'); $('#Scenic_qj').attr('src', ''); $("#Scenic_bgMusic").attr('src', ''); for (var i = 0; i < this.datas.length; i++) { clearTimeout(this.datas[i].settimeoutId); } }, // resize: function() { // }, destroy: function () { this.inherited(arguments); }, //关键字过滤 query: function () { var text = this.keyNode.value; if (text != "" && text.length > 0) { var list = array.filter(this.datas, function (g) { if (g.name.indexOf(text) > -1) { return true; } else { return false; } }, this); $('.jimu-widget-Scenic ul li').remove(); this.createList(list); } else { $('.jimu-widget-Scenic ul li').remove(); this.createList(this.datas); } }, createList: function (dataList) { var self = this; dataList.forEach(function (element) { $(".jimu-widget-Scenic .Scenic-listul").append("
  • " + element.title + "

  • "); }, this); //添加li点击事件,地图定位 $('.jimu-widget-Scenic .Scenic-listul li').click(function () { let selectItem = this.innerText.trim(); if (self.scenicState == "jq") { var ar = dataList.find(function (elem) { return elem.title == selectItem; }); self.loadChirden(ar); //将景点数据传入 self.getData("https://jxyunwan.com/api.php/external/viewpoint", "viewpoint", ar.id,"jd"); } else { var ids = $(this).attr("id"); var ar = dataList.find(function (elem) { return elem.title == selectItem && elem.id == ids; }); //坐标转换成WGS84 var x = coordtransform.gcj02towgs84(ar.lng,ar.lat)[0]; var y = coordtransform.gcj02towgs84(ar.lng,ar.lat)[1]; self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(Number(x), Number(y), 500) }); //self.openWindow(ar); self.loadChirden(ar); } }); }, loadChirden: function (item) { //切换显示 $('#chosePage').attr('style', 'display:none'); $('#intro').attr('style', 'display:block'); $(".hudong-head").stop().hide(); //添加图片 $('.jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-main .Scenic-enlarge-content ul').empty(); $('.jimu-widget-Scenic .Scenic-child-text div .Scenic-child-img-main .Scenic-child-img-content ul').empty(); // 单张图片的处理方式 $(".jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-main .Scenic-enlarge-left").stop().hide(); $(".jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-main .Scenic-enlarge-right").stop().hide(); $(".jimu-widget-Scenic .Scenic-child-text div .Scenic-child-img-main .Scenic-child-img-left").stop().hide(); $(".jimu-widget-Scenic .Scenic-child-text div .Scenic-child-img-main .Scenic-child-img-right").stop().hide(); $('.jimu-widget-Scenic .Scenic-enlarge-img .Scenic-enlarge-main .Scenic-enlarge-content ul').append("
  • "); $('.jimu-widget-Scenic .Scenic-child-text div .Scenic-child-img-main .Scenic-child-img-content ul').append("
  • "); //添加文字 $('#Scenic_page').html(item.desc); $('.intro-head h3').text(item.title); $.ajax({ url: 'widgets/Scenic/datas.json', type: "POST", dataType: "json", success: function success(data) { var data = data.data; for (var i = 0; i < data.length; i++) { if (data[i].name == item.title) { //语音介绍 $('#Scenic_bgMusic').attr('src', "widgets/Scenic/" + data[i].audio); } } } }); $('#Scenic_audio-control').attr('src', "./images/open-play-Monitoring.png"); $('#Scenic_audio-control').click('onclick', function () { var player = $("#Scenic_bgMusic")[0]; if (player.paused) { /*如果已经暂停*/ player.play(); /*播放*/ $('#Scenic_audio-control').attr('src', "./images/open-play-Monitoring.png"); } else { player.pause(); /*暂停*/ $('#Scenic_audio-control').attr('src', "./images/close-paly-Monitoring.png"); } }) }, addHandler: function () { var handler = new Cesium.ScreenSpaceEventHandler(this.map.scene.canvas); handler.setInputAction(lang.hitch(this, this.clickHandler), Cesium.ScreenSpaceEventType.LEFT_CLICK); }, clickHandler: function (movement) { var self = this; var pickedObjects = self.map.scene.drillPick(movement.position); if (Cesium.defined(pickedObjects)) { for (var i = 0; i < pickedObjects.length; ++i) { var obj = pickedObjects[i].id; if (self.scenicState == "jq") { self.scenicState = "jqs"; for (var j = 0; j < self.datas.length; j++) { if (obj.id == self.datas[j].id) { self.loadChirden(this.datas[j]); self.getData("https://jxyunwan.com/api.php/external/viewpoint", "viewpoint", self.datas[j].id,"jd"); return; } } break; } else if (self.scenicState == "jd") { for (var j = 0; j < self.datasJQ.length; j++) { if (obj.id == self.datasJQ[j].id) { //self.openWindow(self.datasJQ[j]); self.loadChirden(self.datasJQ[j]); return; } } break; } else { for (var j = 0; j < self.datasJQ.length; j++) { if (obj.id == self.datasJQ[j].id) { self.openWindow(self.datasJQ[j]); //self.loadChirden(self.datasJQ[j]); return; } } break; } } } }, getData: function (url, ckey, sid,type) { // 从json中获取数据 var self = this; self.map.scene.globe.depthTestAgainstTerrain = false; var time = new Date().getTime(); var sign = md5("5b5cfa9a7f2ab049" + "6dff7b875b5cfa9a7f2ab049481c955f" + time); $.ajax({ url: 'https://jxyunwan.com/api.php/external/access_token', data: { "appid": "5b5cfa9a7f2ab049", "time": time, "sign": sign }, type: "POST", dataType: "json", success: function success(res) { var token = res.data.access_token; $.ajax({ url: url, data: { "token": token, "page": 1, "ckey": ckey, "sid": sid, "limit": 9999 }, type: "POST", dataType: "json", success: function success(data) { var result = data.data; self.map.entities.removeAll(); self.addPoint(result); //景区定位 if (type == "jq"){ self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(115.724880, 28.767446, 40000) }); }else if (type == "jd"){ //坐标转换成WGS84 var x = coordtransform.gcj02towgs84(result[1].lng,result[1].lat)[0]; var y = coordtransform.gcj02towgs84(result[1].lng,result[1].lat)[1]; self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(Number(x), Number(y), 2400) }); } // self.map.camera.flyTo({ // destination: Cesium.Cartesian3.fromDegrees(Number(ar.lng), Number(ar.lat), 1000) // }); if (ckey == "viewpoint") { result.forEach(function (element) { $(".jimu-widget-Scenic .Scenic-viewpoint").append("
  • " + element.title + "

  • "); }, this); //添加景点li点击事件,地图定位 $('.Scenic-viewpoint li').click(function (item) { var selectItem = this.innerText.trim(); var ids = $(this).attr("id"); var ar = result.find(function (elem) { return elem.title == selectItem && elem.id == ids; }); //坐标转换成WGS84 var x = coordtransform.gcj02towgs84(ar.lng,ar.lat)[0]; var y = coordtransform.gcj02towgs84(ar.lng,ar.lat)[1]; self.map.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(Number(x), Number(y), 500) }); self.openWindow(ar); }); } } }); } }); }, addPoint: function (result) { var self = this; for (var i = 0; i < result.length; i++) { var imgs = ""; if (result[i].ckey == "scenic") { imgs = "./widgets/Scenic/img/scenic.png"; } else if (result[i].ckey == "viewpoint") { imgs = "./widgets/Scenic/img/viewpoint.png"; } else if (result[i].ckey == "town") { imgs = "./widgets/Scenic/img/town.png"; } else if (result[i].ckey == "street") { imgs = "./widgets/Scenic/img/street.png"; } else if (result[i].ckey == "ancient") { imgs = "./widgets/Scenic/img/ancient.png"; } else if (result[i].ckey == "delicacy") { imgs = "./widgets/Scenic/img/delicacy.png"; } else if (result[i].ckey == "shopping") { imgs = "./widgets/Scenic/img/shopping.png"; } else if (result[i].ckey == "stay") { imgs = "./widgets/Scenic/img/stay.png"; } else if (result[i].ckey == "toilet") { imgs = "./widgets/Scenic/img/toilet.png"; } else if (result[i].ckey == "parking") { imgs = "./widgets/Scenic/img/parking.png"; } else if (result[i].ckey == "recreation") { imgs = "./widgets/Scenic/img/recreation.png"; } else if (result[i].ckey == "other") { imgs = "./widgets/Scenic/img/other.png"; } var stHeight = 0; if(result[i].title == "洪崖丹井" || result[i].stitle == "洪崖丹井"){ stHeight = 280; } //坐标转换成WGS84 var x = coordtransform.gcj02towgs84(result[i].lng,result[i].lat)[0]; var y = coordtransform.gcj02towgs84(result[i].lng,result[i].lat)[1]; self.map.entities.add({ id: result[i].id, lightid: result[i].lightid, position: Cesium.Cartesian3.fromDegrees(Number(x), Number(y), stHeight), label: { text: result[i].title, font: "700 16px '黑体'", fillColor: Cesium.Color.PALETURQUOISE, outlineColor: Cesium.Color.BLACK, outlineWidth: 2, style: Cesium.LabelStyle.FILL_AND_OUTLINE, horizontalOrigin: Cesium.HorizontalOrigin.TOP, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, pixelOffset: new Cesium.Cartesian2(0, -9), pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1.5e2, 3.0, 1.5e7, 0.5) }, billboard: { image: imgs, scale: 0.8, width: 30, height: 35, pixelOffset: new Cesium.Cartesian2(0, 0), // heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, } }); } }, // 点击弹出面板; openWindow: function (item) { layer.open({ title: item.title, type: 2, shadeClose: true, shade: false, maxmin: false, //开启最大化最小化按钮 area: ['802px', '526px'], content: "./widgets/Scenic/popup/popup.html", id: "popup", closeBtn: 1, success: function (layero, index) { // 传递index给子页面 var iframe = window['layui-layer-iframe' + index]; iframe.child(item); } }); }, }); });