Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置

hello,大家好,我是wangzirui32,今天在网上看到一个Python程序,是爬取国际空间站实时经纬度并显示到地图上,我自己也想学习做一个这样的项目,顺便巩固亿下Python的基础知识。

学习目录

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

Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置
ISS.png
Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置

; 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位置可能不同)

Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置
如果你打开这个窗口时间长亿点(几个小时),就可以看见空间站环绕地球一周的”壮举”了!

好了,这就是今天的全部内容,喜欢的可以点赞和收藏,我们下次再见!

Original: https://blog.csdn.net/wangzirui32/article/details/115439367
Author: wangzirui32
Title: Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782006/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球