话不多说,助您 2 分钟掌握卫星星座图,知晓原理,并能绘制

效果

基础

什么是卫星星座?

详细科普不在本文浪费时间了,完全不懂的同学瞄一下卫星星座-百度百科就可以了。

实现

储备知识

简单解释一下所需的数据,能获取的卫星数据参考下图,摘取百度文库相关文章片段:

其中我们所需的信息有 3 个:

卫星号(就是卫星名称,非必须)

卫星方位角

卫星俯仰角

下图先来解释一下「方位角」与「俯仰角」是什么样子的:

卫星号:就是卫星名称,即字符串,非必须,不用解释了。

卫星方位角:就是卫星相对于测量点的方向,正北方向为 0 度,顺时针递增。

卫星俯仰角:就是在地平面上,要抬头多少度,才能望到卫星,水平方向为 0 度,头顶的垂直方向为 90 度。

所以数据通常长这样:

const data = [

{ name: 11, elevation: 11, azimuth: 111 },

{ name: 22, elevation: 45, azimuth: 222 },

{ name: 33, elevation: 33, azimuth: 333 },

];

复制代码

实现步骤

我们使用 Canvas 来实现即可。

代码步骤:

绘制背景框图

绘制卫星

绘制背景框图代码:

这里采用简单地等分俯仰角度线

//画外部圈圈

ctx.beginPath();

ctx.arc(0, 0, Radius, 0, Math.PI * 2, false);

ctx.stroke();

//画中间圈圈

ctx.beginPath();

ctx.arc(0, 0, (Radius * 2) / 3, 0, Math.PI * 2, false);

ctx.stroke();

//画内部圈圈

ctx.beginPath();

ctx.arc(0, 0, Radius / 3, 0, Math.PI * 2, false);

ctx.stroke();

// 画 8 条方位角等分线

ctx.beginPath();

for (var i = 0; i < 8; i++) {

ctx.rotate((Math.PI / 180) * 45);

ctx.moveTo(0, 0);

ctx.lineTo(0, Radius);

}

ctx.stroke();

复制代码

绘制卫星代码(核心代码!):

下面代码展示部分,忽略画笔的颜色,字体设置

for (let i = 0; i < data.length; i++) {

const element = data[i];

ctx.beginPath();

//核心的核心:计算卫星坐标。len 是卫星投影点到圆心的距离。

let len = Math.cos((element.elevation * Math.PI) / 180) * Radius;

y = Math.cos((element.azimuth * Math.PI) / 180) * len;

x = Math.sin((element.azimuth * Math.PI) / 180) * len;

//在坐标点绘制圆

ctx.arc(x, -y, 14, 0, Math.PI * 2, false);

ctx.fill();

ctx.beginPath();

//在坐标点写文字卫星号

ctx.fillText(element.name, x, -y);

}

复制代码

核心代码解释:

这里的重点是根据「方位角」与「俯仰角」,以及我们定义的半径,来算出该卫星的绘制位置。

先根据俯仰角,算出该卫星投影到地平面上的点(投影点),该点距离测量点(圆心)的距离,我们在这里称其为「圆心距」。

根据圆心距与方位角,利用三角定理,就可以得到该投影点相对于圆心的相对位置。

总结

核心原理说白了就是这么简单。

先利用俯仰角,得到卫星投影点与圆心的距离。

接着通过方位角与圆心距,得到相对圆心的坐标。

最后通过坐标就可以直接绘制了。

根据实际情况,还能加上卫星类型。例如,我们除了有 GPS 卫星,还有 GLONASS 卫星、GALILEO 卫星、以及北斗卫星。如最上面的动图所示,不同颜色代表不同的类型的卫星。

更多

待实现:

背景框图上,卫星俯仰角的度数实际上不是等分的。这里并没有体现。

卫星在同一个地方的压盖问题处理。

卫星移动(显示/消失)动画。

真正到生产环境,我们还需要对绘制逻辑进行进一步的优化。具体内容,敬请关注。

以及可以通过 3D 技术,获取更直观的效果。请关注下一篇内容。

希望本文对您有所帮助。

如有不对的地方,还请纠正,万分感激。

