지리 위치

W3C 후보 권고안 스냅샷

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2026/CR-geolocation-20260326/
최신 게시 버전:
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 표준 및 초안 색인에서 확인할 수 있습니다.

Geolocation은 W3C 권고안(Recommendation)으로 2022년 9월 1일에 발표되었습니다. 2026년 3월에 작업 그룹이 실질적인 변경 사항에 더 효율적으로 반복하고 새로운 기능을 계속 추가할 수 있도록 명세가 후보 권고안(Candidate Recommendation)으로 다시 돌아왔습니다.

공개 당시, 디바이스 및 센서 작업 그룹은 여전히 2020년 9월 15일 자 W3C 특허 정책에 따라 운영되고 있습니다.

이 문서는 디바이스 및 센서 작업 그룹웹 애플리케이션 작업 그룹권고안 경로(Recommendation track)를 사용하여 후보 권고안 스냅샷(Candidate Recommendation Snapshot)으로 발행한 것입니다.

후보 권고안(Candidate Recommendation)으로서의 발행은 W3C 및 그 회원에 의한 승인 또는 지지를 의미하지 않습니다. 후보 권고안 스냅샷은 광범위한 검토(wide review)를 받았으며, 구현 경험을 수집하고, 작업 그룹 멤버들이 로열티 프리 라이선스 제공을 약속한 상태입니다.

이 후보 권고안은 2026년 4월 31일보다 일찍 권고안(Recommendation)으로 진행되지 않을 예정입니다.

이 문서는 아래 정책에 따라 운영되는 그룹들이 작성하였습니다: W3C 특허 정책. W3C공개 특허 공개 목록(디바이스 및 센서 작업 그룹)공개 특허 공개 목록(웹 애플리케이션 작업 그룹)을 각각의 산출물에 대해 유지하고 있습니다. 이 페이지들에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 개별적으로 특정 특허가 필수 청구(essential claim)를 포함한다고 인지한 경우, W3C 특허 정책 6항에 따라 그 정보를 공개해야 합니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

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

지리 위치는 구현을 호스팅하는 장치와만 연관된 위치 정보에 대한 높은 수준의 인터페이스를 정의합니다. 위치 정보의 일반적인 출처에는 전역 위치 결정 시스템(GPS)과 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 응답 헤더를 지정하여 퍼스트파티 컨텍스트에서 API를 비활성화할 수 있습니다:

권한 정책를 참조하여 Permissions-Policy HTTP 헤더에 대한 자세한 정보를 확인하십시오.

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

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

이 명세서에서 정의한 API는 호스팅 장치의 지리적 위치를 검색하는 데 사용됩니다. 거의 모든 경우에 이 정보는 장치 사용자의 위치도 노출하므로 사용자의 개인정보를 침해할 가능성이 있습니다.

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

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

Note: 개발자가 이 민감한 데이터를 다룰 때의 책임

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

수신자는 필요한 경우에만 위치 정보를 요청해야 하며, 제공받은 작업을 위해서만 위치 정보를 사용해야 합니다. 작업이 완료되면 사용자에게 명시적으로 보관을 허용받지 않는 한 위치 정보를 폐기해야 합니다. 수신자는 또한 이 정보를 무단 접근으로부터 보호하기 위한 조치를 취해야 합니다. 위치 정보가 저장되는 경우, 사용자가 이 정보를 업데이트하고 삭제할 수 있어야 합니다.

위치 정보의 수신자는 사용자의 명시적 허가 없이 위치 정보를 재전송하는 것을 삼가야 합니다. 재전송할 때는 주의가 필요하며 암호화 사용을 권장합니다.

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

3.3 구현 고려사항

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

구현자는 사용자 개인정보를 부정적으로 영향을 줄 수 있는 다음과 같은 측면을 고려하는 것이 권장됩니다: 특정 경우에 사용자는 의도치 않게 사용자 에이전트에 위치를 웹사이트에 공개하도록 권한을 부여할 수 있습니다. 다른 경우에는 특정 URL에 호스팅된 콘텐츠가 변경되어 이전에 부여된 위치 권한이 사용자 관점에서 더 이상 적용되지 않을 수 있습니다. 또는 사용자가 단순히 마음을 바꿀 수도 있습니다.

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

3.4 API 사용 권한 확인

지리 위치기본 강력 기능으로 식별되며 이름"geolocation"입니다.

