问题描述
我正在尝试使用来自 norAD 的 tls 数据创建 3d 地图以创建卫星跟踪器。目前我能够为每颗卫星生成正确的坐标,我目前用红点表示它们。我希望点的位置实时移动。目前,我正在查看 cesiumjs 公开的时钟文档,在 clock.tick 事件中,我每秒收到许多事件,这不是我所期望的。可能与浏览器的帧率有关。每当我向 viewer.clockviewmodel.Clock.tick
添加事件侦听器时,我的应用程序变得越来越慢,最终变得无响应,因此这不是一个好的选择。我正在阅读文档,我看到 Clockviewmodel
数据类型包含一个名为 currentTime 的属性,根据文档是:Gets or sets the current time. See Clock#currentTIme. This property is observable
通过 observable 是否意味着每当此属性更新时,我可以调用一些功能来更新卫星的位置还是我吠错了树?这是我的代码。
Globe.js:用于设置铯查看器
// The URL on your server where CesiumJS's static files are hosted.
window.CESIUM_BASE_URL = '/';
import * as Cesium from 'cesium';
// Initialize the Cesium Viewer in the HTML element with the "cesiumContainer" ID.
const viewer = new Cesium.Viewer('cesiumContainer',{
terrainProvider: Cesium.createWorldTerrain()
});
export {viewer}
trackSats.js:用于获取卫星数据
const axios = require('axios')
const chunk = require('lodash/chunk')
const satellite = require('satellite.js')
async function trackSats()
{
var satData = await axios.get("./satdata");
satData = satData.data.split("\r\n")
satData = chunk(satData,3)
var satRecs = new Array();
satData.forEach((sat)=>{
try
{
satRec = satellite.twoline2satrec(sat[1],sat[2]);
satRecs.push({"name": sat[0],satRec})
}
catch(err)
{
//console.log(err)
}
})
return satRecs;
}
module.exports = trackSats;
index.js:完成大部分繁重工作的地方,也是 webpack 的入口
const trackSats = require('./trackSats')
const {viewer} = require('./globe.js')
import * as Cesium from 'cesium';
const satellite = require('satellite.js')
trackSats().then(sats=>{
console.log(sats)
sats.forEach(sat=>{
globeSetup(sat)
})
}).catch(err=>{
console.log("Couldn't get sat data")
console.log(err)
});
function globeSetup(sat){
const date = new Date();
var gsTime = satellite.gstime(date)
var positionAndVeLocity = satellite.propagate(sat.satRec,new Date())
var position = satellite.eciToGeodetic(positionAndVeLocity.position,gsTime)
position.latitude = satellite.degreesLat(position.latitude);
position.longitude = satellite.degreesLong(position.longitude)
position.height *= 1000
const pointEntity = viewer.entities.add({
description: sat.name,position: Cesium.Cartesian3.fromdegrees(position.longitude,position.latitude,position.height),point: {pixelSize: 5,color: Cesium.Color.RED}
})
}
我还使用一个简单的 express 应用程序来为 ./dist 文件夹提供服务,并将请求转发到 https://www.celestrak.com/NORAD/elements/active.txt,因为原始数据没有 cors 标头,所以我必须转发请求
如您所见,我希望能够创建某种函数,该函数可以更新每个卫星的关联 pointEntity 并在每次时钟前进一秒或任何其他时间间隔时用它更新坐标。任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)