Đị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 cho bạn biết 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 Định vị vị trí HTML5 của trình duyệt cùng với API Maps JavaScript. Vị trí địa lý sẽ chỉ xuất hiện 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 từ 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 thiết bị không thể xác định vị trí của mình. Tính năng này chỉ hoạt động trong ngữ cảnh an toàn (HTTPS), trong một số hoặc tất cả trình duyệt hỗ trợ.

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

Mẫu bên dưới 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ử mẫu

Vị trí địa lý là gì?

Định vị vị trí là việc xác định vị trí địa lý của một thiết bị máy tính bằ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í để có thể sử dụng thông tin này 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 quy trình đị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 navigator.geolocation W3C.

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