API 사용 권한을 확인할 때, 사용자 에이전트는 시간 기반의 권한 유효 기간(예: "24시간", "1주")을 제안할 수 있으며 또는 권한을 무기한으로 기억하도록 선택할 수 있습니다. 그러나 사용자 에이전트는 권한의 유효 기간을 단일 세션으로 제한하는 것을 우선시할 것을 권장합니다: 예를 들어 이는 realm이 소멸될 때까지, 최종 사용자가 다른 곳으로 이동할 때까지, 또는 해당 브라우저 탭이 닫힐 때까지 등으로 구현될 수 있습니다.

4. 보안 고려사항

게시 시점에는 Geolocation과 관련된 보안 고려사항이 없습니다. 그러나, 독자는 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입니다. 이는 마지막으로 획득한 위치를 가리키는 참조로, 캐시 역할을 합니다. 사용자 에이전트는 MAY 언제든지 어떤 이유로든 [[cachedPosition]]를 null로 재설정하여 삭제할 수 있습니다.
[[watchIDs]] 리스트로 초기화되며, unsigned long 항목들의 아이템입니다.

6.2 getCurrentPosition() 메서드

getCurrentPosition(successCallback, errorCallback, options) 메서드의 절차는 다음과 같습니다:

  1. If this's relevant global object's associated Document is not fully active:
    1. 오류와 함께 콜백 호출 errorCallbackPOSITION_UNAVAILABLE를 전달합니다.
    2. 이 알고리듬을 종료합니다.
  2. 위치 요청을 수행하여 this, successCallback, errorCallback, 및 options을 전달합니다.

6.3 watchPosition() 메서드

watchPosition(successCallback, errorCallback, options) 메서드의 절차는 다음과 같습니다:

  1. If this's relevant global object's associated Document is not fully active:
    1. 오류와 함께 콜백 호출하여 errorCallbackPOSITION_UNAVAILABLE를 전달합니다.
    2. 0을 반환합니다.
  2. 양의 값인 구현 정의 watchId를 정의합니다.
  3. 추가하여 watchIdthis[[watchIDs]]에 넣습니다.
  4. 위치 요청을 수행하여 this, successCallback, errorCallback, options, 및 watchId를 전달합니다.
  5. watchId를 반환합니다.

6.4 clearWatch() 메서드

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

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

6.5 위치 요청

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

  1. Let watchIDs be geolocation's [[watchIDs]].
  2. Let document be the geolocation's 관련 전역 객체(relevant global object)'s 연관된 Document.
  3. If document is not 사용이 허용(allowed to use)된 "geolocation" 기능:
    1. If watchId was passed, 제거(remove) watchIdwatchIDs에서.
    2. 오류와 함께 콜백 호출하여 errorCallbackPERMISSION_DENIED를 전달합니다.
    3. 이 알고리즘을 종료합니다.
  4. If geolocation's 환경 설정 객체(environment settings object)비보안 컨텍스트(non-secure context)인 경우:
    1. If watchId was passed, 제거(remove) watchIdwatchIDs에서.
    2. 오류와 함께 콜백 호출하여 errorCallbackPERMISSION_DENIED를 전달합니다.
    3. 이 알고리즘을 종료합니다.
  5. If document's visibility state가 "hidden"인 경우, 다음의 페이지 가시성 변경 단계(page visibility change steps)가 실행될 때까지 대기합니다:
    1. 단언(Assert): documentvisibility state가 "visible"임을 단언합니다.
    2. 아래의 다음 단계로 계속합니다.
  6. Let descriptor be a new PermissionDescriptor이며, 그 name"geolocation"입니다.
  7. 병렬로(In parallel):
    1. Set permission to 권한 사용 요청(request permission to use) descriptor로 설정합니다.
    2. If permission is "denied", then:
      1. If watchId was passed, 제거(remove) watchIdwatchIDs에서.
      2. 오류와 함께 콜백 호출하여 errorCallbackPERMISSION_DENIED를 전달합니다.
      3. 이 알고리즘을 종료합니다.
    3. 다음으로 위치 획득(acquire a position)을 대기하며, successCallback, errorCallback, options, 및 watchId를 전달합니다.
    4. If watchId was not passed, terminate this algorithm.
    5. While watchIDs contains watchId:
      1. 지리적 위치의 유의미한 변화(Wait for a significant change of geographic position)를 대기합니다. 무엇이 유의미한 위치 변화인지는 구현에 맡깁니다. 사용자 에이전트는 위치 변화가 보고되는 빈도를 제한할 수 있으며(User agents MAY), 사용자 에이전트는 에뮬레이션된 위치 데이터 설정(set emulated position data)를 유의미한 변화로 간주해야 합니다(User agents MUST 고려).
      2. If document is not 완전히 활성화(fully active)이거나 visibility state가 "visible"이 아니면, 이전 단계로 돌아가 다시 지리적 위치의 유의미한 변화 대기를 수행합니다.
        참고: 위치 업데이트는 완전히 활성화된 가시적 문서에만 전달됩니다
      3. 다음으로 위치 획득(acquire a position)을 대기하며 successCallback, errorCallback, options, 및 watchId를 전달합니다.

