生活随笔
收集整理的這篇文章主要介紹了
Python之深入解析如何制作国际空间站实时跟踪器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
Open Notify 是一個開源項目,旨在為 NASA 的一些出色數據提供簡單的編程接口。 open-notify.org 的作者做了一些工作,以獲取原始數據并將其轉換為與太空和航天器有關的 API。 現在將通過這個接口,獲取得到國際空間站的位置,并實時地繪制到地圖上。 為了實現該目標,得先安裝 ISS_Info:
pip install ISS
- Info
二、地圖初始化
為了實時展示國際空間站的路徑,需要使用 turtle 繪制曲線,因此可以創建一個 turtle 畫布,將背景設為地球:
import ISS_Info
import turtle
import time
import json
import urllib
. request
screen
= turtle
. Screen
( )
screen
. setup
( 720 , 360 )
screen
. setworldcoordinates
( - 180 , - 90 , 180 , 90 )
screen
. bgpic
( "map.png" )
screen
. bgcolor
( "black" )
screen
. register_shape
( "isss.gif" )
screen
. title
( "Real time ISS tracker" )
iss
= turtle
. Turtle
( )
iss
. shape
( "isss.gif" )
三、獲取空間站的人數
如果能知道空間站上的宇航員人數,就能更加準確的跟蹤國際空間站。幸運的是 open-notify 確實提供了這樣的接口。 為了獲取人數信息,必須向下列接口請求拿到數據,并將相應的宇航員名字寫在左上角:
http
: // api
. open - notify
. org
/ astros
. json
astronauts
= turtle
. Turtle
( )
astronauts
. penup
( )
astronauts
. color
( 'black' )
astronauts
. goto
( - 178 , 86 )
astronauts
. hideturtle
( )
url
= "http://api.open-notify.org/astros.json"
response
= urllib
. request
. urlopen
( url
)
result
= json
. loads
( response read
( ) )
print ( "There are currently " + str ( result
[ "number" ] ) + " astronauts in space:" )
print ( "" )
astronauts
. write
( "People in space: " + str ( result
[ "number" ] ) , font
= style
)
astronauts
. sety
( astronauts
. ycor
( ) - 5 ) people
= result
[ "people" ] for p
in people
: print ( p
[ "name" ] + " on: " + p
[ "craft" ] ) astronauts
. write
( p
[ "name" ] + "on:" + p
[ "craft" ] , font
= style
) astronauts
. sety
( astronauts
. ycor
( ) - 5 )
四、繪制空間站位置
為了能夠繪制空間站的實時位置,需要請求拿到空間站的位置信息。請求的接口是:
http
: // api
. open - notify
. org
/ iss
- now
. json
不過作者將其封裝成了一個函數,我們直接調用 iss_current_loc 即可,循環獲取國際空間站位置:
while True : location
= ISS_Info
. iss_current_loc
( ) lat
= location
[ 'iss_ position' ] [ 'latitude' ] lon
= location
[ 'iss_ position' ] [ 'longitude' ] print ( "Position: \n latitude: {}, longitude: {}" . format ( lat
, lon
) ) pos
= iss
. pos
( ) posx
= iss
. xcor
( ) if iss
. xcor
( ) >= ( 179.1 ) : iss
. penup
( ) iss
. goto
( float ( lon
) , float ( lat
) ) time
. sleep
( 5 ) else : iss
. goto
( float ( lon
) , float ( lat
) ) iss
. pendown
( ) time
. sleep
( 5 )
我們還可以標出自己目前所處的位置,以查看和國際空間站的距離及空間站經過你上空的時間點(UTC)。
lat
= 112.5118928
lon
= 23.8534489
prediction
= turtle
. Turtle
( )
prediction
. penup
( )
prediction
. color
( 'yellow' )
prediction
. goto
( lat
, lon
)
prediction
. dot
( 5 )
prediction
. hideturtle
( )
url
= 'http://api.open-notify.org/iss-pass.json?lat=' + str ( lat
- 90 ) + '&lon=' + str ( lon
)
response
= urllib
. request
. urlopen
( url
)
result
= json
. loads
( response
. read
( ) )
over
= result
[ 'response' ] [ 1 ] [ 'risetime' ]
prediction
. write
( time
. ctime
( over
) , font
= style
)
不過這里值得注意的是,iss-pass.json 這個接口的緯度計算必須在 -90 到 90 之內,因此深圳的緯度需要減去 90。 最終效果如下:
總結
以上是生活随笔 為你收集整理的Python之深入解析如何制作国际空间站实时跟踪器 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。