위치 정보

W3C 권고안

이 문서에 대한 추가 정보
이 버전:
https://www.w3.org/TR/2025/REC-geolocation-20250818/
최신 공개 버전:
https://www.w3.org/TR/geolocation/
최신 편집자 초안:
https://w3c.github.io/geolocation/
역사:
https://www.w3.org/standards/history/geolocation/
커밋 기록
테스트 스위트:
https://wpt.live/geolocation/
구현 보고서:
https://w3c.github.io/geolocation/reports/implementation.html
편집자:
Marcos Cáceres (Apple Inc.)
Reilly Grant (Google)
이전 편집자:
Andrei Popescu (Google Inc.)
피드백:
GitHub w3c/geolocation (풀 리퀘스트, 새 이슈, 오픈 이슈)
오류 목록:
오류 목록 존재.
브라우저 지원:
caniuse.com

참고: 번역본.


요약

위치 정보는 호스팅 장치와 연관된 지리적 위치 정보에 접근할 수 있게 해줍니다.

문서 현황

이 섹션은 이 문서가 출판될 당시의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 명세가 2022년 9월 1일 W3C 권고안이 된 이후로, 다음과 같은 실질적인 추가 및/또는 수정 사항이 제안되었습니다:

변경사항에 대한 자세한 목록은 D. 변경 로그 섹션에서 확인할 수 있습니다. 문서의 검토자는 고유한 스타일로 표시된 후보 추가 및/또는 수정 사항을 식별할 수 있습니다.

본 문서는 장치 및 센서 워킹 그룹웹 애플리케이션 워킹 그룹에서 권고안 트랙을 통해 권고안으로 발행되었습니다. 이 문서는 후보 개정안을 포함하며, 이전 권고안 이후 실질적인 변경 사항과 새로운 기능을 도입합니다.

W3C는 이 명세를 웹 표준으로 널리 배포할 것을 권장합니다.

W3C 권고안은 광범위한 합의 과정을 거쳐 W3C와 회원들이 승인한 명세이며, 워킹 그룹 회원들은 구현에 대해 로열티 없는 라이선스를 제공할 의무를 가집니다. 향후 권고안 업데이트에는 새로운 기능이 포함될 수 있습니다.

후보 추가 사항은 문서에서 표시됩니다.

후보 수정 사항은 문서에서 표시됩니다.

본 문서는 W3C 특허 정책에 따라 운영하는 그룹에서 제작되었습니다. W3C공개 특허 공개 목록(장치 및 센서 워킹 그룹)공개 특허 공개 목록(웹 애플리케이션 워킹 그룹)을 관리하며, 각 그룹의 산출물과 관련된 공개 내용 및 특허 공개 방법에 대한 안내도 포함합니다. 어떤 개인이 필수 청구항을 포함한다고 생각되는 특허를 실제로 알고 있다면, W3C 특허 정책 6절에 따라 정보를 공개해야 합니다.

이 문서는 2023년 11월 3일 W3C 프로세스 문서에 따라 관리됩니다.

1. 소개

이 섹션은 규범적이지 않습니다.

위치 정보는 구현이 호스팅되는 장치에만 연관된 위치 정보에 대한 고수준 인터페이스를 정의합니다. 일반적인 위치 정보의 출처로는 GPS(Global Positioning System)와 IP 주소, RFID, WiFi 및 Bluetooth MAC 주소, GSM/CDMA 셀 ID와 같은 네트워크 신호로부터 추론된 위치, 그리고 사용자 입력이 포함됩니다. API 자체는 위치 정보의 출처와 무관하며, API가 장치의 실제 위치를 반환한다는 보장은 없습니다.

최종 사용자가 권한을 부여할 경우, 위치 정보는 다음을 제공합니다:

1.1 범위

이 섹션은 규범적이지 않습니다.

이 명세는 호스팅 장치와 연관된 지리적 위치 정보를 가져오는 스크립팅 API 제공에 한정됩니다. 지리적 위치 정보는 세계 측지 시스템 좌표 [WGS84]로 제공됩니다. 어떤 형태의 마크업 언어 제공이나, 지리적 위치를 식별하는 URL을 만들기 위한 새로운 URL 스킴 정의는 포함하지 않습니다.

2. 예시

이 섹션은 규범적이지 않습니다.

API는 "단일" 위치 요청과 반복 위치 업데이트 요청 모두를 가능하게 하도록 설계되었습니다. 아래 예시는 일반적인 사용 사례를 보여줍니다.

2.1 현재 위치 가져오기

