hello,大家好,我是wangzirui32,今天在网上看到一个Python程序,是爬取国际空间站实时经纬度并显示到地图上,我自己也想学习做一个这样的项目,顺便巩固亿下Python的基础知识。
学习目录
- 1. 国际空间站经纬度查询网址
- 2. 图片素材
- 3. 创建项目文件夹
- 4. 编写代码
* - get_data.py 获取经纬度数据
- ISS.py 创建空间站对象
- show_map.py 显示ISS位置
- 5. 展示结果
1. 国际空间站经纬度查询网址
http://api.open-notify.org/iss-now.json
此网址可以查询ISS(以下全用国际空间站的简称)的经纬度位置,返回的数据如下:
{
"message": "success",
"timestamp": 1617591468,
"iss_position": {
"latitude": "48.9858",
"longitude": "171.4484"
}
}
可以看出,longitude是经度,latitude是纬度,我们可以通过requests库请求这些数据。
2. 图片素材
首先,你得有两张图片素材,一张是NASA官网的世界地图:
map.gif
ISS.png
; 3. 创建项目文件夹
首先,你需要创建一个项目文件夹,导入上面2个素材,并创建以下Python文件:
get_data.py —— 获取ISS的位置信息
show_map.py —— 在地图上显示ISS位置
ISS.py —— 存储ISS的Pygame对象
创建完成后,开始编写代码。
4. 编写代码
get_data.py 获取经纬度数据
from requests import get
from json import loads
def get_data():
"""
get_data 函数
获取国际空间站(ISS)的实时位置并返回经纬度
:return:
"""
url = "http://api.open-notify.org/iss-now.json"
r = get(url)
json_data = loads(r.text)['iss_position']
return json_data
get_data函数获取ISS的经纬度并返回数据。
ISS.py 创建空间站对象
import pygame
class ISS():
"""
ISS 类
主要用来创建空间站的对象
并根据经纬度确定位置
"""
def __init__(self, screen, height, width):
self.screen = screen
self.screen_height = height
self.screen_width = width
self.image = pygame.image.load("ISS.png")
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.rect.x = 0
self.rect.y = 0
def blitme(self, data):
"""
blitme 函数
绘制ISS的位置
"""
self.rect.x, self.rect.y = self.get_position(data)
self.screen.blit(self.image, self.rect)
def get_position(self, data):
"""
get_position 函数
获取ISS的经纬度
并转换成Pygame的坐标
:return:
"""
longitude = float(data["longitude"])
latitude = float(data["latitude"])
x = self.screen_height / 360 * (longitude + 180)
y = self.screen_width / 180 * (90 - latitude)
return x, y
ISS类主要有2个函数(除去初始化函数),一个是绘制空间站的位置,另一个是计算空间站的经纬度在Pygame上的坐标。
show_map.py 显示ISS位置
import pygame
from get_data import get_data
from sys import exit
from ISS import ISS
def run():
height, width = 720, 360
pygame.init()
screen = pygame.display.set_mode((height, width))
pygame.display.set_caption("ISS 国际空间站实时位置")
bg = pygame.image.load("map.gif")
ISS_object = ISS(screen, height, width)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
screen.blit(bg, (0, 0))
ISS_object.blitme(get_data())
pygame.display.flip()
run()
这段代码导入了之间编写的程序,并调用这些函数和类进行显示。
5. 展示结果
运行代码,应该可以看到如下图片:(ISS位置可能不同)
如果你打开这个窗口时间长亿点(几个小时),就可以看见空间站环绕地球一周的”壮举”了!
好了,这就是今天的全部内容,喜欢的可以点赞和收藏,我们下次再见!
Original: https://blog.csdn.net/wangzirui32/article/details/115439367
Author: wangzirui32
Title: Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782006/
转载文章受原作者版权保护。转载请注明原作者出处!