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);
}
});
},
});
});