# new VisiblityAnalysis(options)
通视分析
参数:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
options |
Object | 附加参数 |
|
scene |
Scene | Cesium 场景对象 |
|
visibleColor |
Cesium.Color | new Cesium.Color(0, 1, 0, 0.5) | 设置可视段颜色 |
unvisibleColor |
Cesium.Color | new Cesium.Color(1, 0, 0, 0.5) | 设置不可视段颜色 |
exHeight |
Number | 0 | 设置视点附加高度 |
fanColor |
Cesium.Color | new Cesium.Color(79 / 255, 238 / 255, 215 / 255, 0.2) | 环型通视分析视窗颜色 |
fanGridColor |
Cesium.Color | Cesium.Color.WHITE | 环型通视分析视窗网格颜色 |
示例
// ES5引入方式
const { VisiblityAnalysis } = zondy.cesium
// ES6引入方式
import { VisiblityAnalysis } from "@mapgis/webclient-cesium-plugin"
// 1. 给定观察点与目标点进行通视分析
var visiblity = new VisiblityAnalysis({ scene: scene });
scene.visualAnalysisManager.add(visiblity);
visiblity.viewPosition = new Cesium.Cartesian3(6378138.905101178, 22.20128910645181, 16.69161471354458);
visiblity.targetPosition = new Cesium.Cartesian3(6378158.153515804, 47.68794749465568, 34.93181937554349);
// 2. 监听鼠标事件进行通视分析
var visiblityAction = true;
var visiblitying = false;
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
// 左键开始
handler.setInputAction(function (movement) {
if (visiblity !== undefined) {
if (visiblityAction) {
var cartesian = viewer.scene.pickPosition(movement.position);
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
cartographic.height += 1.0; //避免埋入模型中
cartesian = Cesium.Cartographic.toCartesian(cartographic);
if (cartesian !== undefined && !visiblitying) {
visiblity.viewPosition = cartesian;
} else {
visiblity.targetPosition = cartesian;
visiblityAction = false;
}
visiblitying = true;
}
console.log(visiblity.viewPosition);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
//鼠标右键结束
handler.setInputAction(function (movement) {
if (visiblitying) {
var cartesian = viewer.scene.pickPosition(movement.position);
if (cartesian !== undefined) {
visiblity.targetPosition = cartesian;
}
visiblityAction = false;
visiblitying = false;
}
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
handler.setInputAction(function (movement) {
if (visiblitying) {
var cartesian = viewer.scene.pickPosition(movement.endPosition);
if (cartesian) {
visiblity.targetPosition = cartesian;
}
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
// 3. 创建环形通视分析
var drawElement = new Cesium.DrawElement(viewer);
drawElement.startDrawingCircle({
color: new Cesium.Color(0.2, 0.4, 0.3, 1.0),
callback: function (result) {
drawElement.stopDrawing();
visiblity.lookAroundAnalysis({
viewPosition: result.center,
radius: result.radius,
percentCallback: function (percent) {
console.log(percent);
}
});
}
});
// 4. 移除通视分析
scene.visualAnalysisManager.remove(visiblity);
visiblity.destroy();
成员变量
方法
# getVisibilityResult(viewPosition, targetPosition)
根据两点坐标判断两点之间是否可视,返回结果
参数:
名称 | 类型 | 描述 |
---|---|---|
viewPosition |
Cesium.Cartesian3 | 视点 |
targetPosition |
Cesium.Cartesian3 | 目标点 |
visible 两点之间是否可视
Boolean
# lookAroundAnalysis(options)
环形通视分析
参数:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
options |
Object | ||
viewPosition |
Cesium.Cartesian3 | 视点 |
|
radius |
Number | 环形通视分析半径 |
|
verticalAngle |
Number | 60 | 垂直视角,默认为60° |
divideAngle |
Number | 10 | 等分角度,默认为10° |
percentCallback |
function | 计算进度回调 |