自作自演

Firefox の話題を中心に Web 関係の話も扱うつもりの雑記。だった。
zisakuzien.exblog.jp

Top

<   2013年 01月 ( 2 )   > この月の画像一覧

HTML と JavaScript と Android 4 で位置情報を取得した感想文

■環境
GALAXY S III SC-06D (Android 4.0.4)

■コードについて
Geolocation の利用 | MDN
Geolocation API-HTML5のAPI、および、関連仕様
などを参考に…

対応していないブラウザは
if (!navigator.geolocation) {
alert ("geolocation services are not supported by your browser.");
return;
}
みたいな感じで処理を分けておく。
(※ブログの都合で全角スペース入れてます…)

1回だけ取得なら navigator.geolocation.getCurrentPosition
定期的に監視するなら navigator.geolocation.watchPosition
を使う。
どちらも成功時に呼ばれるコールバック関数に
位置情報のオブジェクトが渡される。
失敗時の方はエラーに関するオブジェクトが渡される。
navigator.geolocation.getCurrentPosition(
function(position){
success(position);
},
function(error){
fail(error);
},
{maximumAge:0}
);
こんな感じにしておくと、
位置情報の有効期限なし(都度取得)で取得できる。

■位置情報がキャッシュされる?
getCurrentPosition だと位置情報がキャッシュされてしまう、
という話を聞いて、書いて試したものの
第三引数に {maximumAge:0} を渡すようにしたからか、Android 4 だからなのか、
ちゃんと都度位置情報を取得しなおしているように見えた。
(数秒あけて、繰り返し実行した際に、位置がずれることがあった。)
Android 2.3 や iPhone ではキャッシュされてしまうものがあるのかないのか、
検証できていないのでわからない。

■GPS をオンにしても位置情報が取得できない
Galaxy S3 だけなのかそうでないのかわからないが
設定 → 位置情報サービス → GPS機能を使用 にチェックを入れても
エラーコード 2 (The last location provider was disabled) となって
位置情報が取得できなかった。
設定 → 位置情報サービス → 無線ネットワークを使用 にチェックを入れたところ
GPS機能を使用 のチェックの有無にかかわらず位置情報を取得することができた。

■取得した位置が明らかに遠いことがあった
関東某所の駅・電車内で実行したところ、大阪の位置情報が返されることがあった。
その際、同じような場所で3分ほどの間に11回実行し、5回が大阪の位置情報だった。
GPS による位置取得でなかったのが原因だと思う。
ただ、GPS を使用して位置情報を取得するかどうかは
端末側の設定次第で HTML や JS を書く側からは指定できないので
サービスに組み込む場合は、位置情報が違うかもしれませんよ、と
あらかじめユーザに伝える必要がありそう。

■感想
位置情報を単純に取得して、さらに Google Maps API で
地図上に表示するだけならとても簡単。お手軽。
ただ、位置情報の取得は一瞬では終わらないので
待ち時間をどうユーザに示すかは、工夫した方が親切かもしれない。

また、どのような設定をすれば位置情報の取得ができるのか、
どの程度の精度での取得になるかはわかりづらいと感じた。
GPS のオンオフは画面上部を"引っ張る"とボタンが出てくるが、
「無線ネットワークを使用」に相当するものは一度ホームに戻って
設定から選ばないといけなくてオンオフの切り替えが面倒だと感じた。

最後に、位置情報はある程度誤差が出ることを考えると
検証は移動しながら行うことになるので
検証しながらコードをいじるのが難しくてやりづらいと思った。
[PR]
by tokage-shippo | 2013-01-28 23:12 | プログラミング

MySQL 5.5 で外部キー制約使おうとしたらエラーではまった。

ALTER TABLE `hoge_table` ADD FOREIGN KEY ( `id` ) REFERENCES `hoge`.`fuga_table` (`id`
) ON DELETE SET NULL ON UPDATE CASCADE ;

みたいにして、外部キー制約を追加しようとしたらエラーになりました。
原因は、NOT NULL のカラムなのに ON DELETE SET NULL を指定していたため。
原因がわかるまで手間取ったのでメモしておきます。

上記の SQL を実行したところ、下記のようなエラーが出ました。(xxxの部分は英数字)
ERROR 1005 (HY000): Can't create table 'hoge.#sql-xxx_xxxx' (errno: 150)

エラーメッセージで検索したところ、下記のページがヒットしました。
InnoDBの複合FOREIGN KEY制約について - Yet Another Hackadelic
FOREIGN KEYを張る際に怒られた時はSHOW ERRORSよりもSHOW INNODB STATUSを見ましょう。
とのことなので、SHOW INNODB STATUS をやってみました。
mysql> SHOW INNODB STATUS\G
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'INNODB STATUS' at line 1

エラーになりました。調べたところ、
SHOW INNODB STATUS

SHOW ENGINE INNODB STATUS
となったそうです。
MySQL :: MySQL 5.5 Reference Manual :: 14.3.14.2 SHOW ENGINE INNODB STATUS and the InnoDB Monitors

SHOW ENGINE INNODB STATUS\G を実行して、
「LATEST FOREIGN KEY ERROR」の項目を確認したところ、
「You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.」とあったので、エラー詳細がわかりました。
[PR]
by tokage-shippo | 2013-01-15 17:50 | プログラミング
Mozilla Firefox ブラウザ無料ダウンロード

about this...

書き手の名前は 晴柳祐志 と言います。


リンク

Twitter
いつか何とかしたいサイト

最新のトラックバック

[foxkeh]フォクす..
from 「 Firefox ×?=!..
[Firefox]Fir..
from +Sun Flower〜報告〜+
Firefoxバトン
from MなMによるMのための日記
スキン変更!
from SUKA・SUKA・BLOG
Firefox 1.5に..
from mmkg

検索

S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
XML | ATOM

個人情報保護
情報取得について
免責事項