视线微件

尝试一下在线预览

此示例演示如何使用 LineOfSight widget 微件检查从  SceneView 中的观察者视点是否可以看到一个或多个目标。

在此示例中,观察者设置在现有建筑物的上层。该示例显示了如果在其前面建造了新建筑物,观察者的视线是如何受到阻碍的。打开和关闭开发层,看看河流的景色是如何被遮挡的。移动观察者或目标以探索视野不受阻碍的点。点击 Continue analysis 将更多目标添加到分析中。

可以使用以下代码片段将微件添加到场景中:

     
1
2
3
4
5
const lineOfSight = new LineOfSight({
  view: view
});

view.ui.add(lineOfSight, "top-right");

LineOfSightViewModel 可用于最初添加观察者和多个目标点。

             
1
2
3
4
5
6
7
8
9
10
11
12
13

const viewModel = lineOfSight.viewModel;

viewModel.observer = new Point({
  latitude: 42.3521,
  longitude: -71.0559,
  z: 147.139
});

viewModel.targets = [
  createTarget(42.3492, -71.0529),
  createTarget(42.3477, -71.0542)
];

这些属性也可用于监视更改,例如添加或移动新目标或观察者。

               
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// watch when the observer changes
viewModel.watch("observer", () => {
    setIntersectionMarkers();
});

// watch when a new target is added or removed
viewModel.targets.on("change", (event) => {
  event.added.forEach((target) => {
    setIntersectionMarkers();
    // for each target watch when the intersection changes
    target.watch("intersectedLocation", () => {
      setIntersectionMarkers();
    });
  });
});

LineOfSightTarget 类允许访问分析结果,例如交叉点的位置或阻碍从观察者到目标的视图的图形。

         
1
2
3
4
5
6
7
8
9
viewModel.targets.forEach((target) => {
  if (target.intersectedLocation) {
    const graphic = new Graphic({
      symbol: intersectionSymbol,
      geometry: target.intersectedLocation
    });
    view.graphics.add(graphic);
  }
});

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.