6.6 위치 획득

위치 획득을 수행하려면, PositionCallbacksuccessCallback, PositionErrorCallback? errorCallback, PositionOptionsoptions, 및 선택적 watchId를 전달합니다.

  1. If watchId was passed and this's [[watchIDs]]포함(contain)하지 않는 watchId인 경우, 이 알고리즘을 종료합니다.
  2. Let acquisitionTime be a new EpochTimeStamp 현재 시각을 나타내도록 합니다.
  3. Let timeoutTime be the sum of acquisitionTime and options.timeout.
  4. Let cachedPosition be this's [[cachedPosition]].
  5. 구현 특유의 timeout 작업을 생성하여 timeoutTime에 만료되도록 하며, 그 기간 동안 장치의 위치를 획득하기 위해 다음 단계를 실행합니다:
    1. Let permission be 현재 권한 상태 가져오기(get the current permission state)"geolocation"의 상태를 얻습니다.
    2. If permission is "denied":
      1. timeout을 중지합니다.
      2. 사용자 또는 시스템 권한 거부 실패 처리 단계를 수행합니다.
    3. If permission is "granted":
      1. 에뮬레이션된 위치를 사용해야 하는지 다음 단계를 실행하여 확인합니다:
        1. Let emulatedPositionData be 에뮬레이션된 위치 데이터 가져오기(get emulated position data)를 실행하여 this를 전달합니다.
        2. If emulatedPositionData is not null:
          1. If emulatedPositionData is a GeolocationPositionError인 경우:
            1. 오류와 함께 콜백 호출하여 errorCallbackemulatedPositionData.code를 전달합니다.
            2. 이 알고리즘을 종료합니다.
          2. Let position be 새로운 GeolocationPosition를 생성하여 emulatedPositionData, acquisitionTimeoptions.enableHighAccuracy를 전달합니다.
          3. 작업을 대기열에 추가(Queue a task)하고, geolocation 작업 소스에서 호출(invokes)하여 successCallback를 « position » 및 "report"와 함께 호출합니다.
          4. 이 알고리즘을 종료합니다.
      2. position을 null로 둡니다.
      3. If cachedPosition is not null, and options.maximumAge가 0보다 큰 경우:
        1. Let cacheTime be acquisitionTime에서 options.maximumAge 값을 뺀 값으로 설정합니다.
        2. If cachedPosition's timestamp 값이 cacheTime보다 크고, cachedPosition[[isHighAccuracy]]optionsenableHighAccuracy와 동일하면:
          1. 작업을 대기열에 추가(Queue a task)하고, geolocation 작업 소스에서 호출(invokes)하여 successCallback를 « cachedPosition » 및 "report"와 함께 호출합니다.
          2. 이 알고리즘을 종료합니다.
      4. 그렇지 않고, positioncachedPosition이 아닌 경우, 기본 시스템으로부터 위치 데이터를 획득하려 시도합니다. 이때 획득 중에 options의 값을 선택적으로 고려합니다(enableHighAccuracy).
      5. If the timeout elapses during acquisition, or acquiring the device's position results in failure:
        1. timeout을 중지합니다.
        2. 실패 처리(dealing with failures)로 이동합니다.
        3. 이 알고리즘을 종료합니다.
      6. 시스템에서 위치 데이터를 성공적으로 획득하면:
        1. Let positionData be a 맵(map)으로서 획득된 위치 데이터에 기반한 다음 이름/값 쌍을 포함합니다:
          "accuracy"
          95% 신뢰구간을 미터 단위로 나타내는 비음수 double 값입니다. 정확도는 측정된 좌표가 실제 위치에 얼마나 근접한지를 나타냅니다.
          "altitude"
          [WGS84] 타원체에 대한 해발 미터 단위의 고도를 나타내는 double? 또는 사용 불가 시 null입니다. 고도는 해수면 위의 높이를 측정합니다.
          "altitudeAccuracy"
          고도 정확도를 나타내는 비음수 double? 또는 사용 불가 시 null로, 미터 단위의 95% 신뢰구간을 나타냅니다. 고도 정확도는 측정된 고도가 실제 고도에 얼마나 근접한지를 측정합니다.
          "heading"
          장치가 이동하는 방향을 진북(true north)에 대한 각도로 나타내는 double? 또는 사용 불가하거나 장치가 정지해 있을 경우 null입니다. 헤딩은 장치가 이동하는 방향을 측정합니다.
          "latitude"
          [WGS84] 좌표계를 사용하여 지구 표면의 위도를 도 단위로 나타내는 double입니다. 위도는 적도로부터 어느 정도 북쪽 또는 남쪽인지 측정합니다.
          "longitude"
          [WGS84] 좌표계를 사용하여 지구 표면의 경도를 도 단위로 나타내는 double입니다. 경도는 본초 자오선으로부터 동서 방향으로 얼마나 떨어져 있는지 측정합니다.
          "speed"
          초당 미터 단위의 속도를 나타내는 비음수 double? 또는 사용 불가 시 null입니다. 속도는 장치가 얼마나 빠르게 이동하는지를 측정합니다.
        2. position새로운 GeolocationPosition으로 설정하며, positionData, acquisitionTimeoptions.enableHighAccuracy를 전달합니다.
        3. this[[cachedPosition]]position으로 설정합니다.
      7. timeout을 중지합니다.
      8. 작업을 대기열에 추가(Queue a task)하고, geolocation 작업 소스에서 호출(invokes)하여 successCallback를 « position » 및 "report"와 함께 호출합니다.
    실패 처리(Dealing with failures):
    • 위치 획득이 실패하면, 실패에 해당하는 조건에 따라 다음 중 하나를 수행합니다:
      사용자 또는 시스템이 권한을 거부한 경우:

      오류와 함께 콜백 호출하여 errorCallbackPERMISSION_DENIED를 전달합니다.

      참고: 브라우저 권한 VS OS 권한
      시간 초과(Timeout elapsed):
      오류와 함께 콜백 호출하여 errorCallbackTIMEOUT를 전달합니다.
      데이터 획득 오류 또는 기타 이유:
      오류와 함께 콜백 호출하여 errorCallbackPOSITION_UNAVAILABLE를 전달합니다.