이 섹션은 규범적이지 않습니다.

사용자의 현재 위치를 요청합니다. 사용자가 허용하면 위치 객체를 반환받게 됩니다.

2.2 위치 관찰하기

이 섹션은 규범적이지 않습니다.

사용자의 현재 위치를 지속적으로 관찰하는 기능을 요청합니다. 사용자가 허용하면 사용자의 위치에 대한 지속적인 업데이트를 받을 수 있습니다.

2.3 위치 관찰 중지

이 섹션은 규범적이지 않습니다.

clearWatch() 메서드를 호출하여 위치 변경 관찰을 중지합니다.

2.4 오류 처리

이 섹션은 규범적이지 않습니다.

오류가 발생하면 watchPosition() 또는 getCurrentPosition() 메서드의 두 번째 인자가 GeolocationPositionError 오류 객체로 호출되어, 어떤 문제가 발생했는지 파악하는 데 도움이 됩니다.

2.5 maximumAge를 캐시 제어로 사용

이 섹션은 규범적이지 않습니다.

기본적으로 API는 이전에 획득한 위치가 있다면 항상 캐시된 위치를 반환하려 시도합니다. 이 예시에서는 10분보다 오래되지 않은 위치만 허용합니다. 사용자 에이전트에 충분히 최신의 캐시된 위치 객체가 없다면 자동으로 새 위치를 획득합니다.

2.6 timeout 사용

이 섹션은 규범적이지 않습니다.

위치 정보가 시간에 민감하게 필요하다면 PositionOptionstimeout 멤버를 사용해 위치 획득을 기다리는 최대 시간을 제한할 수 있습니다.

2.7 서드파티 컨텍스트에서 API 활성화

이 섹션은 규범적이지 않습니다.

기본 허용 목록'self'는 동일 출처의 중첩 프레임에서는 API 사용이 가능하지만, 서드파티 콘텐츠에서는 API 사용을 제한합니다.

서드파티 사용은 allow="geolocation" 속성을 iframe 요소에 추가하여 선택적으로 활성화할 수 있습니다:

또는, HTTP 응답 헤더를 지정하여 1차 컨텍스트에서 API를 비활성화할 수도 있습니다:

자세한 내용은 Permissions Policy에서 Permissions-Policy HTTP 헤더에 대해 확인할 수 있습니다.

3. 개인정보 보호 고려사항

이 섹션은 규범적이지 않습니다.

이 명세에서 정의된 API는 호스팅 장치의 지리적 위치를 가져오는 데 사용됩니다. 대부분의 경우 이 정보는 장치 사용자의 위치도 함께 공개되어 사용자의 개인정보가 침해될 수 있습니다.

3.2 위치 정보 수신자를 위한 개인정보 보호 고려사항

이 섹션은 규범적이지 않습니다.

참고: 민감한 데이터에 대한 개발자의 책임

이 섹션은 "수신자"에 적용되며, 일반적으로 위치 정보를 활용하는 개발자를 의미합니다. 사용자 에이전트나 이 명세가 이러한 요구사항을 강제할 수는 없지만, 개발자는 이 섹션을 신중하게 읽고 아래 제안사항을 준수하기 위해 최선을 다해야 합니다. 개발자는 위치 데이터 사용 및 접근에 관해 해당 관할 지역의 개인정보 보호법이 적용될 수 있음을 인지해야 합니다.

수신자는 필요한 경우에만 위치 정보를 요청하고, 해당 정보는 제공받은 목적에만 사용해야 합니다. 작업이 완료되면 사용자의 명시적 허가 없이 위치 정보를 보관하지 않아야 하며, 또한 무단 접근으로부터 정보를 보호할 조치를 취해야 합니다. 위치 정보가 저장될 경우, 사용자가 해당 정보를 수정 및 삭제할 수 있도록 해야 합니다.

위치 정보 수신자는 사용자의 명시적 허가 없이 위치 정보를 재전송해서는 안 됩니다. 재전송 시에는 주의를 기울여야 하며, 암호화 사용을 권장합니다.

수신자는 위치 데이터를 수집한다는 사실, 수집 목적, 데이터 보관 기간, 데이터 보안 방법, 데이터가 공유되는 경우 공유 방식, 사용자가 데이터에 접근, 수정, 삭제할 수 있는 방법 및 데이터와 관련된 기타 선택사항을 명확하고 눈에 띄게 공개해야 합니다. 이 공개에는 위의 지침에 대한 예외 사항에 대한 설명도 포함되어야 합니다.

3.3 구현 시 고려사항

