0

I've god some satellite data which essentially is the geographical position of a satellite that circles the earth at a given time. This is data saved with a latitude, longitude and unixtime in a SQLite DB. This is retrieved as following:

latitudes = [] #Long list of latitudes
longitudes = [] #Long list of longitudes
unixtimes = [] #Long list of corresponding unixtimes

So, I'm interested to distinguish the latitude/longitude recordings for each time the satellite is over a fairly large geographical area (for each passing). However I'm unsure on how I would do this.

Now I've manually, by visual inspection of the plots of the position, found the first 'occurrence' of the satellite in that area, then I have found the next occurrence in the same way. The passing time is then the difference between each of those events. However, this passing time varies over time, so this method is not that accurate over time. An other problem is that it is dependent on the geographical positions, If I want the time of the first passing, and the passing time for any other geographical position I have to manually inspect once again. I've included my code. Note that the seq function is simply a function I've retrieved from SO that gives me the ability to iterate over non-integer increments.

def seq(start, end, step):
    assert(step != 0)
    sample_count = abs(end - start) / step
    return itertools.islice(itertools.count(start, step), sample_count)

gridsize = 5 #Unit: degrees
upperleftlong = #Upper corner of geographical area
upperleftlat = #Upper corner of geographical area
lowerrightlong = #Lower corner of geographical area
lowerrightlat = #Lower corner of geographical area
passrate = 5500 #Time between passings in seconds
start = 1498902400 #Time of first passing
end = 1498905700 #Approximately passing length
numberofpassings = 600 #Number of passings that should be checked for
for p in range(0,numberofpassings+1):
    start = 1398903400+passrate*p
    end =  1398905400+passrate*p
    for i in seq(lowerrightlat, upperleftlat+gridsize, gridsize):
        for j in seq(upperleftlong, lowerrightlong+gridsize, gridsize):
            positions = getPositionsFromDB(j,i,start,end,gridsize,databasepath, con)

So, does anyone have a clever way to signify passing rate, passing time and discover which geographical positions that belongs to each passing?

I'm working with Python and SQLite.

4

1 回答 1

2

从你的卫星周期(5500秒)来看,我相当肯定你的卫星就是空间站。由于寿命短,很少有其他卫星通常在该低高度(370 公里)处于活动状态。

Heavens-above 站点有许多工具可以预测空间站(和其他)的出现。Spot-the-station是专用的并提供预测。在线卫星计算是大量工具的集合,也可以提供帮助。

如果对此类程序的工作方式感兴趣,可以使用开源项目Predict和源代码。

当然,维基百科必须存在,有一个应用程序列表,以及对许多带有预测工具的库的引用。

注意:整数增量很好,但如果您使用 numpy.arange,numpy 可以为您提供浮点增量。这更加灵活,您可以使用物理的、非缩放的值,而不会遇到整数溢出的风险。

于 2015-06-18T14:58:46.413 回答