JavaScript và API Bản Đồ để Lấy Tọa Độ Khi Nhấp Chuột

Bài viết này sẽ hướng dẫn bạn cách sử dụng JavaScript kết hợp với các API bản đồ phổ biến như Google Maps, AMap (Cao Đức) và Baidu Maps để lấy tọa độ khi người dùng nhấp chuột vào bản đồ. Chúng ta sẽ khám phá chi tiết về quá trình khởi tạo bản đồ, lắng nghe sự kiện nhấp chuột và trích xuất tọa độ từ các đối tượng sự kiện.

1. Khái niệm cơ bản về kinh vĩ độ và hệ tọa độ địa lý

1.1 Mô hình Trái đất và định nghĩa kinh vĩ độ

Trái đất không phải là một hình cầu hoàn hảo mà là một hình elipsoid với hai cực hơi dẹt và xích đạo phồng lên. Hệ tọa độ địa lý sử dụng kinh độ (Longitude) và vĩ độ (Latitude) để xác định vị trí trên bề mặt Trái đất. Kinh độ được đo từ đường kinh tuyến gốc (meridian gốc), từ -180° đến +180°; còn vĩ độ được đo từ xích đạo, từ -90° đến +90°.

1.2 WGS-84 và khung tọa độ chuẩn

Hệ thống định vị toàn cầu GPS sử dụng mô hình ellipsoid WGS-84 làm tiêu chuẩn, cung cấp độ chính xác tới mức centimet trong nhiều ứng dụng như điều hướng, khảo sát và GIS.

1.3 Sự lệch tọa độ và thách thức bản địa hóa

Mặc dù WGS-84 là tiêu chuẩn toàn cầu, nhưng tại một số quốc gia, dữ liệu địa lý có thể bị mã hóa. Ví dụ, ở Trung Quốc, các dịch vụ bản đồ yêu cầu sử dụng hệ tọa độ GCJ-02 hoặc BD-09, gây ra sự lệch lạc lớn nếu sử dụng tọa độ WGS-84 trực tiếp.

2. Sử dụng Google Maps API để khởi tạo bản đồ và xử lý sự kiện nhấp chuột

2.1 Quy trình tích hợp Google Maps JavaScript API

Để sử dụng Google Maps API, trước tiên cần đăng ký tài khoản và tạo dự án trên Google Cloud Console. Sau đó, kích hoạt API dịch vụ và tạo khóa API cho phép gọi API.

<script async defer
        src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initMap">
</script>

2.2 Xây dựng cấu trúc HTML cho container bản đồ

Bản đồ cần một phần tử DOM có kích thước cố định để hiển thị. Dưới đây là ví dụ về cấu trúc HTML:

<html lang="vi">

2.3 Thiết lập thông số khởi tạo bản đồ

Thông số khởi tạo bao gồm tâm bản đồ (center), mức thu phóng (zoom) và kiểu bản đồ (mapTypeId).

function initMap() {
  const mapOptions = {
    zoom: 12,
    center: { lat: 21.0278, lng: 105.8342 }, // Hà Nội
    mapTypeId: 'roadmap'
  };

  new google.maps.Map(document.getElementById("map"), mapOptions);
}

3. Lắng nghe sự kiện nhấp chuột trên bản đồ

3.1 Cơ chế sự kiện của Google Maps

Google Maps cung cấp một hệ thống sự kiện linh hoạt cho phép lắng nghe các tương tác của người dùng. Các sự kiện thường gặp bao gồm click, dblclick, rightclick...

google.maps.event.addListener(map, 'click', function(event) {
  console.log('Vị trí nhấp chuột:', event.latLng.toString());
});

3.2 Xử lý sự kiện nhấp chuột để lấy tọa độ

Khi người dùng nhấp chuột vào bản đồ, chúng ta có thể lấy tọa độ bằng phương thức .lat() và .lng() của đối tượng event.latLng.

function onMapClick(event) {
  const lat = event.latLng.lat();
  const lng = event.latLng.lng();
  alert(`Bạn đã nhấp vào vị trí: Vĩ độ ${lat}, Kinh độ ${lng}`);
}

4. So sánh và lựa chọn giữa các nền tảng bản đồ khác nhau

4.1 Sử dụng AMap (Cao Đức)

Với AMap, việc khởi tạo bản đồ và lắng nghe sự kiện nhấp chuột cũng rất đơn giản.

<script src="https://webapi.amap.com/maps?v=2.0&key=YOUR_AMAP_KEY"></script>

let map = new AMap.Map('map-container', {
    view: new AMap.View2D({
        center: [105.8342, 21.0278], // Hà Nội
        zoom: 12
    })
});

map.on('click', function(e) {
    const lat = e.lnglat.lat;
    const lng = e.lnglat.lng;
    console.log(`Vĩ độ: ${lat}, Kinh độ: ${lng}`);
});

4.2 Sử dụng Baidu Maps

Baidu Maps cũng hỗ trợ tính năng tương tự, nhưng sử dụng hệ tọa độ BD-09.

<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=YOUR_BAIDU_AK"></script>

let map = new BMap.Map("map-container");
let point = new BMap.Point(105.8342, 21.0278); // Hà Nội
map.centerAndZoom(point, 12);

map.addEventListener("click", function(e) {
    let lat = e.point.lat;
    let lng = e.point.lng;
    console.log(`Vĩ độ: ${lat}, Kinh độ: ${lng}`);
});

Thẻ: JavaScript GoogleMaps Amap BaiduMaps GIS

Đăng vào ngày 28 tháng 6 lúc 10:44