如何获取飞机穿过雷达两端的坐标

xkf

首先说一下大致的实现步骤:

  1. 创建雷达扫描的实体并定义飞机飞行的路线;
  2. 利用通视分析的接口找到飞机进入和穿出雷达侦测范围的位置坐标;
  3. 利用坐标构建线实体,雷达范围内为红色,范围外为绿色。
1. 创建雷达扫描的实体并定义飞机飞行的路线

首先创建雷达扫描实体,用添加实体的方式去添加雷达实体。
主要代码如下:

let sensorEntity = viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(116.45093826887725, 39.90558654617389, 14.3030),
    rectangularSensor: new Cesium.RectangularSensorGraphics({
        radius: new Cesium.CallbackProperty(function () {
            return +self.radius;
        }, false),
        slice: 120,//切分程度
        xHalfAngle: new Cesium.CallbackProperty(function () {
            return Cesium.Math.toRadians(self.xHalfAngle);
        }, false),//左右夹角
        yHalfAngle: new Cesium.CallbackProperty(function () {
            return Cesium.Math.toRadians(self.yHalfAngle);
        }, false),//上下夹角
        lineColor: new Cesium.CallbackProperty(function () {
            return Cesium.Color.fromCssColorString(self.lineColor);
        }, false),//线颜色
        material: new Cesium.Color(0.0, 1.0, 1.0, 1),//统一材质
        showScanPlane: new Cesium.CallbackProperty(function () {
            return self.scanPlane;
        }, false),//显示扫描面
        scanPlaneColor: new Cesium.CallbackProperty(function () {
            return Cesium.Color.fromCssColorString(self.scanPlaneColor);
        }, false),//扫描面颜色
        scanPlaneMode: new Cesium.CallbackProperty(function () {
            return self.scanPlaneMode ? 'vertical' : 'horizontal';
        }, false),//垂直扫描模式
        scanPlaneRate: new Cesium.CallbackProperty(function () {
            return self.scanPlaneRate;
        }, false),//扫描速率
        showIntersection: true,//是否显示扫描与地球的线
        showThroughEllipsoid: false//是否穿过地球显示
    })
});

然后创建飞机飞行路线,让飞机沿线飞行。用的是时钟函数的方式去让飞机沿线飞行的。
主要代码:

// 飞机沿线飞行
var startTime = Cesium.JulianDate.fromDate(new Date(2019, 2, 25, 16));
var startPosition = Cesium.Cartesian3.fromDegrees(116.47326309033961, 39.90512322998635, 600);
var endTime = Cesium.JulianDate.addSeconds(startTime, 1000, new Cesium.JulianDate());
var endPosition = Cesium.Cartesian3.fromDegrees(116.4189181104128, 39.903026132659456, 600);
viewer.clock.startTime = startTime.clone();
viewer.clock.stopTime = endTime.clone();
viewer.clock.currentTime = startTime.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; //Loop at the end
viewer.clock.multiplier = 10;
viewer.timeline.zoomTo(startTime, endTime);
var carPositionProperty = new Cesium.SampledPositionProperty();
carPositionProperty.addSample(startTime, startPosition);
carPositionProperty.addSample(endTime, endPosition);
var carPosition = carPositionProperty.getValue(viewer.clock.currentTime);
var heading = Cesium.Math.toRadians(-3);
var pitch = 0;
var roll = 0;
var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
var orientation = Cesium.Transforms.headingPitchRollQuaternion(carPosition, hpr);
var carModel = viewer.entities.add({
    name: "gltf",
    position: new Cesium.CallbackProperty(function () {
        return carPosition;
    }, false),
    orientation: orientation,
    model: {
        uri: "./SampleData/gltf/客机模型/客机模型.gltf",
        scale: 60
    },
    viewFrom: new Cesium.Cartesian3(35, 70, 30)
});
viewer.clock.onTick.addEventListener(function () {
    var currentTime = Cesium.JulianDate.clone(viewer.clock.currentTime);
    carPosition = carPositionProperty.getValue(currentTime);
});
2. 利用通视分析的接口找到飞机进入和穿出雷达侦测范围的位置坐标

使用通视分析从起飞点到结束点进行分析得到靠近起飞点的第一个障碍点坐标;然后反过来进行通视分析得到远离起飞点的第二个障碍点坐标:
主要代码:

// 飞机起飞结束位置坐标: 
takeOffposition = [116.47326309033961, 39.90512322998635, 560]
finishposition = [116.4189181104128, 39.903026132659456, 560]
setTimeout(function () {
    // 通视分析判断点位.
    sightline.build();
    sightline.lineWidth = 3
    //设置观察点
    sightline.viewPosition = takeOffposition;
    // 设置目标点
    var flag = sightline.addTargetPoint({
        position: finishposition,
        name: "point0"
    });
}, 200)
// 获取障碍点的方法延时运行,因为通视分析需要时间
setTimeout(function () {
    sightline.getBarrierPoint("point0", function (e) {
        positions.fisrtObstacle = e.position
    })
    // 清除第一次的通视分析结果.
    sightline.removeAllTargetPoint();
    sightline.viewPosition = finishposition;
    var flag1 = sightline.addTargetPoint({
        position: takeOffposition,
        name: "point1"
    });
}, 300)
setTimeout(function () {
    sightline.getBarrierPoint("point1", function (e) {
        positions.secondObstacle = e.position
    })
    sightline.removeAllTargetPoint();
}, 380)
3. 利用坐标构建线实体,雷达范围内为红色,范围外为绿色。

