用Java编程卫星坐标_2 分钟掌握卫星星座图
话不多说,助您 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 分钟掌握卫星星座图相关推荐
- java 四舍五入_《JAVA编程思想》5分钟速成:1-4章:概述
前言: 1.面向对象的特征有哪些方面? 2.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 3.float f=3.4;是否正确? 4.short s1 = ...
- java 析构函数_《JAVA编程思想》5分钟速成:第5章(初始化和清理)
第五章.初始化和清理 前言 1.初始化顺序(静态成员.非静态成员,构造器.父类构造器)的排序: 2.构造器(constructor)是否可被重写(override)? 3.final, finally ...
- java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)
第9章 接口 前言: 1.抽象类(abstract class)和接口(interface)有什么异同? 2.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(n ...
- Java编程笔记9:容器(下)
Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...
- java和python的比较-如何对比Python和Java,只需三分钟告诉你!
原标题:如何对比Python和Java,只需三分钟告诉你! Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力 ...
- java编程算法出现在窗口_Java实现轨迹压缩算法开放窗口代码编程实例分享
Java实现轨迹压缩算法开放窗口代码编程实例分享,今天要给各位朋友分享的这篇文章主要介绍了Java编程实现轨迹压缩算法开放窗口实例代码,具有一定的参考价值,有兴趣的朋友来看看吧. 轨迹压缩算法 场景描 ...
- java编程测试题_Java编程测试可帮助您评估求职者
java编程测试题 Sometimes back one of my good friend asked me to assess few job candidates for Java progra ...
- 【Java编程系列】java用POI、Itext生成并下载PPT、PDF文件
热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...
- Java编程那些事儿78——时间和日期处理
Java编程那些事儿78--时间和日期处理 陈跃峰 出自:http://blog.csdn.net/mailbomb 9.6 java.util包 java.util包是Java语言提供的工具类包,该 ...
最新文章
- GraphNVP | 用于分子图生成的可逆流模型
- makefile入门
- php排字符串的高低位怎么区分,PHP-根据字符串和所用字体计算字符串所占宽高...
- win10巨帧数据包在哪里设置_Win10电脑总感觉网速慢,是什么原因
- Java学习手记2——多线程
- available scholarships Cambridge
- IDEA @Override is not allowed when implementing interface method(转载)
- 如何对待基金评审负面意见?
- 编程基础 垃圾回收_编程中的垃圾回收指南
- RBF、GRNN和PNN神经网络的深入浅出
- Redis和MongoDB的区别
- linux 基础课程讲义,Linux基础讲义.ppt
- 微软.Net离线语音识别
- RO、RW和ZI数据解析
- python问题——ValueError: only 2 non-keyword arguments accepted
- 软件测试cpu性能测试案例,性能测试之用例得分评价和 CPU 内存数据监控——谈谈个人看法和实践总结...
- 学习Python的三种境界,你现在是在什么境界?
- 移植u-boot到S3C2440之从内存启动
- 三点共线 之 优化A*路径
- A律13折现编解码实现,SystemVerilog实现,实测可用带完整的testbench
热门文章
- 大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能
- 从零开始学WEB前端——CSS基础
- 关于在vue项目中引入pdf.js的跨域问题(已解决)。
- 要取好名字的来这儿!哈哈
- tkmybatis 子查询_【10/21】南池袋送餐桌和椅子 收纳盒子 洗衣机 | 下落合站送洗衣机...
- vue手机端项目php,MintUI基于Vue.js移动端组件库详解
- 什么是会员标签?会员标签有什么作用呢?
- 系统的入门脑机接口神经科学,一个网站就够了 - NeuroTechEDU
- 关于房价问题的看法。
- 如何将Excel多行单元格文字合并到一个单元格中