提供 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 Maps SDK 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
-
微件将从中操作的视图。
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
清除当前分析结果。 更多详情 | LineOfSightViewModel | ||
如果停止,此方法将继续进行视线分析,用户可以添加更多目标。 更多详情 | LineOfSightViewModel | ||
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
开始新的视线分析。 更多详情 | LineOfSightViewModel | ||
停止当前视线分析,将结果保留在视图中。 更多详情 | LineOfSightViewModel |
方法详细说明
-
addHandles(handleOrHandles, groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
添加一个或多个与对象的生命周期相关联的句柄。当对象被销毁时,将移除句柄。
// Manually manage handles const handle = reactiveUtils.when( () => !view.updating, () => { wkidSelect.disabled = false; }, { once: true } ); // Handle gets removed when the object is destroyed. this.addHandles(handle);
参数handleOrHandles WatchHandle|WatchHandle[]对象销毁后,标记为要移除的句柄。
groupKey *optional标识句柄应添加到的组的键。组中的所有句柄稍后都可使用 Accessor.removeHandles() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
clear()
-
清除当前分析结果。调用此方法后,用户可以设置新的观察点和目标。
-
continue()
-
如果停止,此方法将继续进行视线分析,用户可以添加更多目标。
-
起始版本:GeoScene Maps SDK for JavaScript 4.25
-
如果存在指定的句柄组,则返回 true。
参数groupKey *optional组键。
返回类型 描述 Boolean 如果存在指定的句柄组,则返回 true
。示例// Remove a named group of handles if they exist. if (obj.hasHandles("watch-view-updates")) { obj.removeHandles("watch-view-updates"); }
-
removeHandles(groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
移除对象拥有的句柄组。
参数groupKey *optional要移除的组键或组键的数组或集合。
示例obj.removeHandles(); // removes handles from default group obj.removeHandles("handle-group"); obj.removeHandles("other-handle-group");
-
start()
-
开始新的视线分析。
-
stop()
-
停止当前视线分析,将结果保留在视图中。用户仍可与现有目标和观察点进行交互,但无法放置新的目标点。