İçeriğe geç

Teknik · 8 dk okuma

İki nokta arası mesafe: Haversine ile Vincenty arasındaki fark

Küresel ve elipsoidal mesafe hesapları. Hangisi ne kadar hata yapar, hangi durumda hangisi kullanılır ve Vincenty nerede çöker.

Tebeşirle yazılmış denklemlerle dolu bir kara tahtaRoman Mager / Unsplash

"İstanbul'dan Kâbe'ye 2.402 km" dediğimizde bu sayı nasıl bulundu? İki temel yöntem var, aralarında yüzde yarımlık bir fark bulunuyor ve birinin bilinen bir çökme noktası var.

Haversine: küresel çözüm

En yaygın formül Haversine. Dünya'yı tam bir küre kabul eder ve iki nokta arasındaki büyük daire yayının uzunluğunu hesaplar.

Adı, formülde kullanılan "yarım versinüs" fonksiyonundan gelir. Bu fonksiyonun kullanılmasının sebebi tarihsel değil sayısal: birbirine çok yakın iki nokta için doğrudan kosinüs formülü kullanmak, kayan noktalı aritmetikte hassasiyet kaybına yol açar. Haversine bu durumda kararlı kalır.

Haversine hızlıdır, kısadır ve her zaman sonuç verir. Tek eksiği, Dünya'nın tam bir küre olmaması.

Dünya bir küre değil

Dünya kutuplardan basıktır. Ekvatoral yarıçap 6.378,137 kilometre, kutupsal yarıçap 6.356,752 kilometre — aradaki fark 21 kilometreyi aşıyor. Bu basıklığa elipsoid denir ve küresel varsayım bu yüzden mesafede yaklaşık yüzde yarım hata üretir.

Etkiyi doğrudan gözlemleyebilirsiniz. Ekvatorda 1 derecelik meridyen yayı 110.574 metre, kutupta 111.694 metredir. Küresel bir modelde bu ikisi eşit çıkardı. Farklı olmaları, elipsoid modelinin gözlemlenebilir sonucudur ve bu sağlama doğruluk sayfamızda ölçülmüş hâlde duruyor.

Vincenty: elipsoidal çözüm

Vincenty ters problemi, WGS-84 elipsoidi üzerinde iki nokta arasındaki jeodezik mesafeyi ve iki uçtaki azimutları hesaplar. Metre altı hassasiyet verir.

Yöntem özyinelemelidir: bir başlangıç tahmininden başlayıp yardımcı bir boylam farkı yakınsayana kadar döner, sonra kapalı formüllerle mesafeyi ve azimutları üretir. Genellikle beş-on iterasyonda yakınsar.

Vincenty'yi kullanmanın maliyeti pratikte sıfır: aynı hesap, birkaç satır daha uzun kod. Bu yüzden yaklaşımla yetinmiyoruz.

Fark ne kadar?

Testlerimizde farklı coğrafyalarda iki yöntem arasındaki en büyük bağıl fark yüzde 0,2 civarında çıkıyor. İstanbul–Kâbe mesafesinde bu birkaç kilometreye karşılık gelir.

Kıble açısı için fark daha da küçük. Testlerde elipsoidal ve küresel çözümler arasındaki en büyük ayrışma 0,13 derece — telefon pusulasının hassasiyetinin çok altında.

Yani pratikte hangisini kullanırsanız kullanın, kıbleye dönerken fark etmez. Ama iki yöntemi birlikte hesaplamanın başka bir faydası var: çapraz kontrol. İki bağımsız formül aynı cevabı veriyorsa, ikisinde de aynı hatayı yapmış olma olasılığımız düşer. Bu, formal bir ispat değil ama pratikte en güçlü sağlamalardan biri.

Vincenty nerede çöker

Vincenty'nin bilinen bir zayıflığı var: antipodal noktalarda — yani biri diğerinin kürenin tam karşı tarafındaki eşi olduğunda — yakınsamaz. İterasyon salınır veya yavaşça ilerler ve sonuca varmaz.

Bunu sessizce yanlış bir sayı döndürerek değil, açıkça bildirerek ele alıyoruz. Motor yakınsama olmadığını görürse küresel çözüme düşer ve sonucu "hassas değil" olarak işaretler. Arayüzde bu "küresel yaklaşım" etiketi olarak görünür.

Geliştirme sırasında bu bölge gerçek bir hata yakalattı ve anlatmaya değer. Vincenty döngüsünde sin(σ)sıfıra yaklaştığında bir erken çıkış vardı — "iki nokta aynı, mesafe sıfır". Ama sin(σ) iki durumda sıfıra gider: σ=0 (aynı nokta) ve σ=π (tam karşıt nokta), çünkü sin(π) de sıfırdır.

Sonuç: dünyanın tam öbür ucundaki bir hedef için fonksiyon 0 metre döndürüyordu. Ayrım cos(σ) işaretiyle yapılabiliyor: pozitifse aynı nokta, negatifse antipodal. Düzeltildi ve regresyon testi olarak kaldı.

Üçüncü bir mesafe: loksodrom

Yukarıdaki ikisi de en kısa yolu ölçer. Bir de loksodrom var: sabit pusula açısıyla gidilen yol. Meridyenleri hep aynı açıyla keser, dolayısıyla pusulanızı sabit tutarak yürürseniz bu yolu izlersiniz.

Loksodrom daima büyük daireden uzundur. İstanbul–İzmir gibi kısa mesafelerde fark yarım kilometreyi bulmaz. İstanbul–Tokyo'da ise beş yüz kilometreyi aşar.

Loksodrom hesabında da bir tekillik var: aynı paralel üzerindeki iki nokta için formüldeki bir bölen sıfıra gider. Bu durumda limite geçmek gerekiyor — yoksa doğu-batı doğrultusundaki her hesap patlıyor. Testlerimizde bu durum ayrıca doğrulanıyor.

Hangisini seçmeli

Kendi hesabınızı yapıyorsanız: kısa mesafeler ve genel amaçlı kullanım için Haversine fazlasıyla yeterli, kodu da beş satır. Elipsoidal hassasiyet gerekiyorsa veya azimutları da istiyorsanız Vincenty doğru seçim; antipodal durum için bir yedek yolunuz olsun.

Bizim motorumuz ikisini birlikte hesaplıyor: Vincenty ana sonuç, Haversine hem yedek hem çapraz kontrol. Sonuç kartlarında hangisinin kullanıldığını etiketle gösteriyoruz — nasıl çalışır sayfasında yöntemin tamamı yazılı.

Bu yazıdaki teknik iddialar sitedeki araçlarla doğrulanabilir. Hesaplama yöntemi nasıl çalışır sayfasında, ölçülmüş test sonuçları doğruluk sayfasında. Dini uygulamalarda Diyanet İşleri Başkanlığı'nın yayımladığı bilgiler esastır.