Định vị vị trí: Hiển thị vị trí của người dùng hoặc thiết bị trên Maps

Tổng quan

Hướng dẫn này chỉ cho bạn cách hiển thị vị trí địa lý của một thiết bị trên bản đồ Google, sử dụng tính năng Vị trí địa lý HTML5 của trình duyệt cùng với API Maps JavaScript. Vị trí địa lý sẽ chỉ hiển thị nếu người dùng đã cho phép tính năng chia sẻ vị trí.

Khi người dùng kích hoạt yêu cầu định vị vị trí, họ sẽ nhận được lời nhắc của trình duyệt về việc đồng ý truy cập vào dữ liệu vị trí của thiết bị. Nếu yêu cầu không thành công, thì có thể là do quyền truy cập thông tin vị trí đã bị từ chối hoặc do thiết bị không thể xác định vị trí của thiết bị. Tính năng này chỉ dùng được trong các bối cảnh an toàn (HTTPS), trên một số hoặc tất cả các trình duyệt được hỗ trợ.

Dưới đây là bản đồ có thể xác định vị trí hiện tại của thiết bị của người dùng.

Mẫu dưới đây cho thấy toàn bộ mã bạn cần để tạo bản đồ này.

TypeScript

// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see the error "The Geolocation service
// failed.", it means you probably did not give permission for the browser to
// locate you.
let map: google.maps.Map, infoWindow: google.maps.InfoWindow;

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 6,
  });
  infoWindow = new google.maps.InfoWindow();

  const locationButton = document.createElement("button");

  locationButton.textContent = "Pan to Current Location";
  locationButton.classList.add("custom-map-control-button");

  map.controls[google.maps.ControlPosition.TOP_CENTER].push(locationButton);

  locationButton.addEventListener("click", () => {
    // Try HTML5 geolocation.
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        (position: GeolocationPosition) => {
          const pos = {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
          };

          infoWindow.setPosition(pos);
          infoWindow.setContent("Location found.");
          infoWindow.open(map);
          map.setCenter(pos);
        },
        () => {
          handleLocationError(true, infoWindow, map.getCenter()!);
        }
      );
    } else {
      // Browser doesn't support Geolocation
      handleLocationError(false, infoWindow, map.getCenter()!);
    }
  });
}

function handleLocationError(
  browserHasGeolocation: boolean,
  infoWindow: google.maps.InfoWindow,
  pos: google.maps.LatLng
) {
  infoWindow.setPosition(pos);
  infoWindow.setContent(
    browserHasGeolocation
      ? "Error: The Geolocation service failed."
      : "Error: Your browser doesn't support geolocation."
  );
  infoWindow.open(map);
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see the error "The Geolocation service
// failed.", it means you probably did not give permission for the browser to
// locate you.
let map, infoWindow;

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    center: { lat: -34.397, lng: 150.644 },
    zoom: 6,
  });
  infoWindow = new google.maps.InfoWindow();

  const locationButton = document.createElement("button");

  locationButton.textContent = "Pan to Current Location";
  locationButton.classList.add("custom-map-control-button");
  map.controls[google.maps.ControlPosition.TOP_CENTER].push(locationButton);
  locationButton.addEventListener("click", () => {
    // Try HTML5 geolocation.
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        (position) => {
          const pos = {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
          };

          infoWindow.setPosition(pos);
          infoWindow.setContent("Location found.");
          infoWindow.open(map);
          map.setCenter(pos);
        },
        () => {
          handleLocationError(true, infoWindow, map.getCenter());
        },
      );
    } else {
      // Browser doesn't support Geolocation
      handleLocationError(false, infoWindow, map.getCenter());
    }
  });
}

function handleLocationError(browserHasGeolocation, infoWindow, pos) {
  infoWindow.setPosition(pos);
  infoWindow.setContent(
    browserHasGeolocation
      ? "Error: The Geolocation service failed."
      : "Error: Your browser doesn't support geolocation.",
  );
  infoWindow.open(map);
}

window.initMap = initMap;
Xem ví dụ

Thử dùng mẫu

Định vị vị trí là gì?

Vị trí địa lý là thông tin xác định vị trí địa lý của thiết bị điện toán sử dụng nhiều cơ chế thu thập dữ liệu. Thông thường, hầu hết các dịch vụ định vị vị trí đều sử dụng địa chỉ định tuyến mạng hoặc chip GPS nội bộ để xác định vị trí này. Vị trí địa lý là một API dành riêng cho thiết bị. Điều này có nghĩa là các trình duyệt hoặc thiết bị phải hỗ trợ tính năng định vị vị trí để sử dụng thông qua các ứng dụng web.

Tiêu chuẩn vị trí địa lý W3C

Ứng dụng muốn thực hiện hoạt động định vị vị trí phải hỗ trợ Tiêu chuẩn vị trí địa lý W3C. Xin lưu ý rằng mã mẫu ở trên xác định vị trí của thiết bị thông qua API W3C navigator.geolocation.

Đôi khi, các trang web sử dụng địa chỉ IP để phát hiện vị trí của thiết bị. Tuy nhiên, cách này chỉ có thể cung cấp thông tin ước đoán sơ bộ về vị trí đó. API tiêu chuẩn W3C là các API được hỗ trợ đầy đủ và chính xác nhất. Vì vậy, các API này cần được ưu tiên hơn so với các phương thức định vị vị trí khác.