웹 브라우저에서 제공하는 위치 정보 메소드 중 아래의 메소드를 사용하면 됩니다.
navigator.geolocation.getCurrentPosition(success, error, options)
GeolocationPosition의 coords 속성 상세 설명
`coords` 객체는 사용자의 지리적 위치에 대한 상세 정보를 제공합니다.
주요 속성은 다음과 같습니다:
1. `accuracy`: 35937.106310649929
- 위도와 경도 값의 정확도를 미터 단위로 나타냅니다.
- 이 경우 약 35.9km의 오차 범위를 가집니다.
2. `altitude`: null
- 해수면 기준 고도를 미터 단위로 나타냅니다.
3. `altitudeAccuracy`: null
- 고도 값의 정확도를 미터 단위로 나타냅니다.
4. `heading`: null
- 기기의 이동 방향을 도(degree) 단위로 나타냅니다 (0°~360°).
5. `latitude`: 37.2310015
- 위도를 십진수 도(degree) 단위로 나타냅니다.
- 양수는 북위, 음수는 남위를 의미합니다.
6. `longitude`: 126.9530624
- 경도를 십진수 도(degree) 단위로 나타냅니다.
- 양수는 동경, 음수는 서경을 의미합니다.
7. `speed`: null
- 기기의 이동 속도를 초당 미터(m/s) 단위로 나타냅니다.
error 코드의 종류
1. `PERMISSION_DENIED`: 사용자가 위치 정보 접근을 거부한 경우
2. `POSITION_UNAVAILABLE`: 위치 정보를 사용할 수 없는 경우
3. `TIMEOUT`: 위치 정보 요청 시간이 초과된 경우
4. `UNKNOWN_ERROR`: 기타 알 수 없는 오류가 발생한 경우
options 종류
1. `enableHighAccuracy`: Boolean
- 기본값: false
- true로 설정하면 더 정확한 위치를 요청합니다.
- 단, 응답 시간이 더 길어지고 배터리 소모가 증가할 수 있습니다.
2. `timeout`: Number
- 기본값: Infinity
- 위치 정보를 반환받기까지 기다릴 최대 시간(밀리초)을 지정합니다.
- 지정된 시간 내에 위치를 얻지 못하면 오류가 발생합니다.
3. `maximumAge`: Number
- 기본값: 0
- 캐시된 위치 정보를 사용할 수 있는 최대 시간(밀리초)을 지정합니다.
- 0으로 설정하면 항상 현재 위치를 요청합니다.
- Infinity로 설정하면 항상 캐시된 위치를 사용합니다.
react 에서 사용하려면 아래처럼 사용하면 된다.
useEffect(() => {
const success = (position) => {
const { latitude, longitude } = position.coords;
console.log('■■■■■', position);
const sortedPlaces = sortPlacesByDistance(
AVAILABLE_PLACES,
latitude,
longitude
);
setAvailablePlaces(sortedPlaces);
};
const error = (err) => {
const errorMessages = {
1: "사용자가 위치 정보 접근을 거부했습니다.",
2: "위치 정보를 사용할 수 없습니다.",
3: "위치 정보 요청 시간이 초과되었습니다.",
0: "알 수 없는 오류가 발생했습니다."
};
console.error(errorMessages[err.code] || errorMessages[0]);
};
const options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
navigator.geolocation.getCurrentPosition(success, error, options);
}, []);
적용 후, 화면을 새로고침하면 아래처럼 내 위치 정보 확인창이 뜨게 됩니다
그리고 허용을 안하면 콘솔에 에러메세지도 정상적으로 출력되는 걸 확인할 수 있습니다.
'JavaScript > AboutJS' 카테고리의 다른 글
[javascript] FormData form 태그 안의 복수의 input 창 입력값을 한번에 추출하기 (0) | 2024.11.05 |
---|---|
[JavsScript] 함수의 부분 적용과 유연한 합성 3: curry - 인자를 유연하게 다루는 고차 함수 만들기 (0) | 2024.10.11 |
[JavsScript] 함수의 합성과 데이터 파이프라인 2: pipe - 재사용 가능한 함수 파이프라인 만들기 (0) | 2024.10.11 |
[JavsScript] 함수의 합성과 데이터 파이프 라인 1. go - 즉시 실행되는 함수 체인 만들기 (0) | 2024.10.11 |
[JavsScript] yield* 란? (0) | 2024.09.29 |