当前位置:网站首页>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 :
边栏推荐
- 第十一届中国云计算标准和应用大会 | 云计算国家标准及白皮书系列发布 华云数据全面参与编制
- Check namespaces and classes
- "Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
- nano的CAN通信
- Fix vulnerability - mysql, ES
- 写作写作写作写作
- Eliminate the writing of 'if () else{}'
- matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图
- 爱因斯坦求和einsum
- Isprs2022 / Cloud Detection: Cloud Detection with Boundary nets Boundary Networks Based Cloud Detection
猜你喜欢
随机推荐
瀚升优品app翰林优商系统开发功能介绍
Xiaobai getting started with NAS - quick building private cloud tutorial series (I) [easy to understand]
Unicode processing in response of flash interface
消除`if()else{ }`写法
Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
【PaddleClas】常用命令
[paddlepaddle] paddedetection face recognition custom data set
[utiliser Electron pour développer le Bureau sur youkirin devrait]
从XML架构生成类
ConvMAE(2022-05)
How to solve the error "press any to exit" when deploying multiple easycvr on one server?
Isprs2022 / Cloud Detection: Cloud Detection with Boundary nets Boundary Networks Based Cloud Detection
Multithreading (I) processes and threads
Introduction to Resampling
检查命名空间和类
热通孔的有效放置如何改善PCB设计中的热管理?
ISPRS2022/雲檢測:Cloud detection with boundary nets基於邊界網的雲檢測
JVM第三话 -- JVM性能调优实战和高频面试题记录
[TestLink] testlink1.9.18 solutions to common problems
Let more young people from Hong Kong and Macao know about Nansha's characteristic cultural and creative products! "Nansha kylin" officially appeared