6.7 오류와 함께 콜백 호출

오류와 함께 콜백 호출하라는 지시를 받았을 때, 주어진 PositionErrorCallback? callbackunsigned shortcode가 주어지면:

  1. If callback is null, return.
  2. Let error be 새로 생성된 GeolocationPositionError 인스턴스이며, 그 code 속성은 code로 초기화됩니다.
  3. 작업을 대기열에 추가(Queue a task)하고, geolocation 작업 소스에서 다음 단계를 포함하는 작업을 대기열에 추가하여 호출(invokes)하여 callback을 « error » 및 "report"와 함께 호출합니다.

7. PositionOptions 딕셔너리

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

7.1 enableHighAccuracy 멤버

The enableHighAccuracy 멤버는 애플리케이션이 가능한 한 정확한 위치 데이터를 수신하기를 원한다는 힌트를 제공합니다. 이 멤버의 의도된 목적은 애플리케이션이 고정밀 지오로케이션(fixes)을 필요로 하지 않음을 구현부에 알릴 수 있게 하여, 구현부가 전력을 많이 소비하는 지오로케이션 제공자(예: GPS)를 사용하지 않도록 MAY 허용하는 것입니다.

참고: enableHighAccuracy에 대한 경고

7.2 timeout 멤버

The timeout 멤버는 위치를 획득하는 과정이 만료되기까지의 최대 시간을 밀리초 단위로 나타냅니다.

참고: 시간 초과는 언제 계산되나요?

문서가 가시 상태가 되기를 기다리는 시간과 API 사용 권한을 얻기 위해 대기하는 시간은 권한 확인에 포함되지 않습니다. timeout 멤버는 위치 획득이 시작될 때에만 적용됩니다.

참고: 즉시 취소

7.3 maximumAge 멤버

The maximumAge 멤버는 웹 애플리케이션이 캐시된 위치를 허용할 수 있음을 나타내며, 해당 위치의 연령(age)이 지정된 밀리초 시간보다 크지 않아야 합니다.

8. GeolocationPosition 인터페이스

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

8.1 coords 속성

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

8.2 timestamp 속성

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

8.3 toJSON() 메서드

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

8.4 내부 슬롯

GeolocationPosition 인스턴스는 다음 표에 나열된 내부 슬롯과 함께 생성됩니다:

Internal slot Description
[[isHighAccuracy]] boolean 값으로, 이 enableHighAccuracy 멤버가 이 GeolocationPosition생성될 때의 값을 기록합니다.

8.5 작업 소스

이 명세서에 의해 다음 task source가 정의됩니다.

The geolocation task source
이 명세서는 위치 요청을 수행할 때 비차단식의 PositionCallbackPositionErrorCallback을 대기열에 추가하는 데 이 task source를 사용합니다.

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 latitudelongitude 속성은 위치를 도 단위의 실수로 지정하며, [WGS84] 좌표계를 사용합니다.

The accuracy 속성은 위치 정확도 반경을 미터 단위로 나타냅니다.

9.2 altitudealtitudeAccuracy 속성

The altitude 속성은 위치의 높이를 나타내며, 이는 [WGS84] 타원체에 대한 해발 미터 단위로 지정됩니다.

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

9.3 heading 속성

The heading 속성은 호스팅 장치의 주행 방향을 나타내며, 단위는 도(degrees)이고 0° ≤ heading < 360° 범위에서 진북(true north)을 기준으로 시계 방향으로 측정됩니다.

9.4 speed 속성

The speed 속성은 호스팅 장치의 현재 속도의 수평 성분의 크기를 초당 미터(meters per second) 단위로 나타냅니다.

9.5 toJSON() 메서드

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

9.6 GeolocationPosition 구성

새로운 GeolocationPositionmap positionData, EpochTimeStamp timestamp 및 불리언 isHighAccuracy로 구성되며, 다음 단계를 수행합니다:

  1. Let coords be 새로 생성된 GeolocationCoordinates 인스턴스입니다.
  2. For each keyvalue in positionData:
    1. coords의 이름이 key인 속성을 value로 설정합니다.
  3. 새로 생성된 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. 에뮬레이션

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

top-level traversable에는 관련된 에뮬레이션된 위치 데이터가 있으며, 이는 초기값이 null인 GeolocationCoordinates, GeolocationPositionError 또는 null을 나타내는 데이터입니다.

에뮬레이션된 위치 데이터 설정을 수행하려면, 주어진 navigable navigableemulatedPositionData를 사용합니다:

  1. 단언: emulatedPositionData는 null, GeolocationCoordinates, 또는 GeolocationPositionError 중 하나여야 합니다.
  2. traversablenavigabletop-level traversable로 합니다.
  3. If traversable is not null:
    1. traversable의 관련된 에뮬레이션된 위치 데이터emulatedPositionData로 설정합니다.
    2. 사용자 에이전트는 이를 지리적 위치의 유의미한 변화 대기 단계에서 "유의미한 변화"로 간주해야 합니다.

에뮬레이션된 위치 데이터 가져오기를 수행하려면, 주어진 Geolocation geolocation에 대해:

  1. navigablegeolocation관련 전역 객체연관된 Documentnode navigable로 합니다.
  2. If navigable is null, null을 반환합니다.
  3. traversablenavigabletop-level traversable로 합니다.
  4. If traversable is null, null을 반환합니다.
  5. traversable의 관련된 에뮬레이션된 위치 데이터를 반환합니다.

13. 적합성

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

이 문서에서의 주요 단어 MAY, MUST, 및 RECOMMENDED는 모두 대문자로 표시된 경우에만, 그리고 그 경우에만, 다음에 설명된 대로 해석되어야 합니다. 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 Geolocation 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, and Mohamed Zergaoui에게 감사드립니다.

D. 변경 로그

이 섹션은 비규범적입니다.

Since publication as a W3C Recommendation in 2022, Geolocation has received the following normative changes:

Since First Public Working Draft in 2021, until it was published as a W3C Recommendation in 2022, Geolocation received the following normative changes:

Since publication of the Second Edition in 2016, this specification received the following substantive changes:

See the commit history for a complete list of changes.

E. 참고 문헌

E.1 규범 참조

[hr-time]
High Resolution Time. Yoav Weiss. W3C. 2 March 2026. W3C 작업 초안. URL: https://www.w3.org/TR/hr-time-3/
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[Permissions]
Permissions. Marcos Caceres; Mike Taylor. W3C. 6 October 2025. W3C 작업 초안. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
Permissions Policy. Ian Clelland. W3C. 6 October 2025. W3C 작업 초안. URL: https://www.w3.org/TR/permissions-policy-1/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[webidl]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/
[WGS84]
World Geodetic System 1984 (WGS 84). Office of Geomatics, National Geospatial Intelligence Agency. 2008. URL: https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84