Skip to content

可视域分析

可视域分析在模型上显示了给定观察点与目标点的可见与不可见状况

引入可视域分析插件的 css 和 js

html
<link
  rel="stylesheet"
  type="text/css"
  href="./SDK/Plugins/ViewshedAnalysis/ViewshedAnalysis.css"
/>
<script src="./SDK/Plugins/ViewshedAnalysis/ViewshedAnalysis.js"></script>

初始化一个可视化分析对象

javascript
const viewshed3d = new LSGlobe.Viewshed3D(viewer.scene)

设置观察点(通过点击求交得到)和目标点(通过点击求交得到)

javascript
// 开始绘制可视域分析设置成true
let viewshed3daction = true
// 已经绘制第一个点,等待绘制第二个点,设置成true
let viewshed3ding = false

// 初始化鼠标事件
let ViewAnalysisHandler = new LSGlobe.ScreenSpaceEventHandler(
  viewer.scene.canvas
)
ViewAnalysisHandler.setInputAction((movement) => {
  // 获取点击的点的笛卡尔积坐标
  let cartesian = viewer.scene.pickGlobe(movement.position)

  if (cartesian != undefined && viewshed3daction && !viewshed3ding) {
    // 设置观察点
    viewshed3d.viewerPosition = cartesian
    viewshed3ding = true
  } else {
    if (viewshed3ding) {
      // 设置目标点
      viewshed3d.setPoseByTargetPoint(cartesian)
      //点击第二个点绘制结束
      viewshed3ding = false
    }
  }
}, LSGlobe.ScreenSpaceEventType.LEFT_CLICK)

ViewAnalysisHandler.setInputAction((movement) => {
  if (viewshed3ding) {
    var cartesian = viewer.scene.pickGlobe(movement.endPosition)
    viewshed3d.setPoseByTargetPoint(cartesian)
  }
}, LSGlobe.ScreenSpaceEventType.MOUSE_MOVE)

获取可见与不可见面积比

javascript
const ratio = viewshed3d.getVisibleHiddenRatio()

删除所有可视域分析

javascript
viewshed3d.destroy()

多个可视域对象联合分析

javascript
// 联合分析,将viewshed3d对象attachViewshed另外一个viewshed3d对象
viewshed3dA.attachViewshed(viewshed3dB)

在线示例

在线示例

Released under the MIT License.