GeolocationAPI 調査その1
ちょいとGeolocationAPIを使うことになったので、調べた事をメモする。
本家は下記。
Geolocation API Specification
日本語でまとめてある記事があるので参考にする。
JavaScriptで位置情報を取得する方法(Geolocation API)
使用するAPI
- navigator.geolocation.getCurrentPosition
- navigator.geolocation.watchPosition
共通の仕様
どちらのAPIを使うにしても、下記の形で使用する。本家より。
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, option);
位置情報の取得に成功した時は successCallback が呼び出される。失敗した時は errorCallback。あとはオプションの指定が可能。
getCurrentPosition と watchPosition の違いは、一度(呼ばれたとき)しか動かないか、その後も一定間隔で動き続けるかの違い。
getCurrentPosition は呼び出された時しか動かず、watchPosition は一定間隔で動き続ける。カーナビのようにリアルタイムで位置情報を更新する場合は watchPosition を使うことになるのかな。
watchPosition の一定間隔はオプションで指定する事になるのだろうか。おそらくオプションに指定出来る物は getCurrentPosition と watchPosition で変わってきそう。
watchPosition の動きを止める場合、IDを指定して止める。そのため、watchPosition は戻り値にIDを返すようだ。以下が本家のサンプルコード。
function scrollMap(position) { // Scrolls the map so that it is centered at (position.coords.latitude, position.coords.longitude). } function handleError(error) { // Update a div element with error.message. } var watchId = navigator.geolocation.watchPosition(scrollMap, handleError);
※ この例ではオプションを省略している。
上記を見ればわかるが、successCallback として scrollMap関数を渡している。scrollMap関数は、引数として position を受け取る。この中に位置情報等が保存されている。
仕様を見てみると
interface Position { readonly attribute Coordinates coords; readonly attribute DOMTimeStamp timestamp; };
DOMTimeStamp は多分そのままの意味だろうけど、Coordinatesってなんだろ・・?
interface Coordinates { readonly attribute double latitude; readonly attribute double longitude; readonly attribute double? altitude; readonly attribute double accuracy; readonly attribute double? altitudeAccuracy; readonly attribute double? heading; readonly attribute double? speed; };
ほむほむ。色々持ってる。double?とか言う怪しい型は無視して全プロパティの説明を読んでみる。
プロパティ | 説明 |
---|---|
latitude | 緯度 |
longitude | 軽度 |
altitude | 高さ(メートル単位) |
accuracy | 緯度・軽度の精度(メートル単位) |
altitudeAccuracy | 高さの精度(メートル単位) |
heading | 方角。0〜360度。0を北とし、時計のように見る |
speed | 速度(メートル/秒) |
ふーむ、北緯と南緯はどうやって表現してるんだろうと思ったら、マイナスで表現すると、下記に書いてあった。なるほど。
JavaScriptで位置情報を取得する方法(Geolocation API)
とりあえず基本はこんな感じ。