이 섹션은 규범적이지 않습니다.

구현자는 다음과 같은 개인정보를 침해할 수 있는 측면을 고려해야 합니다: 어떤 경우에는 사용자가 사용자 에이전트에게 웹사이트에 위치를 공개하도록 실수로 권한을 부여할 수 있습니다. 또 다른 경우에는 특정 URL에 호스팅된 콘텐츠가 변경되어 사용자가 인식하기엔 이전에 부여된 위치 권한이 더 이상 적용되지 않을 수도 있습니다. 또는 사용자가 단순히 마음이 바뀔 수도 있습니다.

이러한 상황을 예측하거나 방지하는 것은 본질적으로 어렵습니다. 대응 및 심층 방어 조치는 구현자의 책임이며 이 명세에서 규정하지 않습니다. 그러나 이러한 조치를 설계할 때, 구현자는 위치 공유에 대한 사용자 인식을 높이고, 권한 철회를 가능하게 하는 사용자 인터페이스에 접근할 수 있도록 해야 합니다.

3.4 API 사용 권한 확인

위치 정보기본 강력 기능이며, 이름 "geolocation"으로 식별됩니다.

API 사용 권한을 확인할 때, 사용자 에이전트는 "24시간", "1주" 등과 같은 시간 기반 권한 유효 기간을 제안하거나, 권한 부여를 무기한 기억할 수도 있습니다. 하지만, 사용자 에이전트는 권장되는 방법으로 권한 유효 기간을 단일 세션으로 제한하는 것을 우선시해야 합니다: 예를 들어, realm이 파괴되거나, 최종 사용자가 다른 곳으로 이동하거나, 관련 브라우저 탭이 닫힐 때까지 등입니다.

4. 보안 고려사항

출판 시점 기준으로 위치 정보와 관련된 보안 고려사항은 없습니다. 하지만, 3. 개인정보 보호 고려사항을 참고하시기 바랍니다.

6. Geolocation 인터페이스 및 콜백

WebIDL[Exposed=Window]
interface Geolocation {
  undefined getCurrentPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  long watchPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  undefined clearWatch (long watchId);
};

callback PositionCallback = undefined (
  GeolocationPosition position
);

callback PositionErrorCallback = undefined (
  GeolocationPositionError positionError
);

6.1 내부 슬롯

Geolocation의 인스턴스는 아래 표의 내부 슬롯과 함께 생성됩니다:

내부 슬롯 설명
[[cachedPosition]] GeolocationPosition 타입이며, 초기값은 null입니다. 마지막으로 획득한 위치에 대한 참조로 캐시 역할을 합니다. 사용자 에이전트는 임의로 [[cachedPosition]]를 언제든 어떤 이유로든 null로 초기화하여 캐시를 제거할 수 있습니다.
[[watchIDs]] 리스트로 초기화되며, unsigned long 항목만 포함합니다.

6.2 getCurrentPosition() 메서드

getCurrentPosition(successCallback, errorCallback, options) 메서드 단계:

  1. 만약 현재 설정 객체관련 전역 객체연결된 Document완전히 활성 상태가 아니라면: 만약 this관련 전역 객체연결된 Document완전히 활성 상태가 아니라면:
    1. 오류 콜백 호출 errorCallbackPOSITION_UNAVAILABLE 전달.
    2. 이 알고리즘 종료.
  2. 위치 요청this, successCallback, errorCallback, options을 전달.

6.3 watchPosition() 메서드

watchPosition(successCallback, errorCallback, options) 메서드 단계:

  1. 만약 현재 설정 객체관련 전역 객체연결된 Document완전히 활성 상태가 아니라면: 만약 this관련 전역 객체연결된 Document완전히 활성 상태가 아니라면:
    1. 오류 콜백 호출errorCallbackPOSITION_UNAVAILABLE 전달.
    2. 0을 반환.
  2. watchId를 0보다 큰 구현 정의 unsigned long 값으로 생성.
  3. watchId를 리스트에 추가 (this[[watchIDs]]에).
  4. 위치 요청this, successCallback, errorCallback, options, watchId를 전달.
  5. watchId를 반환.

6.4 clearWatch() 메서드

clearWatch()가 호출되면, 사용자 에이전트는 반드시 다음을 수행해야 합니다:

  1. watchIdthis[[watchIDs]]에서 제거합니다.

6.5 위치 요청

