2011-12-22 26 views
17

Olası Çoğalt: Bu soru muhtemelen birçok kez istendi biliyorum
MySQL latitude and Longitude table setuphesaplayın mesafe verilen 2 puan, enlem ve boylam

, çok şey araştırdık ve ihtiyacım belirli bir konuda yardım.

Bir form ve kullanıcı enlem ve boylam girdiğimi ve boylam ve enlemleri içeren bir tablonun olduğu bir veritabanına sahip olduğumu, bu tablodaki yarıçapın 15 mil yakınında bulunan bir noktayı veya noktaları nasıl arayabilirim?

+4

Look -> –

cevap

42

İki nokta arasındaki mesafeleri hesaplayan formülü kullanabilirsiniz. Örneğin :

function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { 
    $theta = $longitude1 - $longitude2; 
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + 
       (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * 
       cos(deg2rad($theta))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.1515; 
    switch($unit) { 
     case 'Mi': 
      break; 
     case 'Km' : 
      $distance = $distance * 1.609344; 
    } 
    return (round($distance,2)); 
} 

Ayrıca bir şey gibi yapabilirsiniz: sağa "İlgili" bölümünde ilk 10 bağlantılarda

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * 
      sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * 
      cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)* 
      pi()/180))))*180/pi())*60*1.1515 
     ) as distance 
     FROM `MyTable` 
     HAVING distance >= ".$distance."; 
+0

bana bir hata Bilinmeyen sütun 'mesafeyi verir 'in' cümlesi ' – Grigor

+1

mysql'in hangi sürümüne sahipsiniz? WHERE'yi HAVING olarak değiştirmeyi deneyin. mysql 5.x'in, tümce ile ilgili bazı sorunları vardır. http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html – claire

+2

Tüm bilgileriniz için MySQL-Query mil mesafesini hesaplar. Km'deki mesafeyi belirlemek için 1.609344 ile çarpmanız gerekir (PHP örneğinde olduğu gibi). – cldrr

3

Eğer Lat/Lon iki noktanız varsa, delta Lat ve delta Lon'ları alabilir ve bunu enlem boyunca ve boylam boyunca bir mesafeye dönüştürebilir ve Pisagor teoremini kullanabilirsiniz.

http://www.movable-type.co.uk/scripts/latlong.html gibi sayfalara baktınız mı? Bu, hesaplama mesafesinin çeşitli yollarına sahiptir. Böylece, puan listenizden geçerken, her noktadan ilgiye olan mesafeyi hesaplamak için formülü kullanın ve sadece R < 15 milini karşılayanları saklayın.

İlgili konular