提供 LineOfSight 微件的逻辑。使用它来创建您自己的微件或访问观察点,目标和交叉点。
使用 LineOfSightViewModel,您可以以编程方式设置视线分析的观察点和目标。
// instantiate a new view model
const losViewModel = new LineOfSightViewModel({
view: view
});
// set an observer
losViewModel.observer = new Point({
latitude: 42.3521,
longitude: -71.0559,
z: 147.139
});
// set a target by passing in a LineOfSightTarget to the targets collection
losViewModel.targets = [new LineOfSightTarget({
location: new Point({
latitude: 42.352,
longitude: -71.051,
z: 0
})
})];
// when using JavaScript LineOfSightTarget can be autocast
losViewModel.targets = [{
location: {
latitude: 42.352,
longitude: -71.051,
z: 0
}
}];
视图模型还可用于控制分析的不同状态:start() 进入用户可以添加观察点和目标的 creation
状态。stop() 进入用户无法添加新目标但仍可移动观察点和现有目标的 created
状态。
viewModel.start();
LineOfSightViewModel 还允许您监视更改(例如,当用户移动观察点或目标时),并允许您访问相交图形和相交发生的位置。观察点只是一个点,因此您只需观察视图模型上的观察点属性,即可知道何时添加或移动观察点。
losViewModel.watch("observer", function(value) {
// do something with the value
});
// watch when a target is added or removed
viewModel.targets.on("change", function(event) {
// for each target watch when the intersected location changes
event.added.forEach((target) => {
target.watch("intersectedLocation", function() {
// get access to intersected graphic and location
if (target.intersectedGraphic) {
// highlight the graphic
lyrView.highlight(target.intersectedGraphic);
}
// get access to intersected location
console.log(target.intersectedLocation);
});
});
});
目标包含有关目标位置的信息,无论目标是否可见、与哪个图形相交以及它与该图形相交的位置、集成格网或地面。LineOfSightTarget 类用于表示目标。
构造函数
属性概述
名称 | 类型 | 描述 | 类: | |
---|---|---|---|---|
LineOfSightAnalysis | 更多详情 视图模型正在创建或修改的视线分析对象。 | 更多详情 | LineOfSightViewModel | |
String | 更多详情 类的名称。 | 更多详情 | Accessor | |
Point | 更多详情 观察者的视点,从该视点将视线吸引到目标。 | 更多详情 | LineOfSightViewModel | |
String | 更多详情 视图模型的状态。 | 更多详情 | LineOfSightViewModel | |
Collection<LineOfSightTarget> | 更多详情 包含目标位置和分析结果的 LineOfSightTarget 的集合。 | 更多详情 | LineOfSightViewModel | |
SceneView | 更多详情 微件将从中操作的视图。 | 更多详情 | LineOfSightViewModel |
属性详细信息
-
起始版本:GeoScene API for JavaScript 4.23
-
视图模型正在创建或修改的视线分析对象。
可以在视图模型构造期间设置此属性,以便为视图模型提供现有分析以进行修改。将分析的属性分配给视图模型后,也可以对其进行更新。
如果在视图模型构造期间未提供分析,则视图模型会自动创建自己的分析并将其添加到视图中。在这种情况下,当视图模型被销毁时,分析也将自动从视图中移除。
示例:// Construct a line of sight analysis object outside of the view model const analysis = new LineOfSightAnalysis({ observer: { type: "point", // autocasts as new Point() x: 7.67, y: 45.981, z: 3435.765 }, targets: [{ location: { type: "point", x: 7.659, y: 45.976, z: 4437 } }] }); // Ensure that the analysis is added to the view view.analyses.add(analysis); // Frame the analysis in the view view.goTo(analysis.extent); // Pass the analysis object as a constructor parameter to modify it using the view model const viewModel = new LineOfSightViewModel({ analysis: analysis, view: view });
-
类的名称。声明的类名格式为
geoscene.folder.className
。
-
observer Point
-
观察者的视点,从该视点将视线吸引到目标。
-
state Stringreadonly
-
视图模型的状态。
值 说明 disabled 尚未准备就绪 ready 准备进行分析 creating 正在放置观察点/目标点 created 完成分析 可能的值:"disabled"|"ready"|"creating"|"created"
- 默认值:disabled
-
targets Collection<LineOfSightTarget>
-
包含目标位置和分析结果的 LineOfSightTarget 的集合。
-
view SceneView
-
微件将从中操作的视图。
方法概述
名称 | 返回类型 | 描述 | 类: | |
---|---|---|---|---|
更多详情 清除当前分析结果。 | 更多详情 | LineOfSightViewModel | ||
更多详情 如果停止,此方法将继续进行视线分析,用户可以添加更多目标。 | 更多详情 | LineOfSightViewModel | ||
更多详情 开始新的视线分析。 | 更多详情 | LineOfSightViewModel | ||
更多详情 停止当前视线分析,将结果保留在视图中。 | 更多详情 | LineOfSightViewModel |
方法详细信息
-
clear()
-
清除当前分析结果。调用此方法后,用户可以设置新的观察点和目标。
-
continue()
-
如果停止,此方法将继续进行视线分析,用户可以添加更多目标。
-
start()
-
开始新的视线分析。
-
stop()
-
停止当前视线分析,将结果保留在视图中。用户仍然可以与现有目标和观察点进行交互,但无法放置新的目标点。