위치 요청을 하려면, Geolocation geolocation, PositionCallback successCallback, PositionErrorCallback? errorCallback, PositionOptions options, 그리고 선택적으로 watchId를 전달합니다:

  1. watchIDsgeolocation[[watchIDs]]를 할당합니다.
  2. documentgeolocation관련 전역 객체연결된 Document를 할당합니다.
  3. 만약 document"geolocation" 기능을 사용할 수 없음이라면:
    1. watchId가 전달된 경우, watchIdwatchIDs에서 제거합니다.
    2. 오류 콜백 호출errorCallbackPERMISSION_DENIED를 전달합니다.
    3. 이 알고리즘을 종료합니다.
  4. 만약 geolocation환경 설정 객체비보안 컨텍스트라면:
    1. watchId가 전달된 경우, watchIdwatchIDs에서 제거합니다.
    2. 오류 콜백 호출errorCallbackPERMISSION_DENIED를 전달합니다.
    3. 이 알고리즘을 종료합니다.
  5. 만약 documentvisibility state가 "hidden"이라면, 다음 페이지 가시성 변경 단계가 실행될 때까지 대기합니다:
    1. Assert: documentvisibility state가 "visible"임을 확인합니다.
    2. 아래의 다음 단계로 계속 진행합니다.
  6. descriptorPermissionDescriptor의 새 인스턴스를 할당하며, name"geolocation"입니다.
  7. 병렬로:
    1. permissionrequest permission to use descriptor의 결과를 할당합니다.
    2. 만약 permission이 "denied"라면:
      1. watchId가 전달된 경우, watchIdwatchIDs에서 제거합니다.
      2. 오류 콜백 호출errorCallbackPERMISSION_DENIED를 전달합니다.
      3. 이 알고리즘을 종료합니다.
    3. 위치 획득successCallback, errorCallback, options, watchId를 전달하며 대기합니다.
    4. watchId가 전달되지 않았다면, 이 알고리즘을 종료합니다.
    5. watchIDswatchId를 포함하는 동안:
      1. 지리적 위치의 유의미한 변경을 대기합니다. 유의미한 변경이 무엇인지의 기준은 구현에 맡깁니다. 사용자 에이전트는 위치 변경 보고 빈도에 제한(rate limit)을 둘 수 있습니다. 사용자 에이전트는 반드시 set emulated position data 호출을 유의미한 변경으로 간주해야 합니다.
      2. 만약 document완전히 활성 상태가 아니거나 visibility state가 "visible"이 아니면, 이전 단계로 돌아가 다시 지리적 위치의 유의미한 변경을 대기합니다.
        참고: 위치 업데이트는 오직 완전히 활성화되고 visible한 문서에만 전달됨
      3. 위치 획득successCallback, errorCallback, options, watchId를 전달하며 대기합니다.

6.6 위치 획득

