当前位置:网站首页>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 :
边栏推荐
- MATLAB中print函数使用
- 金太阳开户安全吗?万一免5开户能办理吗?
- How to solve the error "press any to exit" when deploying multiple easycvr on one server?
- Electron安装问题
- 检查命名空间和类
- Notes on common management commands of openshift
- Star Ring Technology launched transwarp Navier, a data element circulation platform, to help enterprises achieve secure data circulation and collaboration under privacy protection
- 消除`if()else{ }`写法
- New words new words new words new words [2]
- Xiaobai getting started with NAS - quick building private cloud tutorial series (I) [easy to understand]
猜你喜欢
Elk log analysis system
Let more young people from Hong Kong and Macao know about Nansha's characteristic cultural and creative products! "Nansha kylin" officially appeared
JVM第三话 -- JVM性能调优实战和高频面试题记录
About Estimation with Cross-Validation
Simulate the hundred prisoner problem
记一次使用Windbg分析内存“泄漏”的案例
FCN: Fully Convolutional Networks for Semantic Segmentation
修复漏洞 - mysql 、es
Failed to virtualize table with JMeter
Unicode processing in response of flash interface
随机推荐
访问数据库使用redis作为mysql的缓存(redis和mysql结合)
matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图
EasyCVR接入设备开启音频后,视频无法正常播放是什么原因?
Sophon AutoCV:助力AI工业化生产,实现视觉智能感知
Memory management chapter of Kobayashi coding
Multithreading (I) processes and threads
[JMeter] advanced writing method of JMeter script: all variables, parameters (parameters can be configured by Jenkins), functions, etc. in the interface automation script realize the complete business
rsync
消除`if()else{ }`写法
Unicode processing in response of flash interface
Elk log analysis system
Compared with the loss of Wenxin, the performance is improved a lot
分享:中兴 远航 30 pro root 解锁BL magisk ZTE 7532N 8040N 9041N 刷机 刷面具原厂刷机包 root方法下载
[PM2 details]
The easycvr platform reports an error "ID cannot be empty" through the interface editing channel. What is the reason?
Zabbix
MATLAB中print函数使用
GFS distributed file system
Mask wearing detection based on yolov3
开户复杂吗?网上开户安全么?