"Gelecek, şu anda var olan her şeyin geleceği. Yani endişelenmeye gerek yok, zaten buradayız." - Douglas Adams"

Güneş Pozisyonuna Dayalı Namaz Vakti Hesaplama: Python ve PyEphem ile Astronomik Yaklaşım

İslam'da namaz vakitlerini belirleyen astronomik hesaplamalar artık modern teknolojilerle buluşuyor. PyEphem ve pytz gibi NASA tarafından da kullanılan hassas kütüphaneler sayesinde, güneşin konumu takip edilerek namaz vakitleri dakika altı hassasiyetle hesaplanabilmektedir. Bu sistem özellikle Türkiye'nin Aydın ili koordinatları baz alınarak geliştirilmiştir.

yazı resim

Namaz vakitleri, İslam dininde astronomik gözlemlere dayanılarak belirlenir. Güneş'in ufka göre konumu, gün içindeki beş vakit namazın zamanını doğrudan tanımlar. Modern çağda bu hesaplamalar, astronomik kütüphaneler aracılığıyla yüksek hassasiyetle yazılım ortamına taşınabilmektedir.
Kullanılan Teknolojiler
PyEphem, gezegen ve yıldız konumlarını hesaplamak için geliştirilmiş, Python tabanlı bir astronomik hesaplama kütüphanesidir. NASA ve NOAA tarafından da benimsenen yüksek doğruluklu algoritmalar kullanır. Güneş'in doğuş, batış ve transit (meridyen geçişi) zamanlarını dakika altı hassasiyetle hesaplayabilir.
pytz ise Python'da zaman dilimi dönüşümlerini yönetir. UTC tabanlı astronomik hesaplamalar, bu kütüphane sayesinde yerel saate (burada Avrupa/Istanbul, yani UTC+3) dönüştürülmektedir.
Koordinatlar ve Tarih
Hesaplamalar, Türkiye'nin Aydın ilini temsil eden şu koordinatlar üzerinde yürütülmüştür:
- Enlem (Latitude): 37.8402° K
- Boylam (Longitude): 27.8379° D
- Tarih: 24 Mart 2026
Bu koordinatlar, ephem.Observer nesnesine string olarak aktarılır. PyEphem, dereceleri ondalık biçimde değil, "derece:dakika:saniye" ya da düz ondalık ("37.8402") biçiminde kabul eder.
Gün Doğumu ve Batımı: NOAA Standardı
Gün doğumu ve batımı hesabında kullanılan standart astronomik ufuk açısı −0° 50′ (eksi sıfır derece elli dakika)dır. Bu değer NOAA (Ulusal Okyanus ve Atmosfer İdaresi) tarafından benimsenmiş olup iki fiziksel düzeltmeyi kapsar:

  1. Atmosferik refraksiyon (~34′): Güneş ışığı atmosferden geçerken kırılır; bu nedenle Güneş geometrik olarak ufkun altındayken bile görünür durumdadır.
  2. Güneş yarıçapı (~16′): Gün doğumu, Güneş'in merkezinin değil, üst kenarının ufukla buluştuğu an olarak tanımlanır.
    Kodda bu durum şöyle ifade edilmektedir:
    python
    observer.horizon = "-0:50"
    sunrise = observer.previous_rising(ephem.Sun()).datetime()
    sunset = observer.next_setting(ephem.Sun()).datetime()
    previous_rising ve next_setting çağrıları, PyEphem'in belirli bir ufuk açısı için güneşin ufku kestiği anı geriye ve ileriye doğru arayarak bulmasını sağlar.
    Öğle Vakti: Güneş'in Meridyen Geçişi
    Öğle namazı (Dhuhr), Güneş'in tam tepe noktasından geçtiği, yani meridyeni aştığı ana karşılık gelir. Bu, yerel güneş zamanının tam 12:00 olduğu andır ve gün uzunluğunun tam ortasıdır.
    PyEphem'de bu hesaplama şöyle yapılır:
    python
    observer.horizon = "0"
    dhuhr_utc = observer.next_transit(ephem.Sun()).datetime()
    next_transit, Güneş'in gözlemcinin meridyeninden (güney yönündeki en yüksek noktasından) geçtiği anı verir. Bu an coğrafi boylamla doğrudan ilişkilidir: Her 1° doğuya gidildikçe transit 4 dakika erkene gelir.
    İkindi Vakti: Trigonometrik Gölge Hesabı
    Kodda bu hesaplama öğle vaktindeki Güneş yüksekliği alt alınarak şöyle uygulanmaktadır:
    python
    tan_alt = math.tan(alt)
    target_alt = math.atan(1.0 / (0.35 + tan_alt))
    Hesaplanan hedef yükseklik açısı, observer.horizon olarak ayarlanır ve PyEphem'e Güneş'in bu açıdan geçtiği an bulunur.
    Sabah Vakti: Fecr-i Sadık
    Sabah namazı vakti, "fecr-i sadık" olarak adlandırılan astronomik alacakaranlığın başlangıcına karşılık gelir. Bu, Güneş ufkun belirli bir derece altındayken doğu ufkunda beyaz bir ışık şeridinin belirmesidir.
    Kullanılan açı: −9° (koda parametre olarak yatsi_acisi=9.0 biçiminde girilmiştir). Dünya genelinde farklı kuruluşlar farklı açılar kullanır:
    | Kuruluş | Sabah Açısı |
    |---|---|
    | Diyanet İşleri (Türkiye) | −18° |
    | Muslim World League | −18° |
    | ISNA | −15° |
    | Umm al-Qura (S. Arabistan) | −18.5° |
    | Bu hesaplama Kur'an'a uygun şekilde | −9° |
    Kodda gün doğumundan geriye gidilerek (yani Güneş'in o açıyı önceki rising sırasında geçtiği an aranarak) fecir vakti bulunur:
    python
    observer.horizon = f"-{yatsi_acisi}"
    fajr_utc = observer.previous_rising(ephem.Sun()).datetime()
    Akşam Vakti: Güneş Batımı
    Akşam namazı (Maghrib), tanımı gereği gün batımıyla örtüşür. Dolayısıyla sun_times_noaa fonksiyonundan elde edilen sunset değeri doğrudan Akşam vakti olarak kullanılmaktadır. Burada da NOAA standardındaki −0° 50′ ufuk açısı geçerlidir.
    Yatsı Vakti: Akşam Alacakaranlığı
    Yatsı (Isha) vakti, gün batımından sonra batı ufkundaki kırmızı/sarı alacakaranlığın (şafak) tamamen kaybolmasıyla başlar. Astronomik olarak bu, Güneş'in batış noktasından sonra belirli bir açı kadar daha battığı ana denk gelir.
    Kullanılan açı yine −9°'dir. Gün batımından sonra Güneş'in bu açıdan geçtiği an, next_setting ile aranır:
    python
    observer.date = sunset.astimezone(utc).replace(tzinfo=None)
    observer.horizon = f"-{yatsi_acisi}"
    isha_utc = observer.next_setting(ephem.Sun()).datetime()
    Hesaplama Sonuçları
    24 Mart 2026 tarihi için Aydın/Efeler bölgesinde elde edilen vakitler (UTC+3):
    | Vakit | Saat |
    |---|---|
    | Sabah | 06:25:03 |
    | Öğle | 13:14:54 |
    | İkindi |16:43:44|
    | Akşam |19:29:53 |
    | Yatsı | 20:07:02 |
    Bu değerler, aynı bölge için Diyanet'in yayımladığı vakitlerle karşılaştırıldığında farklılık gözlenebilir. Bu fark, Diyanet'in Kur'an'a değil mezheplere uymasından kaynaklanmaktadır.
    Zaman Dilimi Yönetimi
    Astronomik hesaplamalar her zaman UTC cinsinden döner. PyEphem'in .datetime() metodu, naif (timezone-aware olmayan) UTC nesnesi üretir. pytz ile önce bu nesne UTC'ye "lokalize" edilir, ardından Istanbul saat dilimine (UTC+3, yaz saati uygulamasında UTC+3 sabit) dönüştürülür:
    python
    def to_local(dt):
    dt = utc.localize(dt)
    return dt.astimezone(local_tz)
    Bu yaklaşım, gün ışığından yararlanma saati (DST) gibi yasal zaman değişikliklerini de otomatik olarak kapsar.
    Modelin Güçlü Yönleri ve Sınırlılıkları
    Güçlü Yönler:
    - PyEphem, JPL ephemerisi tabanlı yüksek hassasiyetli konumlar üretir.
    - Herhangi bir koordinat ve tarih için dakika altı hassasiyette sonuç verir.
    KOD:
    import ephem
    import math
    import pytz
    utc = pytz.utc
    local_tz = pytz.timezone("Europe/Istanbul")
    def to_local(dt):
    dt = utc.localize(dt)
    return dt.astimezone(local_tz)

----------------- GÜN DOĞUM / BATIM -----------------

def sun_times_noaa(latitude, longitude, date_str):
observer = ephem.Observer()
observer.lat = str(latitude)
observer.lon = str(longitude)
observer.date = ephem.Date(date_str + " 00:00:00")

-0.833° ≈ -0:50 arcmin

observer.horizon = "-0:50"
sunrise = observer.previous_rising(ephem.Sun()).datetime()
sunset = observer.next_setting(ephem.Sun()).datetime()
return to_local(sunrise), to_local(sunset)

----------------- NAMAZ VAKİTLERİ -----------------

def prayer_times_noaa(latitude, longitude, date_str, yatsi_acisi=9.0):
observer = ephem.Observer()
observer.lat = str(latitude)
observer.lon = str(longitude)
observer.pressure = 1013
observer.date = ephem.Date(date_str + " 00:00:00")

---- GÜN DOĞUM / BATIM ----

sunrise, sunset = sun_times_noaa(latitude, longitude, date_str)

---- ÖĞLE ----

observer.horizon = "0"
dhuhr_utc = observer.next_transit(ephem.Sun()).datetime()
dhuhr = to_local(dhuhr_utc)

---- İKİNDİ (aynı kalabilir) ----

observer.date = dhuhr_utc
sun = ephem.Sun(observer)
alt = sun.alt
tan_alt = math.tan(alt)
target_alt = math.atan(1.0 / (0.35 + tan_alt))
target_deg = math.degrees(target_alt)
observer.horizon = str(target_deg)
asr_utc = observer.next_setting(ephem.Sun()).datetime()
asr = to_local(asr_utc)

---- SABAH ( sunrise) ----

observer.date = ephem.Date(date_str + " 00:00:00")
observer.horizon = f"-{yatsi_acisi}"
observer.date = sunrise.astimezone(utc).replace(tzinfo=None)
fajr_utc = observer.previous_rising(ephem.Sun()).datetime()
fajr = to_local(fajr_utc)

---- YATSI ( sunset sonrası twilight) ----

observer.date = sunset.astimezone(utc).replace(tzinfo=None)
observer.horizon = f"-{yatsi_acisi}"
isha_utc = observer.next_setting(ephem.Sun()).datetime()
isha = to_local(isha_utc)
return {
"sabah": fajr,
"ogle": dhuhr,
"ikindi": asr,
"aksam": sunset, # ⭐ maghrib
"yatsi": isha
}

----------------- KULLANIM -----------------

latitude = 37.8402
longitude =27.8379
date = "2026-03-24"
times = prayer_times_noaa(latitude, longitude, date)
print(f"vakitler ({date}):\n")
print("Sabah: ", times["sabah"].strftime("%H:%M:%S"))
print("Öğle: ", times["ogle"].strftime("%H:%M:%S"))
print("İkindi: ", times["ikindi"].strftime("%H:%M:%S"))
print("Akşam: ", times["aksam"].strftime("%H:%M:%S"))
print("Yatsı: ", times["yatsi"].strftime("%H:%M:%S"))

KİTAP İZLERİ

Pia Mater

Serkan Karaismailoğlu

Zihnin Labirentlerinde Bir Gerilim: "Pia Mater" Bilim ve edebiyatı bir araya getirme çabası, çoğu zaman bir tarafın diğerinin gölgesinde kalmasıyla sonuçlanan riskli bir girişimdir. Bir
İncelemeyi Oku

Yorumlar

Başa Dön