위치 획득을 하려면, PositionCallback successCallback, PositionErrorCallback? errorCallback, PositionOptions options, 그리고 선택적으로 watchId를 전달합니다.

  1. watchId가 전달되었고 this[[watchIDs]]watchId를 포함하지 않으면, 이 알고리즘을 종료합니다.
  2. acquisitionTime에 현재 시점을 나타내는 새로운 EpochTimeStamp를 할당합니다.
  3. timeoutTimeacquisitionTimeoptions.timeout을 더한 값을 할당합니다.
  4. cachedPositionthis[[cachedPosition]]를 할당합니다.
  5. 구현 특화 timeout 태스크를 timeoutTime에 만료되도록 생성하며, 만료 전까지 장치의 위치를 획득하기 위해 다음 단계를 실행합니다:
    1. permission현재 권한 상태"geolocation"으로 조회한 결과를 할당합니다.
    2. permission이 "denied"라면:
      1. timeout을 중지합니다.
      2. 사용자 또는 시스템이 권한 거부 실패 케이스 단계를 수행합니다.
    3. permission이 "granted"라면:
      1. 에뮬레이션된 위치를 사용할지 확인하려면 다음 단계를 실행합니다:
        1. emulatedPositionDataget emulated position datathis를 전달한 결과를 할당합니다.
        2. emulatedPositionData가 null이 아니라면:
          1. emulatedPositionDataGeolocationPositionError 타입이라면:
            1. 오류 콜백 호출errorCallbackemulatedPositionData.code를 전달합니다.
            2. 이 알고리즘을 종료합니다.
          2. positionGeolocationPositionemulatedPositionData, acquisitionTimeoptions.enableHighAccuracy를 전달하여 생성합니다.
          3. 태스크 큐에 등록하여 geolocation 태스크 소스에서 successCallback 콜백 호출 시 « position » 및 "report"를 전달합니다.
          4. 이 알고리즘을 종료합니다.
      2. position을 null로 설정합니다.
      3. cachedPosition이 null이 아니고 options.maximumAge가 0보다 크면:
        1. cacheTimeacquisitionTime에서 options.maximumAge 값을 뺀 결과를 할당합니다.
        2. cachedPositiontimestamp 값이 cacheTime보다 크고, cachedPosition.[[isHighAccuracy]]options.enableHighAccuracy와 같다면, positioncachedPosition으로 설정. :
          1. 태스크 큐에 등록하여 geolocation 태스크 소스에서 successCallback 콜백 호출 시 « cachedPosition » 및 "report"를 전달합니다.
          2. 이 알고리즘을 종료합니다.
      4. 그 밖에 positioncachedPosition이 아닌 경우, 시스템에서 위치 데이터를 획득하며 필요시 options.enableHighAccuracy 값을 고려합니다.
      5. 획득 중 timeout이 만료되거나 위치 획득에 실패하면:
        1. timeout을 중지합니다.
        2. 실패 처리로 이동합니다.
        3. 이 알고리즘을 종료합니다.
      6. 시스템에서 위치 데이터 획득에 성공하면:
        1. positionData에 획득한 위치 데이터를 기반으로 아래 name/value 쌍을 가진 map을 할당합니다:
          "longitude"
          double 타입이며, [WGS84] 좌표계 기준으로 지구 표면의 경도(도)를 나타냅니다. 경도는 본초자오선 기준 동/서 방향 거리를 측정합니다.
          "altitude"
          double? 타입이며, [WGS84] 기준 타원체 위의 고도(미터)를 나타내며, 제공되지 않을 경우 null입니다. 고도는 해수면 기준 높이를 측정합니다.
          "accuracy"
          음이 아닌 double 타입이며, 95% 신뢰 구간(미터)로 정확도를 나타냅니다. 정확도는 측정 좌표가 실제 위치와 얼마나 가까운지 나타냅니다.
          "altitudeAccuracy"
          음이 아닌 double? 타입이며, 제공되지 않을 경우 null이며, 95% 신뢰 구간(미터)로 고도 정확도를 나타냅니다.
          "speed"
          음이 아닌 double? 타입이며, 제공되지 않을 경우 null이며, 속도(초당 미터)를 나타냅니다.
          "heading"
          double? 타입이며, 제공되지 않거나 장치가 정지 상태일 경우 null이며, 방향(도, 진북 기준)을 나타냅니다.
        2. positionGeolocationPositionpositionData, acquisitionTime, options.enableHighAccuracy를 전달하여 생성합니다.
        3. this[[cachedPosition]]position으로 설정합니다.
        1. positionGeolocationPositionacquisitionTime, options.enableHighAccuracy를 전달하여 생성합니다.
        2. this[[cachedPosition]]position으로 설정합니다.
      7. timeout을 중지합니다.
      8. 태스크 큐에 등록하여 geolocation 태스크 소스에서 successCallback 콜백 호출 시 « position » 및 "report"를 전달합니다.
    실패 처리:
    • 위치 획득에 실패하면, 조건에 따라 아래 중 하나를 수행합니다:
      사용자 또는 시스템이 권한 거부:

      오류 콜백 호출errorCallbackPERMISSION_DENIED를 전달합니다.

      참고: 브라우저 권한 VS OS 권한
      타임아웃 만료:
      오류 콜백 호출errorCallbackTIMEOUT를 전달합니다.
      데이터 획득 오류 또는 기타 이유:
      오류 콜백 호출errorCallbackPOSITION_UNAVAILABLE를 전달합니다.

6.7 오류 콜백 호출

오류 콜백 호출 지시를 받으면, PositionErrorCallback? callbackunsigned short code가 주어집니다:

  1. callback이 null이면, 리턴합니다.
  2. errorGeolocationPositionError의 새 인스턴스를 생성하여 code 속성을 code로 초기화합니다.
  3. 태스크 큐 등록하여 geolocation 태스크 소스에서 callback을 « error » 및 "report"로 호출합니다.

7. PositionOptions 딕셔너리

WebIDLdictionary PositionOptions {
  boolean enableHighAccuracy = false;
  [Clamp] unsigned long timeout = 0xFFFFFFFF;
  [Clamp] unsigned long maximumAge = 0;
};

7.1 enableHighAccuracy 멤버

