[25] [DFN[[[Geolocation API]]]] は、現在の[[地理的位置]]を取得するための [[API]] です。

[26] 現在の[[経緯度]]、[[高度]]、移動の速度と方向が取得できます。
(ただし[[経緯度]]以外を取得できるか否かは[[プラットフォーム]]次第です。)

* 仕様書

[REFS[
- [52] [CITE@en[Geolocation API Specification]], [TIME[2019-11-24 18:38:51 +09:00]] <https://w3c.github.io/geolocation-api/>
-- [27] [CITE@en[Geolocation API Specification]], [TIME[2019-11-24 18:38:51 +09:00]] <https://w3c.github.io/geolocation-api/#api_description>
]REFS]

* API

[34] [[Geolocation API]] には次のものが含まれます。

[FIG(list middle)[ [63] [[Geolocation API]]
- [30] [CODE(DOMi)@en[[[Geolocation]]]]  [[インターフェイス]]
- [CODE[PositionCallback]] [[コールバック関数]]
- [CODE[PositionErrorCallback]] [[コールバック関数]]
- [CODE(DOMi)@en[PositionOptions]] [[辞書]]
- [33] [CODE(DOMi)@en[GeolocationPosition]] [[インターフェイス]]
- [36] [CODE(DOMi)@en[GeolocationCoordinates]] [[インターフェイス]]
- [37] [CODE(DOMi)@en[GeolocationPositionError]] [[インターフェイス]]
- [35] [CODE[navigator.geolocation]] (旧 [CODE(DOMi)@en[[[NavigatorGeolocation]]]])
]FIG]

* [CODE(DOMi)@en[Geolocation]]

[32] [CODE(DOMi)@en[[[Geolocation]]]] オブジェクトは [DFN[[CODE(JS)@en[[[navigator.geolocation]]]]]] [[プロパティー]]で取得できます。

[58] 
[CODE[Navigator]] [[オブジェクト]]は、
[F[[CODE[geolocation]]]]
を持ちます。
作成時に新しい 
[CODE[Geolocation]]
に設定されます。
その後変化しません。

[28] 
[CODE[Navigator]] [[インターフェイス]]の
[DFN[[CODE[geolocation]]]]
[[IDL属性]]の[[取得器]] [SRC[>>27]] は、
次のようにしなければ[MUST[なりません]]。

[FIG(steps)[
= [57] [[文脈オブジェクト]]の [F[[CODE[geolocation]]]] を返します。
[CODE[SameObject]] です。
]FIG]

[59] [[文書環境]]に[[晒され]]ています。[[ワーカー環境]]や[[ワークレット]]では利用できません。

-*-*-

[31] [DFN[[CODE(DOMi)@en[[[Geolocation]]]]]] [[インターフェイス]] [SRC[>>27]]
は、[[文書環境]]に[[晒され]]ています。
[CODE[navigator.geolocation]] [[プロパティー]]からのみ
[CODE[Geolocation]] [[オブジェクト]]にアクセスできます。

[61] 
[CODE[Geolocation]] [[オブジェクト]]には[[位置情報]]アクセスのための
[[API]]
があります。

[FIG(list middle)[ [62] [CODE[Geolocation]] [[インターフェイスメンバー]]
- [CODE(DOMm)@en[[[getCurrentPosition]]]]
- [CODE(DOMm)@en[[[watchPosition]]]]
- [CODE(DOMm)@en[[[clearWatch]]]]
]FIG]

[FIG(list members)[ [65] [CODE[Geolocation]] [[オブジェクト]]の状態

: [F[[[キャッシュされた[CODE[GeolocationPosition]]][watchPosition]]]] :
: [F[ハンドルの状態][watchPosition]] :

]FIG]

-*-*-

[60] [CODE[SecureContext]] 以外 ([[素のHTTP]])
でも [CODE[navigator.geolocation]]
と各[[メソッド]]は存在しますが、
意味のある操作はできません。
([[後方互換性]]のため残されているだけです。)


* 機能拡張

[53] 基本的な [[API]] の完成以後、何度か新機能の追加が提案され、
作業されていました。それらはいずれも成功せず、現在はメンテナンスのみが (それも消極的に)
なされています。

[54] かわって [[Geolocation Sensor]] が提案されています。

* 実装

[55] 
すべての主要 [[Webブラウザー]]が対応しています。

* 歴史

[1]
[CITE[LocationAPI - google-gears - Google Code]] ([CODE[2008-03-23 18:51:33 +09:00]] 版) <http://code.google.com/p/google-gears/wiki/LocationAPI>

[3]
[CITE@en[Geolocation API Specification]] ([CODE[2008-06-06 04:50:16 +09:00]] 版) <http://dev.w3.org/geo/api/spec-source.html>

[4]
[[W3C]] に [[Geolocation Working Group]] ができました。

