Lấy thông tin địa điểm Lat & Lon sử dụng Javascript / PHP / Python


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…

 

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web