enableHighAccuracy 멤버는 애플리케이션이 가장 정확한 위치 데이터를 받고 싶다는 힌트를 제공합니다. 이 멤버의 목적은 애플리케이션이 고정밀 위치 정보가 필요하지 않음을 구현에 알리고, 따라서 구현체가 많은 전력을 소모하는 위치 제공자(GPS 등) 사용을 피할 수 있음을 허용하는 것입니다.

참고: enableHighAccuracy 주의사항

7.2 timeout 멤버

timeout 멤버는 위치 획득이 만료되기 전까지 허용되는 최대 대기 시간을 밀리초 단위로 지정합니다.

참고: timeout 계산 시점

문서가 visible 상태가 될 때까지, 그리고 API 사용 권한 획득에 소요된 시간은 timeout 멤버에 포함되지 않습니다. timeout 멤버는 위치 획득이 시작될 때만 적용됩니다.

참고: 즉시 취소

7.3 maximumAge 멤버

maximumAge 멤버는 웹 애플리케이션이 지정한 시간(밀리초) 이내의 캐시된 위치를 허용할 수 있음을 나타냅니다.

8. GeolocationPosition 인터페이스

WebIDL[Exposed=Window, SecureContext]
interface GeolocationPosition {
  readonly attribute GeolocationCoordinates coords;
  readonly attribute EpochTimeStamp timestamp;
  [Default] object toJSON();
};

8.1 coords 속성

coords 속성은 지리적 좌표를 포함합니다.

8.2 timestamp 속성

timestamp 속성은 장치의 지리적 위치가 획득된 시간을 나타냅니다.

8.3 toJSON() 메서드

toJSON() 메서드는 GeolocationPosition 객체의 JSON 표현을 반환합니다.

8.4 내부 슬롯

GeolocationPositionError의 인스턴스는 아래 표의 내부 슬롯과 함께 생성됩니다:

내부 슬롯 설명
[[isHighAccuracy]] boolean 타입이며, enableHighAccuracy 멤버의 값을 GeolocationPosition생성될 때 기록합니다.

8.5 태스크 소스

본 명세에서 아래의 태스크 소스를 정의합니다.

geolocation 태스크 소스
본 명세에서는 PositionCallbackPositionErrorCallback를 비동기로 큐잉할 때 사용합니다(위치 요청 수행 시).

9. GeolocationCoordinates 인터페이스

WebIDL[Exposed=Window, SecureContext]
interface GeolocationCoordinates {
  readonly attribute double accuracy;
  readonly attribute double latitude;
  readonly attribute double longitude;
  readonly attribute double? altitude;
  readonly attribute double? altitudeAccuracy;
  readonly attribute double? heading;
  readonly attribute double? speed;
  [Default] object toJSON();
};

9.1 latitude, longitude, accuracy 속성

The latitude and longitude attributes are geographic coordinates specified in decimal degrees. latitudelongitude 속성은 [WGS84] 기준 시스템의 실수(degree)로 위치를 나타냅니다. accuracy 속성은 위치의 정확도 반경을 미터 단위로 나타냅니다.

9.2 altitude, altitudeAccuracy 속성

altitude 속성은 [WGS84] 타원체 기준 미터 단위의 위치 높이를 나타냅니다.

altitudeAccuracy 속성은 고도 정확도를 미터 단위(예: 10미터)로 나타냅니다.

9.3 heading 속성

heading 속성은 호스트 장치의 이동 방향을 나타내며, 0° ≤ heading < 360°로 진북 기준 시계 방향(도 단위)입니다.

9.4 speed 속성

speed 속성은 호스트 장치의 현재 수평 속도의 크기를 초당 미터 단위로 나타냅니다.

9.5 toJSON() 메서드

toJSON() 메서드는 GeolocationCoordinates 객체의 JSON 표현을 반환합니다.

9.6 GeolocationPosition 생성

새로운 GeolocationPositionmap positionData, EpochTimeStamp timestamp, 그리고 boolean isHighAccuracy로 다음 단계를 통해 생성됩니다:

  1. coords를 새로 생성한 GeolocationCoordinates 인스턴스로 둡니다.
  2. keyvalue에 대해 positionData에서:
    1. coordskey 이름의 속성을 value로 설정합니다.
  3. 다음과 같이 초기화된 GeolocationPosition 인스턴스를 새로 생성하여 반환합니다: coords 속성은 coords로, timestamp 속성은 timestamp로 초기화하며, [[isHighAccuracy]] 내부 슬롯은 isHighAccuracy로 설정합니다.

