创建可视域需要先获取鼠标对应的地球点位,然后再配置偏角,距离(半径)然后在监听函数里面动态改变可视域的偏角与半径就行
代码:
function getViewshed() {
sgworld.Window.SetInputMode(1); //鼠标样式修改
sgworld.AttachEvent("OnLButtonDown", StartDrawViewshed)
sgworld.AttachEvent("OnFrame", DrawViewshedOnFrame)
sgworld.AttachEvent("OnRButtonUp", StopDrawViewshed)
}
function StartDrawViewshed(flags, x, y) {
try {
var pWorldPointInfo = sgworld.Window.PixelToWorld(x, y); // 将屏幕坐标转换为地理坐标
pot = pWorldPointInfo.Position
if (null == pWorldPointInfo) {
return false;
}
var pos = pWorldPointInfo.Position;
view = sgworld.Analysis.Create3DViewshed(
pot,
90,
60.0,
10000.0, "")
} catch (ex) {
alert(ex.description);
}
}
function DrawViewshedOnFrame(flags, x, y) {
var mouseInfo = sgworld.Window.GetMouseInfo();
var mousePoint = sgworld.Window.PixelToWorld(mouseInfo.X, mouseInfo.Y);
var p2 = mousePoint.Position
view.Position.Yaw = sgworld.CoordServices.GetAimingAngles(view.Position, p2).Yaw
let distance = sgworld.Creator.GeometryCreator.CreateLineStringGeometry([p2, view.Position]).length
// console.log(distance)
view.Distance = distance
console.log(view.Distance)
}
function StopDrawViewshed(flags, x, y) {
sgworld.DetachEvent("OnLButtonDown", StartDrawViewshed)
sgworld.DetachEvent("OnFrame", DrawViewshedOnFrame)
sgworld.DetachEvent("OnRButtonUp", StopDrawViewshed)
sgworld.Window.SetInputMode(0); //鼠标样式修改
view = null
}