skyline二次开发之Analysis操作创建可视域

创建可视域需要先获取鼠标对应的地球点位,然后再配置偏角,距离(半径)然后在监听函数里面动态改变可视域的偏角与半径就行
代码:

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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值