새로운 GeolocationPositionEpochTimeStamp timestamp와 boolean isHighAccuracy로 다음 단계를 통해 생성됩니다:

  1. coords를 새로 생성한 GeolocationCoordinates 인스턴스로 둡니다:
    1. coordlatitude 속성을 십진수의 지리 좌표로 초기화합니다.
    2. coordlongitude 속성을 십진수의 지리 좌표로 초기화합니다.
    3. coordaccuracy 속성을 0 이상의 실수로 초기화합니다. 값은 위도와 경도 값에 대해 95% 신뢰수준에 해당해야 합니다.
    4. coordaltitude 속성을 [WGS84] 타원체 위의 미터 단위로 초기화하거나, 구현에서 고도 정보를 제공할 수 없는 경우 null로 설정합니다.
    5. coordaltitudeAccuracy 속성을 0 이상의 실수로, 또는 구현에서 고도 정보를 제공할 수 없는 경우 null로 초기화합니다. 고도 정확도가 제공되면 95% 신뢰수준에 해당해야 합니다.
    6. coordspeed 속성을 0 이상의 실수 또는 구현에서 속도 정보를 제공할 수 없는 경우 null로 초기화합니다.
    7. coordheading 속성을 도(degree) 단위로 초기화하거나, 구현에서 heading 정보를 제공할 수 없는 경우 null로 설정합니다. 호스팅 장치가 정지 상태(즉, speed 속성 값이 0)라면 headingNaN으로 초기화합니다.
  2. 다음과 같이 초기화된 GeolocationPosition 인스턴스를 새로 생성하여 반환합니다: coords 속성은 coords로, timestamp 속성은 timestamp로 초기화하며, [[isHighAccuracy]] 내부 슬롯은 isHighAccuracy로 설정합니다.

10. GeolocationPositionError 인터페이스

WebIDL[Exposed=Window]
interface GeolocationPositionError {
  const unsigned short PERMISSION_DENIED = 1;
  const unsigned short POSITION_UNAVAILABLE = 2;
  const unsigned short TIMEOUT = 3;
  readonly attribute unsigned short code;
  readonly attribute DOMString message;
};

10.1 상수

PERMISSION_DENIED (숫자 값 1)
위치 요청이 사용자가 API 사용을 거부했거나 혹은 비보안 컨텍스트에서 요청이 이루어진 경우 실패했습니다.
POSITION_UNAVAILABLE (숫자 값 2)
위치 획득에 실패했습니다.
TIMEOUT (숫자 값 3)
timeout 멤버에 지정된 시간이 경과하여 사용자 에이전트가 성공적으로 위치를 획득하지 못했습니다.

10.2 code 속성

code 속성은 초기화된 값을 반환합니다. (가능한 값은 10.1 상수를 참고하세요.)

10.3 message 속성

message 속성은 code 속성에 대한 개발자 친화적 텍스트 설명입니다.

참고: 사용자에게 .message를 보여주지 마세요!

11. 권한 정책

이 명세서는 토큰 문자열 "geolocation"으로 식별되는 정책 제어 기능을 정의합니다. 이에 대한 기본 허용 목록'self'입니다.

12. 에뮬레이션

사용자 에이전트 자동화와 애플리케이션 테스트 목적을 위해 이 문서는 지리 위치 에뮬레이션을 정의합니다.

최상위 탐색 객체는 연관된 에뮬레이션 위치 데이터를 가지며, 이는 GeolocationCoordinates, GeolocationPositionError 또는 null을 나타내는 데이터입니다. 초기값은 null입니다.

에뮬레이션 위치 데이터 설정을 위해, navigable navigableemulatedPositionData가 주어졌을 때:

  1. emulatedPositionData가 null, GeolocationCoordinates 또는 GeolocationPositionError 중 하나임을 단언합니다.
  2. traversablenavigable최상위 탐색 객체로 정합니다.
  3. traversable가 null이 아니면:
    1. traversable의 연관된 에뮬레이션 위치 데이터emulatedPositionData로 설정합니다.
    2. 사용자 에이전트는 반드시 이것을 지리 위치의 중요한 변화 대기 단계에서 "중요한 변화"로 간주해야 합니다.

에뮬레이션 위치 데이터 가져오기를 위해, Geolocation geolocation이 주어졌을 때:

  1. navigablegeolocation관련 글로벌 객체연관 Document노드 네비게이블로 정합니다.
  2. navigable가 null이면, null을 반환합니다.
  3. traversablenavigable최상위 탐색 객체로 정합니다.
  4. traversable가 null이면, null을 반환합니다.
  5. traversable의 연관된 에뮬레이션 위치 데이터를 반환합니다.

13. 적합성