[5] [CITE@en-us[Firefox 3.1 for developers - MDC]] ([TIME[2009-02-08 18:25:06 +09:00]] 版) <https://developer.mozilla.org/ja/Firefox_3.1_for_developers#.E6.96.B0.E3.81.97.E3.81.8F.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.9F.E6.A9.9F.E8.83.BD_2>

>Geolocation API がサポートされました、これは Web アプリケーションがユーザの現在の位置についての情報が提供される場合にその情報を保持することを可能にします。

[6] [CITE@en[Geolocation API Specification]] ([TIME[2009-03-26 02:05:11 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/geo/api/spec-source-v2.html?content-type=text/html;%20charset=utf-8>

[7] [CITE@en[Geolocation API Specification]] ([TIME[2009-07-07 23:53:37 +09:00]] 版) <http://www.w3.org/TR/2009/WD-geolocation-API-20090707/>

[9] [CITE[Re: Geolocation in the browser]] ([[Ian Hickson <ian@...>]] 著, [TIME[2008-11-26 00:54:55 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/16820>

[10] [CITE@en[Geolocation API Specification]] ([TIME[2008-12-19 01:46:59 +09:00]] 版) <http://www.w3.org/TR/2008/WD-geolocation-API-20081222/>

[13] [CITE@en[Geolocation API Specification]]
( ([TIME[2010-09-08 02:10:28 +09:00]] 版))
<http://www.w3.org/TR/2010/CR-geolocation-API-20100907/>

- [15] [CITE@en[Geolocation API Specification]] ([TIME[2011-06-28 14:23:06 +09:00]] 版) <http://dev.w3.org/geo/api/spec-source.html>

[8] [CITE@en[gist: 228509 - GitHub]]
([TIME[2010-08-09 08:08:45 +09:00]] 版)
<http://gist.github.com/228509>

[11] [CITE@ja[DoCoMo、au、SoftbankのGPSで位置情報をphpで取得する方法 :: 日々是作譜]]
([TIME[2009-05-18 17:51:46 +09:00]] 版)
<http://pgjapan.net/2008/07/get-location-info-in-gps-of-docomo-au-softbank.html>

[12] [CITE[Android の geolocation で GPS を使う方法 - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech]]
([TIME[2010-04-26 12:16:10 +09:00]] 版)
<http://subtech.g.hatena.ne.jp/cho45/20091007/1254894887>

[14] [CITE[携帯電話と位置情報 : 現在地の測位 (1) (Yahoo! JAPAN Tech Blog)]] ([TIME[2009-03-02 17:52:16 +09:00]] 版) <http://techblog.yahoo.co.jp/cat207/cat211/_1_1/>

(リダイレクト [TIME[2019-07-27T03:11:31.100Z]])
[CITE@ja[携帯電話と位置情報 : 現在地の測位 (1) - Yahoo! JAPAN Tech Blog]],
[TIME[2009年3月 2日][2009-03-02]]
([TIME[2019-07-27 12:11:16 +09:00]]) <https://techblog.yahoo.co.jp/mobile/_1_1/>

[16] [[Firefox]] ではなぜか結果が帰ってこない (どちらの callback も呼ばれない) 
ことがよくあります。 [CODE(DOMm)@en[[[watchPosition]]]] よりも
[CODE(DOMm)@en[[[getCurrentPosition]]]] の方がましな印象があります。
エラーが返ってくるときも再試行したらちゃんと結果が返ってきたりしそう。


[17] [CITE@en[W3C Geolocation API in IE9 - IEBlog - Site Home - MSDN Blogs]]
([TIME[2011-10-12 21:45:11 +09:00]] 版)
<http://blogs.msdn.com/b/ie/archive/2011/02/17/w3c-geolocation-api-in-ie9.aspx>

[18] [CITE@en[Geolocation API Specification Level 2]]
( ([TIME[2011-12-01 05:18:39 +09:00]] 版))
<http://www.w3.org/TR/2011/WD-geolocation-API-v2-20111201/>

[19] [CITE@en[Geolocation API Specification]]
( ([TIME[2012-05-09 23:32:03 +09:00]] 版))
<http://www.w3.org/TR/2012/PR-geolocation-API-20120510/>

[20] ( ([TIME[2013-11-13 01:50:27 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-archive/2013Nov/att-0007/W3C_TPAC_Breakout_Geolocation_November_2013.pdf>

[21] [CITE@en[Enhanced Geolocation]]
( ([TIME[2013-11-12 00:06:17 +09:00]] 版))
<http://gmandyam.github.io/enhanced-geolocation/>

[22] [CITE@en[Enhanced Geolocation]]
( ([TIME[2013-11-12 00:06:17 +09:00]] 版))
<http://gmandyam.github.io/enhanced-geolocation/>

[23] [CITE@en[Geolocation API Specification]]
( ([TIME[2013-10-22 23:10:42 +09:00]] 版))
<http://www.w3.org/TR/2013/REC-geolocation-API-20131024/>

[24] [CITE@en[Geolocation API Specification Level 2]]
( ([TIME[2011-11-02 11:46:03 +09:00]] 版))
<http://dev.w3.org/geo/api/spec-source-v2>

[2] [CITE@en[Requiring Authenticated Origins for Geolocation API's:  Status]]
([[Mandyam, Giridhar]] 著, [TIME[2015-02-26 08:51:53 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Feb/0423.html>

[FIG(quote)[
[FIGCAPTION[
[38] [CITE[Intent to deprecate: Insecure usage of powerful features - Google グループ]]
([TIME[2015-02-28 11:15:13 +09:00]] 版)
<https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/2LXKVWYkOus>
]FIGCAPTION]

> We want to start applying the concepts in https://w3c.github.io/webappsec/specs/powerfulfeatures/ to features that have already shipped and which do not meet the (new, not present at the time) requirements. 

]FIG]


[39] [CITE@en[Geolocation API Specification]]
( ([TIME[2015-05-28 14:31:20 +09:00]] 版))
<http://www.w3.org/TR/2015/PER-geolocation-API-20150528/>

[40] [CITE[W3C Geolocation Working Group]]
([TIME[2015-01-26 18:24:42 +09:00]] 版)
<http://www.w3.org/2008/geolocation/>

[41] [CITE@en[Geolocation WG Charter]]
([[Giridhar D. Mandyam]] 著, [TIME[2014-08-13 02:51:13 +09:00]] 版)
<http://www.w3.org/2014/04/geo-charter.html>

[42] [CITE@en[Geolocation API Specification 2nd Edition]]
([TIME[2016-11-08 21:27:30 +09:00]])
<https://www.w3.org/TR/2016/REC-geolocation-API-20161108/>

[43] [CITE@en[506435 - Geolocation disabled when Chrome is in the background or screen turns off. - chromium - Monorail]]
([TIME[2017-04-19 20:46:18 +09:00]])
<https://bugs.chromium.org/p/chromium/issues/detail?id=506435>

[44] [CITE@en[Privacy | Symantec]] ([TIME[2017-07-12 18:47:37 +09:00]]) <https://www.symantec.com/privacy>

[45] >>44 アクセスすると何もしなくても現在地取得の承認が要求されます。
[[プライバシーポリシー]]を読もうとしたら現在地を求められている。読者は試されていますな。

[46] [CITE@en[Moved to WICG. Cleaned up respec config]]
([[plehegar]]著, [TIME[2018-08-12 01:02:19 +09:00]])
<https://github.com/w3c/geolocation-api/commit/4cba5ba9bbdb49ca31362b83517db53e07fbb216>

[47] [CITE@en[Geolocation API Specification]]
([TIME[2018-08-12 01:03:41 +09:00]])
<https://w3c.github.io/geolocation-api/>

[48] [CITE@en[w3c/geolocation-api: W3C Geolocation API]]
([TIME[2019-03-26 15:21:14 +09:00]])
<https://github.com/w3c/geolocation-api>

[49] [CITE[Geolocation API Specification]]
([TIME[2019-03-18 21:22:13 +09:00]])
<https://w3c.github.io/geolocation-api/>

[FIG(quote)[
[FIGCAPTION[
[50] [CITE@en[Geolocation API Specification]]
([TIME[2019-03-18 21:22:13 +09:00]])
<https://w3c.github.io/geolocation-api/>
]FIGCAPTION]

> Warning
> Implementors need to be aware that the future work is now happening on the Geolocation Sensor specification in the Devices and Sensors Working Group.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[51] [CITE@en[Geolocation Sensor]]
([TIME[2019-03-12 19:02:34 +09:00]])
<https://w3c.github.io/geolocation-sensor/>
]FIGCAPTION]

> The work on the Geolocation API '''['''GEOLOCATION-API''']''' has been concluded, and as such, any new feature development is happening in this Geolocation Sensor specification. The two specifications are expected to coexist.

]FIG]


[64] 
[CITE[Geolocation API Specification]]
は開発停止して久しく、
最低限のメンテナンスしかなされていないまま年月が経過しています。
[[仕様書]]は古いスタイルの現在の基準では曖昧な規定の一部が継ぎ接ぎに近代化されている、
中途半端な形になっています。
新しく厳密な用語が使われる部分がある一方で、
曖昧で空気を読んで解釈するべき古い規定が残り、
[[アルゴリズム]]の形で明確な規定がありながらそこに含まれない[[猿パッチ]]的な規定が別にあったりと、
[[仕様書]]の構成としては混乱した状態にあります。
[TIME[2020-04-16T07:06:34.400Z]]

[29] [CITE@en['''['''wbs''']''' response to 'Call for Review: Devices and Sensors Working Group  Charter']]
([[Tantek Çelik via WBS Mailer]]著, [TIME[2020-06-20 02:03:02 +09:00]])
<https://lists.w3.org/Archives/Public/public-new-work/2020Jun/0012.html>