hkucuk

Haversine Mesafesi: Coğrafi Noktalar Arası Mesafe Hesaplama

27 Haziran 2023 • ☕️ 3 dk okuma • 🏷 bilgisayar, yazılım, algoritma

Yazar tarafından şu dillere çevrildi: English


Coğrafi bilgi işlem, modern teknoloji ve veri işleme yöntemlerinin gelişmesiyle büyük bir ivme kazanmış, coğrafi veri ve konum tabanlı hizmetlerin giderek artan bir öneme sahip olduğu bir alandır. Coğrafi veriler, günümüzde birçok sektörde kritik bir rol oynamaktadır; coğrafi konum bilgileri, sadece harita uygulamalarında değil, aynı zamanda hava taşımacılığı, yolculuk planlaması, doğal afet tahmini, çevresel izleme, sağlık hizmetleri, coğrafi bilgi sistemleri (GIS) ve daha birçok alanda kullanılmaktadır.

Bu coğrafi verilerle çalışırken, iki nokta arasındaki mesafeyi hesaplama ihtiyacı ortaya çıkar. Ancak Dünya’nın gerçekte yuvarlak bir şekle sahip olduğunu düşündüğümüzde, bu hesaplama daha karmaşık hale gelir. İşte bu noktada Haversine mesafesi devreye girer. Haversine mesafesi, yüzey eğriliğini dikkate alarak, iki coğrafi konum arasındaki doğrudan mesafeyi hesaplayan bir matematiksel yöntemdir. Bu yöntem, Dünya’nın yüzeyinin eğriliğini ve yuvarlaklığını hesaba katarak, iki nokta arasındaki mesafeyi daha hassas bir şekilde belirlememize olanak tanır. Bu nedenle, coğrafi bilgi işlemde ve konum tabanlı hizmetlerde temel bir araç olarak kabul edilir.

Haversine Mesafesinin Önemi

Haversine mesafesi, coğrafi konum tabanlı uygulamalarda ve hizalama işlemlerinde kullanıldığında önemlidir. İşte Haversine mesafesinin neden önemli olduğuna dair bazı nedenler:

  1. Gerçek Dünya Uygulamaları: Haversine mesafesi, coğrafi konum tabanlı uygulamalarda gerçek dünya mesafelerini hesaplarken kullanılır. Bu tür uygulamalar, konum tabanlı hizmetler, seyahat planlaması, hava yolu taşımacılığı, denizcilik, jeodezi ve daha pek çok alanda kullanılır.
  2. Doğruluk ve Hassasiyet: Haversine mesafesi, Dünya’nın yuvarlak bir şekle sahip olduğunu dikkate alarak hesaplama yapar. Bu, iki nokta arasındaki mesafenin doğru ve hassas bir şekilde hesaplanmasını sağlar. Basit doğru çizgi hesaplamalarının aksine, Dünya’nın yüzeyindeki eğriliği göz önüne alır.
  3. Harita Hizalaması: Harita hizalaması, coğrafi verileri harita üzerine yerleştirme işlemidir. Haversine mesafesi, bu verilerin düzlem üzerinde doğru bir şekilde hizalanmasına yardımcı olur.

Haversine Mesafesi Nasıl Hesaplanır?

Haversine mesafesi hesaplamak için aşağıdaki adımları izlersiniz:

  1. İki noktanın enlem (latitude) ve boylam (longitude) koordinatlarını derece cinsinden alın.
  2. Derece cinsinden verilen koordinatları radyan cinsine çevirin. Bu, enlem ve boylamı radian birimlerine dönüştürmek için aşağıdaki formülleri kullanarak yapılır:

    • Enlem (Latitude) Radyanı = Enlem (Latitude) Derecesi x (π / 180)
    • Boylam (Longitude) Radyanı = Boylam (Longitude) Derecesi x (π / 180)
  3. Haversine formülünü kullanarak iki nokta arasındaki mesafeyi hesaplayın:

    • Δlat = Enlem2 - Enlem1
    • Δlon = Boylam2 - Boylam1
    • a = sin²(Δlat/2) + cos(Enlem1) * cos(Enlem2) * sin²(Δlon/2)
    • c = 2 * atan2(√a, √(1-a))
    • Mesafe = R * c
    • Burada, R Dünya’nın yarıçapıdır (ortalama olarak yaklaşık 6,371 km) ve atan2, arctangent işlemidir.
  4. Hesaplanan mesafe, iki nokta arasındaki yüzey üzerindeki en kısa mesafeyi ifade eder.

Haversine mesafesi, coğrafi konum tabanlı uygulamalarda ve harita hizalamasında kullanılan önemli bir matematiksel yöntemdir. Bu yöntem, Dünya’nın yuvarlak bir şekle sahip olduğunu dikkate alarak iki nokta arasındaki gerçek mesafeyi hassas bir şekilde hesaplamamıza yardımcı olur. Bu nedenle, coğrafi veri işleme ve konum tabanlı hizmetler alanında temel bir araçtır.

GoLang’de Haversine Mesafesi uygulaması:

package main

import (
	"fmt"
	"math"
)

const earthRadius = 6371 // Average radius of the Earth (in kilometers)

func haversine(lat1, lon1, lat2, lon2 float64) float64 {
	// Convert degrees to radians
	lat1 = lat1 * math.Pi / 180
	lon1 = lon1 * math.Pi / 180
	lat2 = lat2 * math.Pi / 180
	lon2 = lon2 * math.Pi / 180

	// Apply the Haversine formula
	dlat := lat2 - lat1
	dlon := lon2 - lon1
	a := math.Sin(dlat/2)*math.Sin(dlat/2) + math.Cos(lat1)*math.Cos(lat2)*math.Sin(dlon/2)*math.Sin(dlon/2)
	c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
	distance := earthRadius * c

	return distance
}

func main() {
	// Calculate the distance between two points
	lat1 := 40.7128 // Latitude of New York
	lon1 := -74.0060 // Longitude of New York
	lat2 := 34.0522 // Latitude of Los Angeles
	lon2 := -118.2437 // Longitude of Los Angeles

	result := haversine(lat1, lon1, lat2, lon2)
	fmt.Printf("Distance between New York and Los Angeles: %.2f km\n", result)
}

Program çalıştırıldığında çıktısı aşağıdaki gibi olacaktır.

Distance between New York and Los Angeles: 3935.75 km

Programın çalışır haline şuradan erişilebilir.


Kaynaklar