Tính khoảng cách giữa 2 tọa độ gps
Tháng này, tôi sẽ lập trình không hề ít về PHP với MySQL liên quan đến GIS. Tìm kiếm kiếm xung quanh mạng, tôi đích thực đã chạm mặt khó khăn khi tìm thấy một số đo lường địa lý nhằm tìm khoảng cách giữa nhì vị trí, vị vậy tôi muốn chia sẻ chúng ngơi nghỉ đây.
Bạn đang xem: Tính khoảng cách giữa 2 tọa độ gps

Cách đơn giản và dễ dàng để tính khoảng cách giữa hai điểm là thực hiện công thức Pitago để tính cạnh huyền của một tam giác (A² + B² = C²). Điều này được gọi là khoảng cách Euclide.
Đó là một mở màn thú vị nhưng mà nó không vận dụng với môn Địa lý vì khoảng cách giữa những đường vĩ độ cùng kinh độ là không phải là một khoảng cách bằng riêng biệt. Khi bạn càng cho gần con đường xích đạo, các đường vĩ độ càng xa nhau. Nếu bạn sử dụng một số trong những loại phương trình tam giác solo giản, nó hoàn toàn có thể đo khoảng cách đúng đắn ở một vị trí và sai lớn khiếp ở chỗ khác, vì độ cong của Trái đất.
Khoảng cách vòng tròn lớn
Các con đường đường dịch chuyển xa quanh Trái đất được gọi là khoảng cách vòng tròn lớn. Đó là khoảng cách ngắn độc nhất giữa nhị điểm bên trên hình ước khác với những điểm trong bạn dạng đồ phẳng. Kết hợp điều này với thực tiễn là các đường vĩ độ với kinh độ không cân nhau và bạn đã sở hữu một phép tính khó.
Đây là đoạn clip giải thích tuyệt đối hoàn hảo về cách những Vòng liên kết lớn hoạt động.
Công thức Haversine
Khoảng cách áp dụng độ cong của Trái đất được kết hợp trong Công thức Haversine, thực hiện lượng giác để chất nhận được độ cong của trái đất. Khi chúng ta đang tìm khoảng cách giữa 2 khu vực trên trái khu đất (khi quạ bay), một con đường thẳng thực sự là 1 đường cung.
Điều này có thể áp dụng vào chuyến cất cánh hàng ko - bạn đã khi nào nhìn vào phiên bản đồ thực tế của những chuyến cất cánh và nhận ra chúng được hình cung? Đó là chính vì bay vào vòm thân hai điểm sẽ ngắn lại so với trực kế tiếp vị trí.
PHP: Tính khoảng cách giữa 2 điểm vĩ độ cùng kinh độ
Dù sao, đây là công thức PHP để tính khoảng cách giữa nhì điểm (cùng với biến hóa Mile đối với Kilômét) được làm tròn đến hai chữ số thập phân.
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = "miles") $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 "miles": break; case "kilometers" : $distance = $distance * 1.609344; return (round($distance,2));SQL: lấy tất cả hồ sơ vào một phạm vi By Tính phương pháp Trong Miles sử dụng Latitude và Longitude
Cũng có thể sử dụng SQL để tiến hành một phép tính để tìm toàn bộ các bản ghi trong một khoảng cách cụ thể. Trong lấy ví dụ như này, tôi sẽ MyTable truy vấn trong MySQL nhằm tìm toàn bộ các hồ nước sơ mà là bé dại hơn hoặc bằng với biến $ khoảng cách (trong Miles) cho vị trí của tôi tại $ vĩ độ và kinh độ $:
Truy vấn để lấy tất cả các bạn dạng ghi trong một khoảng cách bằng phương pháp tính toán khoảng cách trong dặm thân hai điểm của vĩ độ với kinh độ là:
$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 `table` WHERE distance $ gớm độ - đó là một vươn lên là PHP cơ mà tôi vẫn truyền kinh độ của điểm.$ vĩ độ - đây là một biến chuyển PHP nhưng tôi đã truyền ghê độ của điểm.$ khoảng chừng cách - đấy là khoảng giải pháp mà bạn có nhu cầu tìm tất cả các bạn dạng ghi nhỏ dại hơn hoặc bằng.Xem thêm: Những Kết Quả Nổi Bật Trong Thực Trạng Cải Cách Thủ Tục Hành Chính Ở Địa Phương
bàn - đấy là bảng bạn sẽ muốn thay thế sửa chữa nó bởi tên bảng của mình.vĩ độ - đó là trường vĩ độ của bạn.kinh độ - đấy là trường tởm độ của bạn.SQL: tầm nã xuất tất cả các bạn dạng ghi vào một phạm vi bằng cách tính toán khoảng cách theo ki lô mét sử dụng vĩ độ với kinh độ
Và đây là truy vấn SQL thực hiện km trong MySQL:
$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 * 1.609344) as distance FROM `table` WHERE distance $ khiếp độ - đó là một biến đổi PHP mà lại tôi vẫn truyền khiếp độ của điểm.$ vĩ độ - đấy là một trở nên PHP cơ mà tôi đã truyền tởm độ của điểm.$ khoảng cách - đấy là khoảng biện pháp mà bạn có nhu cầu tìm tất cả các bản ghi nhỏ dại hơn hoặc bằng.bàn - đấy là bảng bạn sẽ muốn sửa chữa thay thế nó bằng tên bảng của mình.vĩ độ - đó là trường vĩ độ của bạn.kinh độ - đó là trường kinh độ của bạn.Tôi đã sử dụng mã này trong một nền tảng lập bản đồ doanh nghiệp lớn mà chúng tôi đã thực hiện cho một cửa hàng kinh doanh nhỏ với rộng 1,000 vị trí trên mọi Bắc Mỹ với nó vận động rất tốt.