define([ 'dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/html', 'dojo/topic', 'jimu/BaseWidget', ], function (declare, lang, array, html, topic, BaseWidget ) { return declare([BaseWidget], { baseClass: 'jimu-widget-openAnalysis', name: 'openAnalysis', flag: false, startup: function () { var that = this; topic.subscribe("beginopenAnalysis", lang.hitch(this, this.beginopenAnalysis)); topic.subscribe("closesopenAnalysis", lang.hitch(this, this.closesopenAnalysis)); // topic.publish('getbeginSlope', that.beginSlope); $(`.${that.baseClass}`).find('.closeOUR').click(() => { $(`.${that.baseClass}`).hide(); that.closesopenAnalysis(); }) // that.beginopenAnalysis(); }, beginopenAnalysis: function () { console.log(Cesium.ViewDome, 111)//缺少Cesium.ViewDome支持 console.log(`${this.name}--kaishi`); var that = this; var viewer = that.map; var scene = viewer.scene; var widget = viewer.cesiumWidget; var longitude, latitude, height; var viewDomeArray = []; //存多个开敞度对象数组 var ViewDomeType = 0; //开敞度类型 var isClosed = false; //是否封口 var handler; var iTime, Time; //定时器 var URL_CONFIG = window.MYURL_CONFIG; viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({ key: URL_CONFIG.BING_MAP_KEY,//可至官网(https://www.bingmapsportal.com/)申请key url: URL_CONFIG.BINGMAP })); var promise = scene.open(URL_CONFIG.SCENE_CBD); Cesium.when(promise, function (layers) { for (var i = 0; i < layers.length; i++) { layers[i].selectEnabled = false; } //图层加载完成,设置相机位置 scene.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(116.4491, 39.9011, 180), orientation: { heading: 0.0912, pitch: -0.3177, roll: 0 } }); $("#activeopenAnalysis").on("click", function () { mousestyle(); initViewDome(); // handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); // console.log(handler, 31313131313) // handler.setInputAction(function (e) { // viewer.enableCursorStyle = true; // $('body').removeClass('drawCurshizi'); // //获取点击位置笛卡尔坐标 // var position = scene.pickPosition(e.position); // //将笛卡尔坐标转化为经纬度坐标 // let positions = []; // var cartographic = Cesium.Cartographic.fromCartesian(position); // longitude = Cesium.Math.toDegrees(cartographic.longitude); // latitude = Cesium.Math.toDegrees(cartographic.latitude); // height = cartographic.height; // if (height < 0) { // height = 0; // } // if (positions.indexOf(longitude) == -1 && positions.indexOf(latitude) == -1) { // positions.push(longitude); // positions.push(latitude); // positions.push(height); // } // //点击位置同步到显示框 // $("#longitudeopenAnalysis").val(longitude); // $("#latitudeopenAnalysis").val(latitude); // $("#heightopenAnalysis").val(height); // updateViewDome(positions); // handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) // }, Cesium.ScreenSpaceEventType.LEFT_CLICK); }) function initViewDome() { //初始化 console.log(1121) // let VisibleColor = Cesium.Color.fromCssColorString($("#VisibleColoropenAnalysis").val()); // let HiddenColor = Cesium.Color.fromCssColorString($("#HiddenColoropenAnalysis").val()); // let viewDome = new Cesium.ViewDome(scene); //构造新的开敞度分析对象 // viewDome.viewPosition = [longitude, latitude, height]; //视点位置,这里用的是CBD示例的中心位置 // viewDome.distance = Number($("#observerRsdiusopenAnalysis").val());//可视距离 // viewDome.domeType = ViewDomeType; //开敞度类型,分为可视部分、不可视部分, 全部显示 // viewDome.visibleAreaColor = Cesium.Color.fromAlpha(VisibleColor, 0.5); //可视部颜色 // viewDome.hiddenAreaColor = Cesium.Color.fromAlpha(HiddenColor, 0.5); //隐藏部分颜色 // viewDome.startAngle = Number($("#StartingAngleopenAnalysis").val());//起始角度 // viewDome.endAngle = Number($("#EndAngleopenAnalysis").val());//终止角度 // viewDome.isClosed = isClosed; //封口 // viewDome.build(); //执行开敞度分析 // viewDomeArray.push(viewDome) console.log(Cesium.ViewDome, 111)//缺少Cesium.ViewDome console.log(1131) } function move() { //改变经纬度动态移动 if (viewDomeArray.length == 0) { return } if (longitude && latitude && height) { viewDomeArray[viewDomeArray.length - 1].viewPosition = [longitude, latitude, height]; } clearTimeout(Time); //防止点击多次,执行一次 Time = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].startAngle = Number($("#StartingAngleopenAnalysis").val()) //加这个才起作用 }, 500); } function updateViewDome(p) { viewDomeArray[viewDomeArray.length - 1].viewPosition = p; viewDomeArray[viewDomeArray.length - 1].build(); //执行开敞度分析 addpoint() } function mousestyle() { //鼠标样式 viewer.enableCursorStyle = false; viewer._element.style.cursor = ''; $('body').removeClass('drawCurshizi').addClass('drawCurshizi'); } //结果清除 function clear() { viewer.entities.removeAll(); viewDomeArray[viewDomeArray.length - 1].destroy();//释放对象 viewDomeArray.pop(); if (viewDomeArray.length == 0) { return } else { let v = viewDomeArray[viewDomeArray.length - 1]; $("#longitudeopenAnalysis").val(v.viewPosition[0]); $("#latitudeopenAnalysis").val(v.viewPosition[1]); $("#heightopenAnalysis").val(v.viewPosition[2]); longitude = v.viewPosition[0]; latitude = v.viewPosition[1]; height = v.viewPosition[2]; addpoint() } } function addpoint() {//添加点 if (longitude == undefined || latitude == undefined || height == undefined) { return } //首先移除之前添加的点 viewer.entities.removeAll(); //在位置添加对应点 viewer.entities.add(new Cesium.Entity({ point: new Cesium.PointGraphics({ color: new Cesium.Color(1, 0, 0), pixelSize: 6, outlineColor: new Cesium.Color(0, 1, 1) }), position: Cesium.Cartesian3.fromDegrees(longitude, latitude, height + 0.5) })); } $('#clearopenAnalysis').click(function () { if (viewDomeArray.length == 0) { return } clear(); handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK) }); $("#longitudeopenAnalysis").bind("input propertychange", function () { longitude = parseFloat($("#longitudeopenAnalysis").val()); if (!longitude) { return } clearTimeout(iTime); iTime = setTimeout(function () { move() }, 1000); addpoint() }) $("#latitudeopenAnalysis").bind("input propertychange", function () { latitude = parseFloat($("#latitudeopenAnalysis").val()); if (!latitude) { return } clearTimeout(iTime); iTime = setTimeout(function () { move() }, 1000); addpoint() }) $("#heightopenAnalysis").bind("input propertychange", function () { height = parseFloat($("#heightopenAnalysis").val()); if (!height) { return } clearTimeout(iTime); iTime = setTimeout(function () { move() }, 1000); addpoint() }) $('#observerRsdiusopenAnalysis').bind('input propertychange', function () { $("#RsdiusopenAnalysis").val($("#observerRsdiusopenAnalysis").val()); if (viewDomeArray.length == 0) { return } if (Number($("#observerRsdiusopenAnalysis").val()) == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].distance = Number($("#observerRsdiusopenAnalysis").val()) }, 500); }); $('#RsdiusopenAnalysis').bind('input propertychange', function () { $("#observerRsdiusopenAnalysis").val($("#RsdiusopenAnalysis").val()) if (viewDomeArray.length == 0) { return } if (Number($("#observerRsdiusopenAnalysis").val()) == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].distance = Number($("#observerRsdiusopenAnalysis").val()) }, 500); }); $('#StartingAngleopenAnalysis').bind('input propertychange', function () { $("#SangleopenAnalysis").val($("#StartingAngleopenAnalysis").val()); if (viewDomeArray.length == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].startAngle = Number($("#StartingAngleopenAnalysis").val()) }, 500); }); $('#SangleopenAnalysis').bind('input propertychange', function () { $("#StartingAngleopenAnalysis").val($("#SangleopenAnalysis").val()); if (viewDomeArray.length == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].startAngle = Number($("#StartingAngleopenAnalysis").val()) }, 500); }); $('#EndAngleopenAnalysis').bind('input propertychange', function () { $("#EangleopenAnalysis").val($("#EndAngleopenAnalysis").val()); if (viewDomeArray.length == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].endAngle = Number($("#EndAngleopenAnalysis").val()) }, 500); }); $('#EangleopenAnalysis').bind('input propertychange', function () { $("#EndAngleopenAnalysis").val($("#EangleopenAnalysis").val()); if (viewDomeArray.length == 0) { return } clearTimeout(iTime); iTime = setTimeout(function () { viewDomeArray[viewDomeArray.length - 1].endAngle = Number($("#EndAngleopenAnalysis").val()) }, 500); }); $("#VisibleColoropenAnalysis").bind("input propertychange", function () { let VisibleColor = Cesium.Color.fromCssColorString($("#VisibleColoropenAnalysis").val()) if (viewDomeArray.length == 0) { return } viewDomeArray[viewDomeArray.length - 1].visibleAreaColor = Cesium.Color.fromAlpha(VisibleColor, 0.5); //可视部颜色 }) $("#HiddenColoropenAnalysis").bind("input propertychange", function () { let HiddenColor = Cesium.Color.fromCssColorString($("#HiddenColoropenAnalysis").val()) if (viewDomeArray.length == 0) { return } viewDomeArray[viewDomeArray.length - 1].hiddenAreaColor = Cesium.Color.fromAlpha(HiddenColor, 0.5); }) $("#calMode1openAnalysis").on("input change", function () { var index = document.getElementById("calMode1openAnalysis").selectedIndex; switch (index) { case 0: ViewDomeType = Cesium.ViewDomeType.VISIBLEDOME; break; case 1: ViewDomeType = Cesium.ViewDomeType.HIDDENDOME; break; case 2: ViewDomeType = Cesium.ViewDomeType.ALLDOME; break; default: break; } if (viewDomeArray.length == 0) { return } viewDomeArray[viewDomeArray.length - 1].domeType = ViewDomeType }); $("#isClosedopenAnalysis").click(function () { if ($(this).prop("checked")) { isClosed = true } else { isClosed = false } viewDomeArray[viewDomeArray.length - 1].isClosed = isClosed; }); $('#toolbaropenAnalysis').show(); $('#loadingbaropenAnalysis').remove(); }, function (e) { if (widget._showRenderLoopErrors) { var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?'; widget.showErrorPanel(title, undefined, e); } }) //关闭操作框 $(".close2").click(function () { $("#toolbaropenAnalysis").hide(); $("#bnopenAnalysis").show() }); $("#bnopenAnalysis").click(function () { $("#toolbaropenAnalysis").show(); $("#bnopenAnalysis").hide() }); }, closesopenAnalysis: function (froms) { console.log(`${this.name}--guanbi`); var that = this; }, onOpen: function () { }, onClose: function () { //面板关闭的时候触发 (when this panel is closed trigger) console.log('jies') }, onMinimize: function () { this.resize(); }, onMaximize: function () { this.resize(); }, resize: function () { }, destroy: function () { //销毁的时候触发 //todo //do something before this func this.inherited(arguments); } }); });