İki koordinat (latitude / longitude) arasındaki mesafeyi hesaplamak

Standard

Bir çok uygulamada işimize yarayabilecek bi işlemdir bu.. 2 cafe arasındaki mesafeyi bulmak veya kişinin anlık konumu ile xxx mekanın arasındaki mesafe gibi.. Peki bunu nasıl yapıyoruz hiç düşündünüz mü?

Lafı uzatmadan bununla ilgili çok basit fonksiyon paylaşıyorum sizlerle. Bu fonksiyon ile koordinatlar arasındaki mesafeyi farklı formatlarda alabilirsiniz;

<?php
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
    $theta = $longitude1 - $longitude2;
    $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
    $miles = acos($miles);
    $miles = rad2deg($miles);
    $miles = $miles * 60 * 1.1515;
    $seamiles = $miles * 0.868976242;
    $feet = $miles * 5280;
    $yards = $feet / 3;
    $kilometers = $miles * 1.609344;
    $meters = $kilometers * 1000;
    return compact('miles','feet','yards','kilometers','meters','seamiles'); 
}

$point1 = array('lat' => 40.770623, 'long' => -73.964367);
$point2 = array('lat' => 40.758224, 'long' => -73.917404);
$distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
foreach ($distance as $unit => $value) {
    echo $unit.': '.number_format($value,4).'
';
}
?>

Hepsi bu kadar, görüldüğü kadar zor olmasa gerek.. 🙂

Direk kaynak koda erişmek isterseniz: https://github.com/onurcanalp/PHP/blob/master/difference_2_lat_lon.php

5 thoughts on “İki koordinat (latitude / longitude) arasındaki mesafeyi hesaplamak

  1. Elinize sağlık; iki mesafe arası havada ve denizde sıklıkla kullanıldığı için birde destek olarak deniz mili eklemek isterim;

    $seamiles=$miles*0,868976242;
    return compact(‘miles’,’feet’,’yards’,’kilometers’,’meters’,’seamiles’);

    • Onur Canalp

      Bu soruyu sorduğunuza göre “evet” demem halinde sonraki soru “nasıl? Yardımcı olur musunuz?” olacak diye korkuyorum 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir