2011-12-22 36 views
17

thể trùng lặp:
MySQL latitude and Longitude table setupTính khoảng cách cho 2 điểm, vĩ độ và kinh độ

Tôi biết câu hỏi này có lẽ được hỏi nhiều lần, tôi đã nghiên cứu rất nhiều và tôi cần giúp đỡ với điều cụ thể.

phép nói rằng tôi có một hình thức và người dùng nhập vào kinh độ và vĩ độ, và tôi có một cơ sở dữ liệu trong đó có bảng kinh độ chứa và vĩ độ, làm thế nào tôi sẽ tìm kiếm một điểm hoặc điểm trong bảng đó mà trong vòng 15 dặm bán kính?

+4

Nhìn vào 10 liên kết đầu trong phần "liên quan" sang bên phải -> –

Trả lời

42

Bạn có thể sử dụng công thức tính khoảng cách giữa hai điểm. Ví dụ:

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)); 
} 

Bạn cũng có thể làm điều gì đó như:

$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

mang lại cho tôi một Lỗi không xác định cột 'khoảng cách 'in' where khoản ' – Grigor

+1

phiên bản nào của mysql bạn có? Hãy thử thay đổi WHERE để HAVING. mysql 5.x có một số vấn đề với mệnh đề where. http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html – claire

+2

Đối với tất cả thông tin của bạn, MySQL-Query tính toán khoảng cách trong dặm. Để xác định khoảng cách theo km, bạn phải nhân nó với 1.609344 (như trong ví dụ PHP). – cldrr

3

Nếu bạn có Lat/Lon của hai điểm, bạn có thể nhận delta Lat và delta Lon và chuyển đổi nó thành khoảng cách dọc theo vĩ độ và khoảng cách dọc theo kinh độ và sử dụng định lý Pythagore.

Bạn đã xem các trang như http://www.movable-type.co.uk/scripts/latlong.html chưa? Điều này có một số cách tính toán khoảng cách. Vì vậy, khi bạn đi qua danh sách các điểm, bạn sử dụng công thức để tính toán khoảng cách từ mỗi điểm đến điểm ưa thích và giữ chỉ những người đáp ứng R < 15 dặm.

Các vấn đề liên quan