完整代码参考

参考:

百度文库:如何确定卫星与测试点的俯仰角和方位角

根据卫星仰角和方位角使用html5绘制天空图

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[2 分钟掌握卫星星座图]http://www.zyiz.net/tech/detail-131197.html

用Java编程卫星坐标_2 分钟掌握卫星星座图相关推荐

  1. java 四舍五入_《JAVA编程思想》5分钟速成:1-4章:概述

    前言: 1.面向对象的特征有哪些方面? 2.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 3.float f=3.4;是否正确? 4.short s1 = ...

  2. java 析构函数_《JAVA编程思想》5分钟速成:第5章(初始化和清理)

    第五章.初始化和清理 前言 1.初始化顺序(静态成员.非静态成员,构造器.父类构造器)的排序: 2.构造器(constructor)是否可被重写(override)? 3.final, finally ...

  3. java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)

    第9章 接口 前言: 1.抽象类(abstract class)和接口(interface)有什么异同? 2.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(n ...

  4. Java编程笔记9:容器(下)

    Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...

  5. java和python的比较-如何对比Python和Java,只需三分钟告诉你!

    原标题:如何对比Python和Java,只需三分钟告诉你! Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力 ...

  6. java编程算法出现在窗口_Java实现轨迹压缩算法开放窗口代码编程实例分享

    Java实现轨迹压缩算法开放窗口代码编程实例分享,今天要给各位朋友分享的这篇文章主要介绍了Java编程实现轨迹压缩算法开放窗口实例代码,具有一定的参考价值,有兴趣的朋友来看看吧. 轨迹压缩算法 场景描 ...

  7. java编程测试题_Java编程测试可帮助您评估求职者

    java编程测试题 Sometimes back one of my good friend asked me to assess few job candidates for Java progra ...

  8. 【Java编程系列】java用POI、Itext生成并下载PPT、PDF文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  9. Java编程那些事儿78——时间和日期处理

    Java编程那些事儿78--时间和日期处理 陈跃峰 出自:http://blog.csdn.net/mailbomb 9.6 java.util包 java.util包是Java语言提供的工具类包,该 ...

最新文章

  1. GraphNVP | 用于分子图生成的可逆流模型
  2. makefile入门
  3. php排字符串的高低位怎么区分,PHP-根据字符串和所用字体计算字符串所占宽高...
  4. win10巨帧数据包在哪里设置_Win10电脑总感觉网速慢,是什么原因
  5. Java学习手记2——多线程
  6. available scholarships Cambridge
  7. IDEA @Override is not allowed when implementing interface method(转载)
  8. 如何对待基金评审负面意见?
  9. 编程基础 垃圾回收_编程中的垃圾回收指南
  10. RBF、GRNN和PNN神经网络的深入浅出
  11. Redis和MongoDB的区别
  12. linux 基础课程讲义,Linux基础讲义.ppt
  13. 微软.Net离线语音识别
  14. RO、RW和ZI数据解析
  15. python问题——ValueError: only 2 non-keyword arguments accepted
  16. 软件测试cpu性能测试案例,性能测试之用例得分评价和 CPU 内存数据监控——谈谈个人看法和实践总结...
  17. 学习Python的三种境界,你现在是在什么境界?
  18. 移植u-boot到S3C2440之从内存启动
  19. 三点共线 之 优化A*路径
  20. A律13折现编解码实现,SystemVerilog实现,实测可用带完整的testbench

热门文章

  1. 大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能
  2. 从零开始学WEB前端——CSS基础
  3. 关于在vue项目中引入pdf.js的跨域问题(已解决)。
  4. 要取好名字的来这儿!哈哈
  5. tkmybatis 子查询_【10/21】南池袋送餐桌和椅子 收纳盒子 洗衣机 | 下落合站送洗衣机...
  6. vue手机端项目php,MintUI基于Vue.js移动端组件库详解
  7. 什么是会员标签?会员标签有什么作用呢?
  8. 系统的入门脑机接口神经科学,一个网站就够了 - NeuroTechEDU
  9. 关于房价问题的看法。
  10. 如何将Excel多行单元格文字合并到一个单元格中