Team Updates

Team Stream Item
B
Bikram Pandit
This is the simulation for tracking satelite using the API from NASA. It converts TLE (Two line element) data from satellite to latitude and longitude project of orbits into the earth.

Please run plotter-main.py and install required dependencies

view raw README.md hosted with ❤ by GitHub
[
{
"@id": "https://data.ivanstanojevic.me/api/tle/25544",
"@type": "TleModel",
"satelliteId": 25544,
"name": "ISS (ZARYA)",
"date": "2019-10-19T17:06:18+00:00",
"line1": "1 25544U 98067A 19292.71270833 .00000078 00000-0 93604-5 0 9996",
"line2": "2 25544 51.6434 103.7961 0007043 164.9912 17.5733 15.50203574194572",
"line_color": "coral",
"marker_color": "green",
"title": "ISS"
},
{
"@id": "https://data.ivanstanojevic.me/api/tle/44329",
"@type": "TleModel",
"satelliteId": 44329,
"name": "RAAVANA-1",
"date": "2019-10-18T11:49:54+00:00",
"line1": "1 44329U 98067QE 19291.49299144 .00008243 00000-0 13481-3 0 9993",
"line2": "2 44329 51.6395 108.0382 0007374 173.2880 186.8211 15.53444264 19189",
"line_color": "blue",
"marker_color": "red",
"title": "NepaliSat-1"
}
]
view raw data.json hosted with ❤ by GitHub
importrequests
importtime
defget_page(page_no=1):
print('Processing page %d'%page_no)
response=requests.get("https://data.ivanstanojevic.me/api/tle?page=%d"%page_no).json()
returnresponse['member']
defget_last_page():
response=requests.get("https://data.ivanstanojevic.me/api/tle").json()
last_link=response['view']['last']
returnint(last_link.split('=')[1].strip())
out=open('out.csv','a')
dict= []
forpage_numberinrange(6,100):
data=get_page(page_no=page_number)
formemberindata:
id=member['@id']
type=member['@type']
satelliteId=member['satelliteId']
name=member['name']
date=member['date']
line1=member['line1']
line2=member['line2']
wr='%s,%s,%d,%s,%s,%s,%s\n'% (id,type,satelliteId,name,date,line1,line2)
out.write(wr)
time.sleep(5)
out.close()
view raw fetcher.py hosted with ❤ by GitHub
importrequests
importephem
fromthreadingimportThread
members= []
defget_page(page_no=1):
print('Processing page %d'%page_no)
response=requests.get("https://data.ivanstanojevic.me/api/tle?page=%d"%page_no).json()
returnresponse['member']
defget_last_page():
response=requests.get("https://data.ivanstanojevic.me/api/tle").json()
last_link=response['view']['last']
returnint(last_link.split('=')[1].strip())
defasyncLoadData(*page_numbers):
forpage_numberinpage_numbers:
data=get_page(page_number)
data_for_page[page_number-1] =data
last_page_number=get_last_page()
data_for_page= [None] *last_page_number
page_numbers=list(range(1, last_page_number+1))
no_of_threads=20
pages_per_thread=len(page_numbers) //no_of_threads
page_number_chunks= [page_numbers[page_number:page_number+pages_per_thread] forpage_numberin
range(0, len(page_numbers), pages_per_thread)]
threads= []
forpage_number_chunkinpage_number_chunks:
thread=Thread(target=asyncLoadData,args=page_number_chunk)
thread.start()
threads.append(thread)
forthreadinthreads:
thread.join()
members= []
forpage_numberinrange(1,last_page_number+1):
data=data_for_page[page_number-1]
ifdataisNone:
continue
formemberindata:
members.append(member)
print(members)
importephem
importdatetime
importmath
importjson
importmatplotlib.pyplotasplt
frommpl_toolkits.basemapimportBasemap
m=Basemap(
projection='mill',
resolution='h',
area_thresh=10000.,)
my_loc= [85,27]
deffind_dist(lat1,lon1,lat2,lon2):
frommathimportsin, cos, sqrt, atan2, radians
R=6373.0
dlon=lon2-lon1
dlat=lat2-lat1
a=sin(dlat/2) **2+cos(lat1) *cos(lat2) *sin(dlon/2) **2
c=2*atan2(sqrt(a), sqrt(1-a))
distance=R*c
returndistance
defplot_sat(sat):
name=sat['name']
line1=sat['line1']
line2=sat['line2']
tle_rec=ephem.readtle(name, line1, line2)
print(name, line1,line2)
now=datetime.datetime.utcnow()
lats= []
lons= []
dates= []
foriinrange(0, 100):
date=now+datetime.timedelta(seconds=i*10)
tle_rec.compute(date)
lat, lon=tle_rec.sublong*180.0/math.pi, tle_rec.sublat*180.0/math.pi
lats.append(lat)
lons.append(lon)
dates.append(date)
foriinrange(50, len(dates)):
plt.cla()
m.drawcoastlines()
m.drawcountries()
m.drawstates()
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#acd3ac', lake_color='#acdbfd')
m.nightshade(dates[i])
x, y=m(lons,lats)
m.plot(x, y, marker='', color='red', linewidth=1)
print(x,y)
x, y=m(lons[i], lats[i])
print(lons[i], lats[i])
m.plot(x, y, marker='o', color='blue', zorder=5, linewidth=5)
print(x,y)
# plt.title( "test")
plt.pause(0.5)
defplot_sats(sats):
dates= []
now=datetime.datetime.utcnow()
seconds=500
foriinrange(0, seconds):
date=now+datetime.timedelta(seconds=i*10)
dates.append(date)
sat_latlngs= []
foriinrange(len(sats)):
name=sats[i]['name']
line1=sats[i]['line1']
line2=sats[i]['line2']
tle_rec=ephem.readtle(name, line1, line2)
print(name, line1,line2)
lats= []
lons= []
forjinrange(len(dates)):
tle_rec.compute(dates[j])
lat, lon=tle_rec.sublong*180.0/math.pi, tle_rec.sublat*180.0/math.pi
lats.append(lat)
lons.append(lon)
sat_latlngs.append([lats,lons])
foriinrange(0, len(dates)):
plt.cla()
m.drawcoastlines()
m.drawcountries()
m.drawstates()
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#acd3ac', lake_color='#acdbfd')
m.nightshade(dates[i])
x, y=m(my_loc[0],my_loc[1])
m.plot(x,y,marker='o',color='green', linewidth=5)
forjinrange(len(sats)):
latlngs=sat_latlngs[j]
lats=latlngs[0]
lons=latlngs[1]
x, y=m(lats,lons)
m.plot( x,y, marker='', color=sats[j]['line_color'], linewidth=1)
x, y=m(lats[i], lons[i])
m.plot(x, y,marker='^', color=sats[j]['marker_color'], zorder=5)
print(x,y)
plt.text(x,y,sats[j]['title'], color='white')
# plt.title("Distance between you and NepalSat-1 is %d" % (find_dist(my_loc[1],my_loc[0],lats[i],lons[i])))
print(lons[i],lats[i])
plt.pause(0.5)
c=open('data.json', 'r')
sats=json.load(c)
plot_sats(sats)
# for sat in sats:
# plot_sat(sat)
B
Bikram Pandit