主要代码说明:
卫星两行信息文档:
updater.config.towline.httpfile.url=https://celestrak.com/NORAD/elements/active.txt
定时更新卫星两行信息: @Scheduled(cron = "0 0 4 * * ?")//凌晨两点执行 public void refreshTwoLine(){ service.readTowLineFileFromRemote(httpfile); }
解析两行数据:
@Override public void readTowLineFileFromRemote(String httpfile) { try { URL url = new URL(httpfile); //字节输入流 InputStream is = url.openStream(); //字节流转字符流 InputStreamReader isr = new InputStreamReader(is, "UTF-8"); //再转缓冲流 提高读取效率 BufferedReader br = new BufferedReader(isr); String line = null; String satelName = null; String line1 = null; String line2 = null; int i = 1; //每三行数据组成一颗卫星两行数据 //FIXME 需要检查卫星是否在运控监控范围内,如果不是,则不发送给总线处理。 List<Tle> list = new ArrayList<Tle>(); Tle tle = null; while((line = br.readLine()) != null) { if(i % 3 == 1) { satelName = line; }else if(i % 3 == 2) { line1 = line; }else { line2 = line; tle = new Tle(satelName,line1,line2); //if(this.saveNewTowLineTodb(tle)) { //更新保存 if(i % 300 == 0) {//FIXME 临时做法,减少发送给消息总线的数据。 list.add(tle); } //} } i++; } System.out.println("发送给消息总线的对象数量:" + list.size()); //向总线发出卫星轨道数据已更新的消息 message.outputStream().send( MessageBuilder.withPayload( list ).build()); }catch (IOException e) { e.printStackTrace(); } }
代码下载连接:
https://github.com/w2cdmi/cdmi-starlink-all/cdmi-starlink-orbit-updater