Bắt đầu bằng cách So sánh khoảng cách giữa các vĩ độ. Mỗi mức độ vĩ độ khoảng 69 dặm (111 km) ngoài. Phạm vi dao động (do hình dạng của trái đất nhẹ ellipsoid) từ 68,703 dặm (110,567 km) tại đường xích đạo đến 69,407 (111,699 km) ở hai cực. Khoảng cách giữa hai địa điểm sẽ bằng hoặc lớn hơn khoảng cách giữa các vĩ độ của chúng.
Lưu ý rằng điều này không đúng đối với các kinh độ - độ dài của mỗi độ kinh độ phụ thuộc vào vĩ độ. Tuy nhiên, nếu dữ liệu của bạn bị giới hạn ở một số khu vực (ví dụ: một quốc gia) - bạn cũng có thể tính toán giới hạn tối thiểu và tối đa cho các kinh độ.
Tiếp tục sẽ là một phép tính khoảng cách nhanh, có độ chính xác thấp, giả sử trái đất hình cầu:
Khoảng cách đường tròn d giữa hai điểm có tọa độ {lat1, lon1} và {lat2, lon2} được cho bởi:
d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
Một công thức tương đương về mặt toán học, ít bị lỗi làm tròn cho khoảng cách ngắn là:
d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
d là khoảng cách tính bằng radian
distance_km ≈ radius_km * distance_radians ≈ 6371 * d
(6371 km là bán kính trung bình của trái đất )
Yêu cầu tính toán của phương pháp này là số thập phân. Tuy nhiên, kết quả là rất chính xác đối với khoảng cách nhỏ.
Sau đó, nếu nó nằm trong một khoảng cách nhất định, nhiều hơn hoặc ít hơn, hãy sử dụng một phương pháp chính xác hơn.
GeographicLib là cách triển khai chính xác nhất mà tôi biết, mặc dù công thức nghịch đảo Vincenty cũng có thể được sử dụng.
Nếu bạn đang sử dụng RDBMS, hãy đặt vĩ độ làm khóa chính và kinh độ làm khóa phụ. Truy vấn phạm vi vĩ độ hoặc phạm vi vĩ độ / kinh độ, như được mô tả ở trên, sau đó tính toán khoảng cách chính xác cho tập kết quả.
Lưu ý rằng các phiên bản hiện đại của tất cả các RDBMS chính đều hỗ trợ kiểu dữ liệu địa lý và truy vấn nguyên bản.