wam
w__am 개발노트
wam
  • 분류 전체보기 (165)
    • CS 지식 (10)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 컴퓨터 구조 (0)
      • 운영체제 (0)
      • 네트워크 (7)
      • 데이터베이스 (0)
      • 디자인 패턴 (3)
    • Frontend (131)
      • Three.js (64)
      • NPM (1)
      • Nest.js (19)
      • React (10)
      • Apollo (7)
      • TypeScript (2)
      • JavaScript (12)
      • HTML, CSS (1)
      • Jest (3)
      • E2E (5)
      • Cypress (7)
    • Database (12)
      • TypeORM (12)
    • IT 지식 (8)
      • 클라우드 서비스 (3)
      • 네트워크 (1)
      • 데이터 포맷 (2)
      • 기타 (2)
    • IT Book (2)
    • 유용한 사이트 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 🐱 Github

인기 글

태그

  • getelapsedtime()
  • 데이터 포맷
  • getdelta()
  • 함수의 범위
  • react 성능 최적화
  • Interface
  • isabstract
  • axeshelper
  • API
  • math.cos()
  • reactive variables
  • gridhelper
  • 함수 리터럴
  • joi 에러
  • threejs 개발 할 때 도움을 줄 수 있는 유틸리티
  • math.sin()
  • 오프-프레미스(off-premise) 방식
  • 함수 선언문
  • Decorators
  • 디자인 패턴
  • 함수 표현식
  • 삼각함수
  • type-graphql
  • 초기 환경설정
  • e.preventdefault()
  • three.js 구성 요소
  • 렌더링 성능 최적화
  • 스코프
  • 원형적인 움직임
  • mapped types

최근 글

관리자

글쓰기 / 스킨편집 / 관리자페이지
hELLO · Designed By 정상우.
wam

w__am 개발노트

Frontend/React

사용자의 현재 위치를 실시간으로 업데이트, watchPosition()

2025. 3. 5. 18:47

 

watchPosition()

 

  • watchPosition()은 사용자의 위치 변화를 지속적으로 추적하는 Geolocation API의 메서드이다.
  • 즉, 사용자의 GPS 정보가 바뀔 때마다 업데이트를 받을 수 있다.

 

 

navigator.geolocation.watchPosition(
  (position) => {
    console.log("위도:", position.coords.latitude);
    console.log("경도:", position.coords.longitude);
  },
  (error) => {
    console.error("에러 발생:", error.message);
  },
  {
    enableHighAccuracy: true, // 높은 정확도 요청
    maximumAge: 0, // 항상 최신 위치 정보 요청
    timeout: 5000, // 5초 안에 응답이 없으면 오류 발생
  }
);

설명:

  • position.coords.latitude: 위도
  • position.coords.longitude: 경도
  • enableHighAccuracy: true: 배터리를 더 소모하지만 GPS 기반의 더 정확한 위치를 요청
  • maximumAge: 0: 캐시된 위치 정보 대신 항상 최신 정보를 요청
  • timeout: 위치 정보를 가져오는 최대 대기 시간(ms)

 

 

중지하기

const watchId = navigator.geolocation.watchPosition((position) => {
  console.log("현재 위치:", position.coords.latitude, position.coords.longitude);
});

// 특정 조건에서 추적 중지
navigator.geolocation.clearWatch(watchId);
  • watchId는 watchPosition()이 반환하는 ID로, clearWatch(watchId)를 호출하면 추적이 멈춘다.

 

 

실시간 위치 추적 예제 (React)

import { useState, useEffect } from "react";

const LocationTracker = () => {
  const [location, setLocation] = useState({ lat: null, lng: null });

  useEffect(() => {
    const watchId = navigator.geolocation.watchPosition(
      (position) => {
        setLocation({
          lat: position.coords.latitude,
          lng: position.coords.longitude,
        });
      },
      (error) => console.error("위치 오류:", error.message),
      { enableHighAccuracy: true, maximumAge: 0, timeout: 5000 }
    );

    return () => navigator.geolocation.clearWatch(watchId); // 컴포넌트 언마운트 시 추적 중지
  }, []);

  return (
    <div>
      <h2>현재 위치</h2>
      <p>위도: {location.lat}</p>
      <p>경도: {location.lng}</p>
    </div>
  );
};

export default LocationTracker;
  • 사용자가 이동할 때마다 위도/경도가 자동으로 업데이트됨! 🚀
  • useEffect의 return을 이용해 컴포넌트가 언마운트될 때 위치 추적을 중지하도록 처리했다.

 

 

주의할 점

  • 사용자 동의 필요
    • watchPosition()을 실행하면 사용자에게 위치 정보 접근 허용을 요청해야 함.
  • 배터리 소모 많음
    • GPS를 계속 사용하므로 필요할 때만 실행하고 clearWatch()로 멈춰야 함.
  • 브라우저 제한 사항
    • HTTPS 환경에서만 정상 작동하며, 일부 모바일 브라우저에서는 제한될 수 있음.

 

 

저작자표시 변경금지 (새창열림)

'Frontend > React' 카테고리의 다른 글

[Rect Hook Form] 기본적으로 버튼이 submit 버튼으로 동작, 별도의 버튼 사용시 타입 지정 꼭 해주기  (0) 2024.12.12
함수를 호출하는 방식 (즉시 호출과 지연 호출)  (0) 2024.12.12
[Rect Hook Form] getValues()에서 Number 타입 가져오는 법  (0) 2024.12.11
React Router: push와 replace의 차이점  (0) 2024.10.15
React Hook Form의 handleSubmit으로 폼 제출 시 페이지 리렌더링 방지하기  (0) 2024.09.26
    'Frontend/React' 카테고리의 다른 글
    • [Rect Hook Form] 기본적으로 버튼이 submit 버튼으로 동작, 별도의 버튼 사용시 타입 지정 꼭 해주기
    • 함수를 호출하는 방식 (즉시 호출과 지연 호출)
    • [Rect Hook Form] getValues()에서 Number 타입 가져오는 법
    • React Router: push와 replace의 차이점
    wam
    wam

    티스토리툴바