Posición de la ISS

En este notebook determinamos la posición de la ISS a partir de los elementos orbitales para cualquier instante

Descarga de los Elementos orbitales

Para la descarga debemos tener una cuenta en https://www.space-track.org Los elementos orbitales osculadores se distribuyen en formato TLE http://en.wikipedia.org/wiki/Two-line_element_set y contienen los datos necesarios para el cálculo de la posición de un satélite en un momento determinado. Estos elementos son válidos para una fecha próxima a la de osculación.


In [5]:
import urllib, urllib2, cookielib
import datetime

noradId = '25544'       # NORADID de la ISS
fecha = '2016/06/15'    # Fecha de osculación

baseURL = 'https://www.space-track.org'
username = 'jgcasta'
password = 'xxxxxxxxxx'

d = datetime.datetime.strptime(fecha, "%Y/%m/%d")
d1 = d + datetime.timedelta(days=1)
dstr = d.strftime("%Y-%m-%d")
d1str = d1.strftime("%Y-%m-%d")

print "Connecting..."
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
parameters = urllib.urlencode({'identity': username ,'password': password})
opener.open(baseURL + '/ajaxauth/login', parameters)
queryString = baseURL +"/basicspacedata/query/class/tle/format/tle/NORAD_CAT_ID/"
queryString = queryString + noradId+"/EPOCH/"+dstr+"%2000:00:00--"+d1str+"%2000:00:00"
resp = opener.open(queryString)

TLEs = resp.readlines()
print "---------------------------------TLE---------------------------------\n"
for tle in TLEs:
    print tle

opener.close()


Connecting...
---------------------------------TLE---------------------------------

1 25544U 98067A   16167.16369947  .00003073  00000-0  52817-4 0  9996

2 25544  51.6428  68.1260 0000336   4.0963  87.8469 15.54558487  4676

1 25544U 98067A   16167.17503470  .00003196  00000-0  54644-4 0  9994

2 25544  51.6428  68.0694 0000324   5.0932 150.3291 15.54558788  4673

1 25544U 98067A   16167.17503470  .00003196  00000-0  54644-4 0  9994

2 25544  51.6428  68.0694 0000324   5.0932 150.3291 15.54558788  4673

1 25544U 98067A   16167.17503470  .00003196  00000-0  54644-4 0  9994

2 25544  51.6428  68.0694 0000324   5.0932 150.3291 15.54558788  4673

1 25544U 98067A   16167.86260205  .00006689  00000-0  10646-3 0  9999

2 25544  51.6430  64.6382 0000340   6.8018  39.1165 15.54574582  4780

1 25544U 98067A   16167.93013459  .00006642  00000-0  10575-3 0  9994

2 25544  51.6430  64.3012 0000343   7.3896  56.7230 15.54575408  4797

Cálculo de las efemérides

Las efemérides ofrecen datos válidos para un observador sobre la superficie terrestre. Estas se denominan topocéntricas, y para su cálculo necesitamos definir nuestra posición y el instante.

Lo que nos interesa es conocer la posición que ocupará el satélite a lo largo de su órbita, para planificar la toma de imágenes. Para ello calculamos el punto subterrestre. Este viene definido por las coordenadas sobre la superficie, desde las que satélite aparece en el nadir. Las calculamos para un día completo y las proyectamos sobre el mapa.

Para planificar cuándo es necesario realizar las fotografías, se compara la posición subterrestre del satélite con los diferentes puntos que se quieren fotografiar. Los momentos de paso se comunican al centro de la misión para que puedan ser planinficados dentro de las actividades diarias


In [6]:
import math
import datetime
import time
import ephem


obs = ephem.Observer()
obs.lon = '-3.5'
obs.lat = '40.5'
obs.elevation = 650

sat = ephem.readtle('ISS',
    '1 25544U 98067A   16167.93013459  .00006642  00000-0  10575-3 0  9994',
    '2 25544  51.6430  64.3012 0000343   7.3896  56.7230 15.54575408  4797'
)

obs.date = ephem.Date('2016/06/25 16:23:45.12')
sat.compute(obs)

print 'Orto: ',sat.rise_time
print 'Tránsito ', sat.transit_time
print 'Puesta ', sat.set_time

lon = ephem.degrees(sat.sublong)
lat = sat.sublat

print 'Longitud ',lon
print 'Latitud ', lat


Orto:  2016/6/25 17:01:33
Tránsito  2016/6/25 17:06:42
Puesta  2016/6/25 17:11:50
Longitud  -167:52:41.9
Latitud  -26:34:03.5