当前位置:网站首页>How to obtain the coordinates of the aircraft passing through both ends of the radar
How to obtain the coordinates of the aircraft passing through both ends of the radar
2022-07-05 18:13:00 【supermapsupport】
xkf
First, let's talk about the general implementation steps :
- Create a radar scanned entity and define the route of the aircraft ;
- Use the interface of intervisibility analysis to find the position coordinates of the aircraft entering and exiting the radar detection range ;
- Use coordinates to build line entities , The radar range is red , Green outside the range .
1. Create a radar scanned entity and define the route of the aircraft
First, create a radar scanning entity , Add radar entities by adding entities .
The main codes are as follows :
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,// Degree of segmentation
xHalfAngle: new Cesium.CallbackProperty(function () {
return Cesium.Math.toRadians(self.xHalfAngle);
}, false),// Angle between left and right
yHalfAngle: new Cesium.CallbackProperty(function () {
return Cesium.Math.toRadians(self.yHalfAngle);
}, false),// Angle between top and bottom
lineColor: new Cesium.CallbackProperty(function () {
return Cesium.Color.fromCssColorString(self.lineColor);
}, false),// Line color
material: new Cesium.Color(0.0, 1.0, 1.0, 1),// Uniform material
showScanPlane: new Cesium.CallbackProperty(function () {
return self.scanPlane;
}, false),// Display scanning surface
scanPlaneColor: new Cesium.CallbackProperty(function () {
return Cesium.Color.fromCssColorString(self.scanPlaneColor);
}, false),// Scanning surface color
scanPlaneMode: new Cesium.CallbackProperty(function () {
return self.scanPlaneMode ? 'vertical' : 'horizontal';
}, false),// Vertical scan mode
scanPlaneRate: new Cesium.CallbackProperty(function () {
return self.scanPlaneRate;
}, false),// Scanning rate
showIntersection: true,// Whether to display the scanning line with the earth
showThroughEllipsoid: false// Whether to cross the Earth shows
})
});
Then create an aircraft flight path , Let the plane fly along the line . It uses the clock function to make the aircraft fly along the line .
Main code :
// The plane flew along the line
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/ The airliner model / The airliner model .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. Use the interface of intervisibility analysis to find the position coordinates of the aircraft entering and exiting the radar detection range
Use intervisibility analysis to analyze from the takeoff point to the end point to obtain the coordinates of the first obstacle point close to the takeoff point ; Then, the intervisibility analysis is carried out in turn to obtain the coordinates of the second obstacle point away from the takeoff point :
Main code :
// Coordinates of aircraft take-off end position :
takeOffposition = [116.47326309033961, 39.90512322998635, 560]
finishposition = [116.4189181104128, 39.903026132659456, 560]
setTimeout(function () {
// Intervisibility analysis to judge the point position .
sightline.build();
sightline.lineWidth = 3
// Set observation point
sightline.viewPosition = takeOffposition;
// Set the target point
var flag = sightline.addTargetPoint({
position: finishposition,
name: "point0"
});
}, 200)
// The method of obtaining the obstacle points delays the operation , Because intervisibility analysis takes time
setTimeout(function () {
sightline.getBarrierPoint("point0", function (e) {
positions.fisrtObstacle = e.position
})
// Clear the first intervisibility analysis result .
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. Use coordinates to build line entities , The radar range is red , Green outside the range .
This is relatively simple and directly attached with code :
// End position to the second entity out of radar range
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)
}
});
// Start position to enter the radar range entity
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)
}
});
// Construct a line entity found between two points
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)
}
});
The end result is as follows :
边栏推荐
- VC编程入门浅谈「建议收藏」
- How to improve the thermal management in PCB design with the effective placement of thermal through holes?
- Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
- Generate classes from XML schema
- EasyCVR平台通过接口编辑通道出现报错“ID不能为空”,是什么原因?
- 写作写作写作写作
- Star ring technology data security management platform defender heavy release
- 《力扣刷题计划》复制带随机指针的链表
- Simulate the hundred prisoner problem
- Use of print function in MATLAB
猜你喜欢
Binder开辟线程数过多导致主线程ANR异常
Sophon CE Community Edition is online, and free get is a lightweight, easy-to-use, efficient and intelligent data analysis tool
Find the first k small element select_ k
node_exporter内存使用率不显示
最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
瀚升优品app翰林优商系统开发功能介绍
How awesome is the architecture of "12306"?
Sophon autocv: help AI industrial production and realize visual intelligent perception
ISPRS2022/云检测:Cloud detection with boundary nets基于边界网的云检测
记一次使用Windbg分析内存“泄漏”的案例
随机推荐
Numerical calculation method chapter8 Numerical solutions of ordinary differential equations
[paddlepaddle] paddedetection face recognition custom data set
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相
Failed to virtualize table with JMeter
How to solve the error "press any to exit" when deploying multiple easycvr on one server?
Daily exercise: a series of dates
Le cours d'apprentissage de la machine 2022 de l'équipe Wunda arrive.
数值计算方法 Chapter8. 常微分方程的数值解
How to improve the thermal management in PCB design with the effective placement of thermal through holes?
Nacos distributed transactions Seata * * install JDK on Linux, mysql5.7 start Nacos configure ideal call interface coordination (nanny level detail tutorial)
Simulate the hundred prisoner problem
苹果手机炒股安全吗?打新债是骗局吗?
node_exporter内存使用率不显示
[paddleclas] common commands
Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
Compared with the loss of Wenxin, the performance is improved a lot
Easynmon Usage Summary
buuctf-pwn write-ups (9)
开户复杂吗?网上开户安全么?
Tkinter window preload