尝试一下在线预览此示例演示如何使用地理处理器计算视域。单击地图上的任意点可查看 5 英里半径内可见的所有区域。模型可能需要几秒钟才能运行并发回结果。
视域计算通过 GeoScene Server 地理处理服务完成。该服务提供对服务器上包含视域工具的模型的访问。地理处理器方法需要服务的 URL。您可以使用服务目录来发现您自己的地理处理服务的 URL 及其中的方法。
工作原理
单击地图时,事件侦听器将调用函数 computeViewshed()
,该函数在单击位置添加一个 SimpleMarkerSymbol。该函数还设置了该方法所需的两个参数。第一个参数是单击的点,第二个参数是视域的半径。
下一步是将参数传递给地理处理器和 execute()
以同步执行方法。请注意,也可以调用 submitJob()
以异步运行方法。execute 方法返回一个 promise,该承诺可与 .then() 方法一起使用以定义回调,在本例中为 drawResultData
。
1
2
3
4
5
6
7
8
9
10
const params = {
Input_Observation_Point: featureSet,
Viewshed_Distance: vsDistance
};
const options = {
outSpatialReference: {
wkid: 102100
}
};
geoprocessor.execute(gpUrl, params, options).then(drawResultData);
drawResultData
回调函数获取存储在结果对象中的要素,循环访问这些要素,并对每个图形应用一个符号。然后,视图将动画化为生成的图形数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const resultFeatures = result.results[0].value.features;
// Assign each resulting graphic a symbol
const viewshedGraphics = resultFeatures.map((feature) => {
feature.symbol = fillSymbol;
return feature;
});
// Add the resulting graphics to the graphics layer
graphicsLayer.addMany(viewshedGraphics);
view.goTo({
target: viewshedGraphics,
tilt: 0
});