<commit_before>{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Posición de la ISS\n",
    "\n",
    "En este notebook determinamos la posición de la ISS a partir de los elementos orbitales para cualquier instante y lo representamos sobre un mapa\n",
    "\n",
    "## Descarga de los Elementos orbitales \n",
    "\n",
    "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."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import urllib, urllib2, cookielib\n",
    "import datetime\n",
    "\n",
    "noradId = '25544'       # NORADID de la ISS\n",
    "fecha = '2016/06/15'    # Fecha de osculación\n",
    "\n",
    "baseURL = 'https://www.space-track.org'\n",
    "username = 'jgcasta'\n",
    "password = '<PASSWORD>'\n",
    "\n",
    "d = datetime.datetime.strptime(fecha, \"%Y/%m/%d\")\n",
    "d1 = d + datetime.timedelta(days=1)\n",
    "dstr = d.strftime(\"%Y-%m-%d\")\n",
    "d1str = d1.strftime(\"%Y-%m-%d\")\n",
    "\n",
    "print \"Connecting...\"\n",
    "cj = cookielib.CookieJar()\n",
    "opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))\n",
    "parameters = urllib.urlencode({'identity': username ,'password': password})\n",
    "opener.open(baseURL + '/ajaxauth/login', parameters)\n",
    "queryString = baseURL +\"/basicspacedata/query/class/tle/format/tle/NORAD_CAT_ID/\"\n",
    "queryString = queryString + noradId+\"/EPOCH/\"+dstr+\"%2000:00:00--\"+d1str+\"%2000:00:00\"\n",
    "resp = opener.open(queryString)\n",
    "\n",
    "TLEs = resp.read()\n",
    "print \"---------------------------------TLE---------------------------------\\n\"\n",
    "while tle in TLEs:\n",
    "    print tle\n",
    "\n",
    "opener.close()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cálculo de las efemérides\n",
    "\n",
    "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. ¿Gráfico?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<ephem.EarthSatellite 'ISS' at 0x7efbf00d5468>\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "import time\n",
    "import ephem\n",
    "\n",
    "obs = ephem.Observer()\n",
    "obs.lon = '-3.5'\n",
    "obs.lat = '40.5'\n",
    "obs.elevation = 650\n",
    "\n",
    "sat = ephem.readtle('ISS',\n",
    "    '1 25544U 98067A   16167.93013459  .00006642  00000-0  10575-3 0  9994',\n",
    "    '2 25544  51.6430  64.3012 0000343   7.3896  56.7230 15.54575408  4797'\n",
    ")\n",
    "\n",
    "obs.date = datetime.utcnow()\n",
    "sat.compute(home)\n",
    "\n",
    "print sat"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Además de las topocéntricas 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. \n",
    "\n",
    "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"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {<commit_msg>Mostrar la posición<commit_after>{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Posición de la ISS\n",
    "\n",
    "En este notebook determinamos la posición de la ISS a partir de los elementos orbitales para cualquier instante\n",
    "\n",
    "## Descarga de los Elementos orbitales \n",
    "\n",
    "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."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import urllib, urllib2, cookielib\n",
    "\n",
    "noradId = '25544'       # NORADID de la ISS\n",
    "fecha = '2016/06/15'    # Fecha de osculación\n",
    "\n",
    "baseURL = 'https://www.space-track.org'\n",
    "username = 'jgcasta'\n",
    "password = '<PASSWORD>'\n",
    "\n",
    "d = datetime.datetime.strptime(fecha, \"%Y/%m/%d\")\n",
    "d1 = d + datetime.timedelta(days=1)\n",
    "dstr = d.strftime(\"%Y-%m-%d\")\n",
    "d1str = d1.strftime(\"%Y-%m-%d\")\n",
    "\n",
    "print \"Connecting...\"\n",
    "cj = cookielib.CookieJar()\n",
    "opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))\n",
    "parameters = urllib.urlencode({'identity': username ,'password': password})\n",
    "opener.open(baseURL + '/ajaxauth/login', parameters)\n",
    "queryString = baseURL +\"/basicspacedata/query/class/tle/format/tle/NORAD_CAT_ID/\"\n",
    "queryString = queryString + noradId+\"/EPOCH/\"+dstr+\"%2000:00:00--\"+d1str+\"%2000:00:00\"\n",
    "resp = opener.open(queryString)\n",
    "\n",
    "TLEs = resp.readlines()\n",
    "print \"---------------------------------TLE---------------------------------\\n\"\n",
    "for tle in TLEs:\n",
    "    print tle\n",
    "\n",
    "opener.close()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cálculo de las efemérides\n",
    "\n",
    "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.\n",
    "\n",
    "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.\n",
    "\n",
    "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import math\n",
    "import datetime\n",
    "import time\n",
    "import ephem\n",
    "\n",
    "\n",
    "obs = ephem.Observer()\n",
    "obs.lon = '-3.5'\n",
    "obs.lat = '40.5'\n",
    "obs.elevation = 650\n",
    "\n",
    "sat = ephem.readtle('ISS',\n",
    "    '1 25544U 98067A   16167.93013459  .00006642  00000-0  10575-3 0  9994',\n",
    "    '2 25544  51.6430  64.3012 0000343   7.3896  56.7230 15.54575408  4797'\n",
    ")\n",
    "\n",
    "obs.date = ephem.Date('2016/06/25 16:23:45.12')\n",
    "sat.compute(obs)\n",
    "\n",
    "print 'Orto: ',sat.rise_time\n",
    "print 'Tránsito ', sat.transit_time\n",
    "print 'Puesta ', sat.set_time\n",
    "\n",
    "lon = ephem.degrees(sat.sublong)\n",
    "lat = sat.sublat\n",
    "\n",
    "print 'Longitud ',lon\n",
    "print 'Latitud ', lat\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
{'fraction_non_alphanumeric': 0.1836734693877551, 'fraction_numerical': 0.03735529299439074, 'mean_word_length': 2.6706088480070083, 'pattern_counts': {'":': 54, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 4, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5874122', 'n_tokens_mistral': 3362, 'n_tokens_neox': 3155, 'n_words': 785}