Koordinatlarla_mesafe_hesabi

1 2
24/08/2023, 18:13

notrino

Merhabalar,
Ekteki örnek dosyada form açılınca Haversine Formülüne göre her bir satırda verilen enlem-boylam bilgilerinin aşağıdaki referans enlem-boylama göre mesafesini hesaplamak istiyorum.

Referans Enlem:38.418847
Referans Boylam: 27.125511

Haversine Formülünü Python'dan biliyorum ancak Access'te kodlama içinde kullanamadım.
24/08/2023, 23:00

berduş

Python formülünü paylaşır mısınız?
24/08/2023, 23:09

notrino

(24/08/2023, 23:00)berduş yazdı: Python formülünü paylaşır mısınız?

Kod:
from tkinter import *
from math import sin, cos, sqrt, atan2, radians

# Mesafe hesaplaması için fonksiyon
def calculate_distance():
    # Enlem ve boylam değerlerini al
    lat1 = float(entry1.get())
    lon1 = float(entry2.get())

    # İkinci enlem ve boylam değerlerini sabit olarak belirt
    lat2 = Referans Enlem Değeri buraya girilecek
    lon2 = Referans boylam değeri buraya girilecek

    # Radyan cinsinden dönüşüm yap
    lat1 = radians(lat1)
    lon1 = radians(lon1)
    lat2 = radians(lat2)
    lon2 = radians(lon2)

    # Dünya yarıçapı (km)
    R = 6371.0

    # Haversine formülüne göre mesafeyi hesapla
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    distance = R * c

    # Mesafeyi metin kutusuna yazdır
    result_label.config(text="Mesafe: {:.2f} km".format(distance))


# Arayüzü oluştur
window = Tk()
window.geometry("350x200")
window.title("Mesafe Hesaplama Arayüzü")

# Etiketler
label1 = Label(window, text="Enlem:")
label1.pack()

# Enlem giriş kutusu
entry1 = Entry(window)
entry1.pack()

label2 = Label(window, text="Boylam:")
label2.pack()

# Boylam giriş kutusu
entry2 = Entry(window)
entry2.pack()

# Hesapla butonu
calculate_button = Button(window, text="Hesapla", command=calculate_distance)
calculate_button.pack()

# Sonuç etiketi
result_label = Label(window, text="")
result_label.pack()

# Arayüzü başlat
window.mainloop()
25/08/2023, 00:27

berduş

aşağıdaki fonksiyonu dener misiniz?
Rad/Derece =2*π/360
Rad=Derece*(π/180)

π/180=1/ 57.2957795130823
Function HaversineHsp(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double) As Double
    Dim R As Double
    R = 6371 ' Dünya yarıçapı km cinsinden
   
    Dim dLat As Double, dLon As Double
    dLat = (lat2 - lat1) / 57.2957795130823
    dLon = (lon2 - lon1) / 57.2957795130823
   
    Dim a As Double, c As Double
    a = Sin(dLat / 2) ^ 2 + Cos((lat1) / 57.2957795130823) * Cos((lat2) / 57.2957795130823) * Sin(dLon / 2) ^ 2
    c = 2 * Atn(Sqr(a) / Sqr(1 - a))
   
    HaversineHsp = R * c
End Function
25/08/2023, 20:53

notrino

Maalesef başarılı olamıyorum.
26/08/2023, 00:05

berduş

tam olarak başarılı olamadığınız ne?
sonuçları kontrol ettiniz mi, fonksiyon düzgün çalışıyor mu?
şimdilik asıl önemli olan bu, eğer fonksiyon doğru çalışıyorsa gerisi bir şekilde hallolur.
1 2