Một trong những ứng dụng web thường được phát triển đó là Ứng dụng bản đồ (map), như cung cấp thông tin địa điểm, tracking hàng hoá, tìm kiếm địa điểm, … Trong bài viết này vinasupport.com sẽ hướng dẫn các bạn một thể kiến thức Map.
Lat và Lon là gì?
- Lat viết tắt của Latitude là vĩ độ, là một tạo độ xác định vị trí bắc nam của một điểm trên bề mặt trái đất.
- Lon viết tắt của Longitude là kinh độ, là một toạ độ xác định vị trí đông tây của một điểm trên bên mặt trái đất.
Từ kinh độ và vĩ độ ta xác định dễ dàng được vị trí của các đối tượng, từ đó tìm được tên đường phố, toà nhà, …
Lấy thông tin Lat & Lon của người dùng bằng Javascript
Trường hợp người dùng sử dụng các thiết bị có GPS và được cấp phép để lấy thông tin địa điểm location thì chúng ta sẽ có chính xác địa điểm của User đang truy cập ứng dụng.
<!DOCTYPE html> <html lang="en"> <body> <p>Click the button to get your coordinates.</p> <button onclick="getUserLocation()">Try It</button> <p id="demo"></p> <script> var x = document.getElementById("demo"); function getUserLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { alert("Geolocation is not supported by this browser.") } } function showPosition(position) { var lat = position.coords.latitude; var lon = position.coords.longitude; alert('Your Latitude:' + lat + ' and Longitude:' + lon); } </script> </body> </html>
Tính toán khoảng cách giữa 2 điểm
Bằng PHP
/** * @param $lat1 * @param $lon1 * @param $lat2 * @param $lon2 * @param string $unit * @return float */ function getDistanceBetweenPoints($lat1, $lon1, $lat2, $lon2, string $unit = 'm'): float { $theta = $lon1 - $lon2; $distance = (sin(deg2rad($lat1)) * sin(deg2rad($lat2))) + (cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta))); $distance = acos($distance); $distance = rad2deg($distance); $distance = $distance * 60 * 1.1515; switch($unit) { case 'm': break; case 'km' : $distance = $distance * 1.609344; } return (round($distance,2)); }
Bằng Python
from numpy import sin, cos, arccos, pi, round def get_distance_between_points(lat1, lon1, lat2, lon2, unit='miles'): """ Get Distance Between Points - vinasupport.com :param lat1: :param lon1: :param lat2: :param lon2: :param unit: :return: """ def rad2deg(radians): degrees = radians * 180 / pi return degrees def deg2rad(degrees): radians = degrees * pi / 180 return radians theta = lon1 - lon2 distance = 60 * 1.1515 * rad2deg( arccos( (sin(deg2rad(lat1)) * sin(deg2rad(lat2))) + (cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta))) ) ) unit_to_distance = { 'm': round(distance, 2), 'km': round(distance * 1.609344, 2) } return unit_to_distance.get(unit, 0)
To be continue…