ne zaman geçtiğini hesaplamak için pyphem kullanma Bir uydu belirli bir Boylamı geçtiğinde nasıl hesaplanacağını bulmakta zorlanıyorum. Bir zaman dilimi ve bir TLE sağlayabilmek ve belirtilen süre boyunca uydunun belirli bir boylamı geçtiği tüm zamanları geri döndürmek güzel olurdu. Pyephem böyle bir şeyi destekliyor mu?Bir uydunun bir Longitude
cevap
Kullanıcıların, bir uydu belirli bir boylamı geçtiğinde ne isteyebileceği gibi pek çok olası durum vardır; belirli bir enlemi ulaştığında; belli bir yüksekliğe ulaştığında veya en alçak irtifaya indiğinde; hızı en büyük veya en az olduğunda - PyEphem, hepsi için yerleşik işlevler sağlamaya çalışmaz. Bunun yerine, bir uydu niteliği ile aramak istediğiniz o özellik için önceden belirlenmiş bir değer arasında yapmak istediğiniz karşılaştırmanın sıfır geçişini bulmanızı sağlayan newton()
işlevini sağlar. İşte
http://docs.scipy.org/doc/scipy/reference/optimize.html
: scipy Python kütüphanesi Eğer özellikle kötü huylu fonksiyonu ile ilgileniyor durumunda, çok PyEphem en newton()
işlevi daha sofistike olan birkaç çok dikkatli arama işlevleri içeren
Not Bir uydu olduğunda - bu örnekte, ISS - genel tekniği göstermek için belirli bir boylamı geçtiğinde nasıl arama yapabilirsiniz. Bu mümkün olan en hızlı yaklaşım değil - özellikle de çok dikkatli olsaydık, dakika dakika aramayla arama yapılabiliyordu - ama bu, çok genel olduğu kadar başka değerlerin olması durumunda da çok genel ve çok güvenli olacak şekilde yazılıyor. ayrıca aramak istersiniz. Ne olup bittiğini açıklamak için dokümantasyon ve yorumlar eklemeye çalıştım ve neden basit farkı döndürmek yerine znorm
kullanıyorum. Bu betiğin sizin için işe yarayıp yaramayacağını ve yaklaşımını açık bir şekilde açıklarsa bana bildirin!
import ephem
line0 = 'ISS (ZARYA) '
line1 = '1 25544U 98067A 13110.27262069 .00008419 00000-0 14271-3 0 6447'
line2 = '2 25544 51.6474 35.7007 0010356 160.4171 304.1803 15.52381363825715'
sat = ephem.readtle(line0, line1, line2)
target_long = ephem.degrees('-83.8889')
def longitude_difference(t):
'''Return how far the satellite is from the target longitude.
Note carefully that this function does not simply return the
difference of the two longitudes, since that would produce a
terrible jagged discontinuity from 2pi to 0 when the satellite
crosses from -180 to 180 degrees longitude, which could happen to be
a point close to the target longitude. So after computing the
difference in the two angles we run degrees.znorm on it, so that the
result is smooth around the point of zero difference, and the
discontinuity sits as far away from the target position as possible.
'''
sat.compute(t)
return ephem.degrees(sat.sublong - target_long).znorm
t = ephem.date('2013/4/20')
# How did I know to make jumps by minute here? I experimented: a
# `print` statement in the loop showing the difference showed huge jumps
# when looping by a day or hour at a time, but minute-by-minute results
# were small enough steps to bring the satellite gradually closer to the
# target longitude at a rate slow enough that we could stop near it.
#
# The direction that the ISS travels makes the longitude difference
# increase with time; `print` statements at one-minute increments show a
# series like this:
#
# -25:16:40.9
# -19:47:17.3
# -14:03:34.0
# -8:09:21.0
# -2:09:27.0
# 3:50:44.9
# 9:45:50.0
# 15:30:54.7
#
# So the first `while` loop detects if we are in the rising, positive
# region of this negative-positive pattern and skips the positive
# region, since if the difference is positive then the ISS has already
# passed the target longitude and is on its way around the rest of
# the planet.
d = longitude_difference(t)
while d > 0:
t += ephem.minute
sat.compute(t)
d = longitude_difference(t)
# We now know that we are on the negative-valued portion of the cycle,
# and that the ISS is closing in on our longitude. So we keep going
# only as long as the difference is negative, since once it jumps to
# positive the ISS has passed the target longitude, as in the sample
# data series above when the difference goes from -2:09:27.0 to
# 3:50:44.9.
while d < 0:
t += ephem.minute
sat.compute(t)
d = longitude_difference(t)
# We are now sitting at a point in time when the ISS has just passed the
# target longitude. The znorm of the longitude difference ought to be a
# gently sloping zero-crossing curve in this region, so it should be
# safe to set Newton's method to work on it!
tn = ephem.newton(longitude_difference, t - ephem.minute, t)
# This should be the answer! So we print it, and also double-check
# ourselves by printing the longitude to see how closely it matches.
print 'When did ISS cross this longitude?', target_long
print 'At this specific date and time:', ephem.date(tn)
sat.compute(tn)
print 'To double-check, at that time, sublong =', sat.sublong
alıyorum çıktı bu komut ISS hedef boylam ulaştığında gerçekten (makul bir tolerans dahilinde) anı bulmuştur düşündürmektedir çalıştırırken: Anlıyorum eğer,
When did ISS cross this longitude? -83:53:20.0
At this specific date and time: 2013/4/20 00:18:21
To double-check, at that time, sublong = -83:53:20.1
- 1. Bir koordinatın başka bir
- 2. Bir CSV'den sütunları güncelleştirme
- 3. Bir json dizesini
- 4. JSON nesnesi php için bir dize dönüştürme
- 5. Ocaml özyinelemeli bir dosya yükleme
- 6. Yuvalanmış bir JSON kullanarak gson'u
- 7. Jackson hatası: uygun bir kurucu yok
- 8. Her bir xslt ifadesinde ebeveynin her bir alt düğümü nasıl seçilir?
- 9. Bir cakephp uygulamasına bir HTTP Gönderi olarak gönderilen json verilerini nasıl kullanırım?
- 10. EntityFramework Yordam veya işlev 'ancak bu hatanın nedenini bulamıyorum, sadece temel bir soruyu soran için özür
- 11. Bir NSDictionary öğesini iOS'ta bir json biçimine doğru şekilde nasıl dönüştürebilirim?
- 12. Swift'deki bir veri kırıntısını nasıl kaydederim?
- 13. Bir CLLocationCoordinate2D türünü sayı veya dizeye dönüştürme
- 14. Ben gps pozisyonları eşleştiren bir işlev gerekir
- 15. Birden çok seçenekli bir çok seçenekle genişletilebilirListView Seçilen öğeyi bir diziye kaydetme
- 16. Google Maps V3 - waypoints + rastgele bir metinle gönder
- 17. python + pymongo: for döngüsünden mongo'da varolan bir belgeye yeni bir alan ekleme
- 18. MKPointAnahtarlıklar hızlı bir şekilde dokunma olayını
- 19. CoreData'dan çift çok küçük bir sayı döndürüyor
- 20. OpenStreetMap kullanarak bir data.frame noktaları çizme
- 21. İsim Ben bir Django uygulaması var
- 22. iPhone ARKit bölgesindeki yerler tek bir yerde çakışıyor
- 23. Scala - bir haritada bir harita bir harita başka bir haritaya
- 24. Bir işlev, bir sınıftaki bir işleve bir işaretçi döndürür (C++)
- 25. Bir dizinin ofset bir bir Shared_ptr Atama
- 26. Bir kurucudaki bir yönteme bir parametrenin geçirilmesi
- 27. Bir vektörün bir allocator ile başka bir
- 28. Hata - Bir süre sonra Google Maps API JS 3.0
- 29. Bir UITableView bir UIViewController
- 30. Bir dize bir dizi
Maalesef "2013/04/20 00:18:21" uydu rakımı -83.8889 uzunluğundan itibaren 90 derece mi? Yani, yani "tam olarak" --83.8889 boylamının üstünde mi? – mikesneider
Uydu, bu boylamın üzerinde bir yerlerde. Tabii ki, bu, kuzey kutbundan güneye doğru herhangi bir yerde olabilir ve bu boylam çizgisi boyunca sadece bir nokta uydu olacağı anlamına gelir. Bu boylam çizgisi boyunca sitelerin geri kalanı için, uydu 90 ° 'den daha düşük ya da ufkun altında bile olacaktır. –