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