这个比较简单直接附代码:

// 结束位置到第二个穿出雷达范围实体
viewer.entities.add({
    id: "test1",
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArrayHeights([positions.secondObstacle.longitude * (180 / Math.PI), positions.secondObstacle.latitude * (180 / Math.PI), positions.secondObstacle.height, finishposition[0], finishposition[1], finishposition[2]]),
        width: 4.0,
        material: Cesium.Color.GREEN.withAlpha(0.9),
        depthFailMaterial: Cesium.Color.GREEN.withAlpha(0.9)
    }
});
// 开始位置到进入雷达范围实体
viewer.entities.add({
    id: "test2",
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArrayHeights([positions.fisrtObstacle.longitude * (180 / Math.PI), positions.fisrtObstacle.latitude * (180 / Math.PI), positions.fisrtObstacle.height, takeOffposition[0], takeOffposition[1], takeOffposition[2]]),
        width: 4.0,
        material: Cesium.Color.GREEN.withAlpha(0.9),
        depthFailMaterial: Cesium.Color.GREEN.withAlpha(0.9)
    }
});
// 构建两个点中间被发现的线实体
viewer.entities.add({
    id: "test3",
    polyline: {
        positions: Cesium.Cartesian3.fromDegreesArrayHeights([positions.secondObstacle.longitude * (180 / Math.PI), positions.secondObstacle.latitude * (180 / Math.PI), positions.secondObstacle.height, positions.fisrtObstacle.longitude * (180 / Math.PI), positions.fisrtObstacle.latitude * (180 / Math.PI), positions.fisrtObstacle.height]),
        width: 4.0,
        material: Cesium.Color.RED.withAlpha(0.9),
        depthFailMaterial: Cesium.Color.RED.withAlpha(0.9)
    }
});

最终效果如下:

在这里插入图片描述

### 回答1: 使用毫米波雷达可以通过接收反射回来的信号来获取行人的坐标。具体的实现方法包括:首先,将毫米波雷达安装在车辆或者其他设备上,然后通过发射毫米波信号,将信号发送到周围的环境中。当信号遇到行人时,会被反射回来,毫米波雷达可以通过接收反射回来的信号来计算出行人的距离和方向,从而获取行人的坐标。 ### 回答2: 毫米波雷达是一种用于测量和探测目标物体的雷达技术,可以实现高精度的目标探测和跟踪。下面是使用毫米波雷达获取行人坐标的一般步骤: 首先,毫米波雷达会发射毫米波信号。这些信号会穿过空气并与目标物体进行相互作用,一部分信号会被目标物体反射回来。 然后,毫米波雷达会接收被目标物体反射回来的信号。接收到的信号会包含目标物体的位置、距离、速度等信息。 接着,通过对接收到的信号进行分析和处理,可以提取出目标物体的特征信息。例如,可以使用信号处理算法提取出目标物体的回波信号特征,判断是否为行人。 最后,可以将目标物体的位置信息进行解码和显示,以获得行人的坐标。可以通过计算目标物体与雷达之间的距离、角度等参数,确定行人在空间中的位置。 需要注意的是,毫米波雷达获取行人坐标时,可能会受到一些干扰因素的影响,如多径效应、天气条件等。为了提高坐标的准确性和稳定性,可以采用多个雷达的组合、加入滤波算法等技术手段来提高系统性能。 总之,通过发射和接收毫米波信号,然后对信号进行分析和处理,最终可以获取到行人的坐标信息。这对于行人识别、车辆自动驾驶等领域具有重要的应用价值。 ### 回答3: 毫米波雷达是一种用于实时测量目标物体位置和运动的传感器。通过利用高频的毫米波信号,它能够实现高精度的目标检测和跟踪。 要用毫米波雷达获取行人坐标,首先需要将毫米波雷达安装在适合的位置上,例如车辆的前部或建筑物的角落。然后,雷达通过发射毫米波信号,并接收被行人散射回来的信号。 接下来,通过对接收到的信号进行信号处理和分析,可以提取出行人的特征和位置信息。例如,可以利用雷达获得的回波信号的多普勒频移来判断行人的运动状态和速度。毫米波雷达还可以通过对目标的尺寸、形状和反射特性等进行分析,实现对行人的检测和跟踪。 最后,通过对行人的特征和位置信息进行处理和计算,可以获取行人的坐标。通常可以使用三维坐标系来表示行人的位置,包括行人在水平平面上的横向和纵向位置,以及行人相对于雷达的高度位置。 总的来说,通过合适的安装位置和信号处理技术,毫米波雷达可以有效地获取行人的坐标信息。这项技术在自动驾驶、智能交通等领域具有广泛的应用前景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值