비규범적으로 표시된 섹션뿐만 아니라, 이 명세서의 모든 저작 지침, 다이어그램, 예시, 주석도 모두 비규범적입니다. 이 명세서의 그 외 모든 내용은 규범적입니다.

이 문서에서 MAY, MUST, RECOMMENDED, SHOULD와 같은 키워드는 BCP 14 [RFC2119] [RFC8174] 에서 설명된 대로 해석되어야 하며, 오직 이와 같이 대문자로 표시된 경우에만 해당됩니다.

A. IDL 색인

WebIDLpartial interface Navigator {
  [SameObject] readonly attribute Geolocation geolocation;
};

[Exposed=Window]
interface Geolocation {
  undefined getCurrentPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  long watchPosition (
    PositionCallback successCallback,
    optional PositionErrorCallback? errorCallback = null,
    optional PositionOptions options = {}
  );

  undefined clearWatch (long watchId);
};

callback PositionCallback = undefined (
  GeolocationPosition position
);

callback PositionErrorCallback = undefined (
  GeolocationPositionError positionError
);

dictionary PositionOptions {
  boolean enableHighAccuracy = false;
  [Clamp] unsigned long timeout = 0xFFFFFFFF;
  [Clamp] unsigned long maximumAge = 0;
};

[Exposed=Window, SecureContext]
interface GeolocationPosition {
  readonly attribute GeolocationCoordinates coords;
  readonly attribute EpochTimeStamp timestamp;
  [Default] object toJSON();
};

[Exposed=Window, SecureContext]
interface GeolocationCoordinates {
  readonly attribute double accuracy;
  readonly attribute double latitude;
  readonly attribute double longitude;
  readonly attribute double? altitude;
  readonly attribute double? altitudeAccuracy;
  readonly attribute double? heading;
  readonly attribute double? speed;
  [Default] object toJSON();
};

[Exposed=Window]
interface GeolocationPositionError {
  const unsigned short PERMISSION_DENIED = 1;
  const unsigned short POSITION_UNAVAILABLE = 2;
  const unsigned short TIMEOUT = 3;
  readonly attribute unsigned short code;
  readonly attribute DOMString message;
};

B. 색인

B.1 이 명세서에서 정의한 용어

B.2 참조로 정의된 용어

C. 감사의 글

이 절은 비규범적입니다.

이 명세서는 Aza Raskin의 연구, Google Gears 지리 위치 API, LocationAware.org 등 업계의 이전 작업을 기반으로 합니다.

Alec Berntson, Alissa Cooper, Steve Block, Greg Bolsinga, Lars Erik Bolstad, Aaron Boodman, Dave Burke, Chris Butler, Max Froumentin, Shyam Habarakada, Marcin Hanclik, Ian Hickson, Brad Lassey, Angel Machin, Cameron McCormack, Daniel Park, Stuart Parmenter, Olli Pettay, Chris Prince, Arun Ranganathan, Carl Reed, Thomas Roessler, Dirk Segers, Allan Thomson, Martin Thomson, Doug Turner, Erik Wilde, Matt Womer, Mohamed Zergaoui에게도 감사를 전합니다.

D. 변경 기록

이 절은 비규범적입니다.

2021년 최초 공개 작업 초안 이후 Geolocation에는 다음과 같은 규범적 변경이 있었습니다:

2016년 2판 출판 이후 이 명세서에는 다음과 같은 실질적 변경이 있었습니다:

전체 변경 내역은 커밋 기록을 참조하세요.

E. 참고 문헌

E.1 규범적 참고 문헌

[hr-time]
고해상도 시간(High Resolution Time). Yoav Weiss. W3C. 2024년 11월 7일. W3C 작업 초안. URL: https://www.w3.org/TR/hr-time-3/
[html]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra 표준. Anne van Kesteren; Domenic Denicola. WHATWG. 현행 표준. URL: https://infra.spec.whatwg.org/
[Permissions]
Permissions. Marcos Caceres; Mike Taylor. W3C. 2025년 6월 24일. W3C 작업 초안. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
Permissions Policy. Ian Clelland. W3C. 2025년 8월 6일. W3C 작업 초안. URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
RFC에서 요구 사항 수준을 표시하기 위해 사용하는 키워드(Key words for use in RFCs to Indicate Requirement Levels). S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119 키워드에서 대소문자 모호성(Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words). B. Leiba. IETF. 2017년 5월. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[webidl]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/
[WGS84]
세계 측지 시스템 1984 (WGS 84). 미국 국가 측지 정보국 Office of Geomatics. 2008년. URL: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84