ตำแหน่งทางภูมิศาสตร์: การแสดงตำแหน่งของผู้ใช้หรืออุปกรณ์บนแผนที่

ภาพรวม

บทแนะนำนี้จะแสดงวิธีแสดงตำแหน่งทางภูมิศาสตร์ของอุปกรณ์บน Google Maps โดยใช้ฟีเจอร์ตำแหน่งทางภูมิศาสตร์ HTML5 ของเบราว์เซอร์ร่วมกับ Maps JavaScript API สถานที่ตั้งทางภูมิศาสตร์จะแสดงก็ต่อเมื่อผู้ใช้อนุญาตการแชร์ตำแหน่งเท่านั้น

เมื่อผู้ใช้เรียกให้แสดงคำขอตำแหน่งทางภูมิศาสตร์ ผู้ใช้จะได้รับข้อความแจ้งจากเบราว์เซอร์เพื่อขอความยินยอมในการเข้าถึงข้อมูลตำแหน่งของอุปกรณ์ หากคำขอไม่สำเร็จ อาจเป็นเพราะสิทธิ์เข้าถึงตำแหน่งถูกปฏิเสธ หรืออุปกรณ์ไม่สามารถระบุตำแหน่งได้ ฟีเจอร์นี้ใช้ได้เฉพาะในบริบทที่ปลอดภัย (HTTPS) ในเบราว์เซอร์ที่รองรับบางรุ่นหรือทุกรุ่น

ด้านล่างคือแผนที่ที่ระบุตำแหน่งปัจจุบันของอุปกรณ์ของผู้ใช้

ตัวอย่างด้านล่างแสดงโค้ดทั้งหมดที่จําเป็นในการสร้างแผนที่นี้

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;
ดูตัวอย่าง

ลองใช้ตัวอย่าง

ตําแหน่งทางภูมิศาสตร์คืออะไร

การกำหนดตำแหน่งทางภูมิศาสตร์หมายถึงการระบุตำแหน่งทางภูมิศาสตร์ของอุปกรณ์คอมพิวเตอร์โดยใช้กลไกการเก็บรวบรวมข้อมูลต่างๆ โดยทั่วไป บริการระบุตำแหน่งทางภูมิศาสตร์ส่วนใหญ่จะใช้ที่อยู่การกำหนดเส้นทางของเครือข่ายหรือชิป GPS ภายในเพื่อระบุตำแหน่งนี้ ตำแหน่งทางภูมิศาสตร์เป็น API สำหรับอุปกรณ์โดยเฉพาะ ซึ่งหมายความว่าเบราว์เซอร์หรืออุปกรณ์ต้องรองรับการกำหนดตำแหน่งทางภูมิศาสตร์จึงจะใช้ผ่านเว็บแอปพลิเคชันได้

มาตรฐานตำแหน่งทางภูมิศาสตร์ของ W3C

แอปพลิเคชันที่ต้องการให้ระบุตำแหน่งทางภูมิศาสตร์ต้องรองรับมาตรฐานการระบุตำแหน่งทางภูมิศาสตร์ของ W3C โปรดทราบว่าตัวอย่างโค้ดด้านบนจะระบุตําแหน่งของอุปกรณ์ผ่าน W3C navigator.geolocation API

บางครั้งเว็บไซต์อาจใช้ที่อยู่ IP เพื่อตรวจหาตำแหน่งของอุปกรณ์ แต่ข้อมูลนี้อาจให้ค่าประมาณตำแหน่งคร่าวๆ เท่านั้น API มาตรฐาน W3C ได้รับการรองรับอย่างเต็มรูปแบบและแม่นยำที่สุด จึงควรให้ความสำคัญกับ API เหล่านี้มากกว่าวิธีการระบุตำแหน่งทางภูมิศาสตร์อื่นๆ