mirror of
https://github.com/csete/gpredict
synced 2026-08-13 17:39:46 -04:00
git-svn-id: https://gpredict.svn.sourceforge.net/svnroot/gpredict/trunk@439 ab6734ba-2843-0410-b83b-99c217ef6c0f
186 lines
4.6 KiB
Python
Executable file
186 lines
4.6 KiB
Python
Executable file
#!/usr/bin/python
|
|
#
|
|
# This script was used to create the initial satellite data repository by
|
|
# converting Celestrak TLE files into a satellited.dat and .cat files.
|
|
#
|
|
# 1. Copy this script into a temp folder
|
|
# 2. Create subdirectories ./in/ ./tmp/ and ./out/
|
|
# 3. Run the script
|
|
# 4. You should have a .cat file for each category as well as a satellites.dat
|
|
# file in the ./out/ folder
|
|
#
|
|
# These scripts are only used during development and are not needed by
|
|
# end users.
|
|
#
|
|
import os
|
|
import string
|
|
import urllib
|
|
|
|
# Satellite groups
|
|
groups = {
|
|
"amateur" : "Amateur Radio",
|
|
"cubesat" : "Cubesat",
|
|
"dmc" : "Disaster Monitoring",
|
|
"education" : "Education",
|
|
"engineering" : "Engineering",
|
|
"galileo" : "Galileo Nav.",
|
|
"geo" : "Geostationary",
|
|
"geodetic" : "Geodetic",
|
|
"glo-ops" : "Glonass Operational",
|
|
"globalstar" : "Globalstar",
|
|
"goes" : "GOES",
|
|
"gorizont" : "Gorizont",
|
|
"gps-ops" : "GPS Operational",
|
|
"intelsat" : "Intelsat",
|
|
"iridium" : "Iridium",
|
|
"military" : "Military",
|
|
"molniya" : "Molniya",
|
|
"musson" : "Russon LEO Nav",
|
|
"nnss" : "Navy Nav. Sats",
|
|
"noaa" : "NOAA",
|
|
"orbcomm" : "Orbcomm",
|
|
"other-comm" : "Other Comm",
|
|
"other" : "Other",
|
|
"radar" : "Radar Calibration",
|
|
"raduga" : "Raduga",
|
|
"resource" : "Earth Resources",
|
|
"sarsat" : "Search & Rescue",
|
|
"sbas" : "SBAS",
|
|
"science" : "Space & Earth Science",
|
|
"tdrss" : "TDRSS",
|
|
"tle-new" : "Latest Launches",
|
|
"visual" : "Brightest",
|
|
"weather" : "Weather Satellites",
|
|
"x-comm" : "Experimental Comm."
|
|
}
|
|
|
|
# Satellite nicknames
|
|
nicknames = {
|
|
"4321" : "AO-5",
|
|
"6236" : "AO-6",
|
|
"7530" : "AO-7",
|
|
"10703" : "AO-8",
|
|
"14129" : "AO-10",
|
|
"14781" : "UO-11",
|
|
"16909" : "FO-12",
|
|
"20437" : "UO-14",
|
|
"20438" : "UO-15",
|
|
"20439" : "AO-16",
|
|
"20440" : "DO-17",
|
|
"20441" : "WO-18",
|
|
"20442" : "LO-19",
|
|
"20480" : "FO-20",
|
|
"21087" : "RS-14",
|
|
"21089" : "RS-12/13",
|
|
"21575" : "UO-22",
|
|
"22077" : "KO-23",
|
|
"22654" : "AO-24",
|
|
"22825" : "AO-27",
|
|
"22826" : "IO-26",
|
|
"22828" : "KO-25",
|
|
"22829" : "PO-28",
|
|
"23439" : "RS-15",
|
|
"24278" : "FO-29",
|
|
"24305" : "MO-30",
|
|
"25396" : "TO-31",
|
|
"25397" : "GO-32",
|
|
"25509" : "SO-33",
|
|
"25520" : "PO-34",
|
|
"25544" : "ISS",
|
|
"25636" : "SO-35",
|
|
"25693" : "UO-36",
|
|
"26063" : "OO-38",
|
|
"26545" : "SO-41",
|
|
"26548" : "MO-46",
|
|
"26549" : "SO-42",
|
|
"26609" : "AO-40",
|
|
"26931" : "NO-44",
|
|
"26932" : "NO-45",
|
|
"27607" : "SO-50",
|
|
"27844" : "CO-55",
|
|
"27848" : "CO-57",
|
|
"27939" : "RS-22",
|
|
"28375" : "AO-51",
|
|
"28650" : "VO-52",
|
|
"28894" : "XO-53",
|
|
"28895" : "CO-58",
|
|
"28941" : "CO-56"
|
|
}
|
|
|
|
urlprefix = "http://celestrak.com/NORAD/elements/"
|
|
|
|
|
|
for group, name in groups.iteritems():
|
|
webfile = urlprefix + group + ".txt"
|
|
localfile = "./in/" + group + ".txt"
|
|
print "Fetching " + webfile + " => " + localfile
|
|
urllib.urlretrieve (webfile, localfile)
|
|
|
|
### CHK ###
|
|
|
|
# For each input file
|
|
for group, name in groups.iteritems():
|
|
|
|
print name+':'
|
|
|
|
# open TLE file for reading
|
|
tlefile = open('./in/'+group+'.txt', 'r')
|
|
|
|
# create category file
|
|
category = "./out/"+group+".cat"
|
|
catfile = open(category, 'w')
|
|
|
|
# first line is the group name
|
|
catfile.write(name+'\n')
|
|
|
|
while 1:
|
|
# read three lines at a time; strip trailing whitespaces
|
|
line1 = tlefile.readline().strip()
|
|
if not line1: break
|
|
line2 = tlefile.readline().strip()
|
|
line3 = tlefile.readline().strip()
|
|
|
|
# catalog number; strip leading zeroes
|
|
catnum = line2[2:7].lstrip('0')
|
|
print " ... "+catnum
|
|
|
|
# add satellite to category
|
|
catfile.write(catnum+'\n')
|
|
|
|
# satellite file
|
|
satfile = open('./tmp/'+catnum+'.sat','w')
|
|
|
|
satfile.write('VERSION=1.1\n')
|
|
satfile.write('NAME='+line1+'\n')
|
|
if catnum in nicknames:
|
|
satfile.write('NICKNAME='+nicknames[catnum]+'\n')
|
|
else:
|
|
satfile.write('NICKNAME='+line1+'\n')
|
|
satfile.write('TLE1='+line2+'\n')
|
|
satfile.write('TLE2='+line3+'\n')
|
|
|
|
satfile.close()
|
|
|
|
# close TLE and CAT files
|
|
tlefile.close()
|
|
catfile.close()
|
|
|
|
# now package the .sat files into one .dat file
|
|
datfile = open('./out/satellites.dat', 'w')
|
|
for file in os.listdir("./tmp/"):
|
|
|
|
# open .sat file
|
|
satfile = open("./tmp/"+file, "r")
|
|
|
|
# Create fake config group of catnum
|
|
catnum = file.partition(".")[0]
|
|
datfile.write("\n["+catnum+"]\n")
|
|
|
|
# read lines from satfile and write them to datfile
|
|
text = satfile.readlines()
|
|
datfile.writelines(text)
|
|
|
|
satfile.close();
|
|
|
|
datfile.close()
|
|
|