スタンプラリーを手作りしたら、GPSの誤差と知恵くらべになった話

キャンプ場に着いてボタンを押すと、スタンプがひとつ。
その一瞬の裏側で、けっこう泥くさいことをやっています。

このサイトに、スタンプラリーという遊びを足しました。
訪れたキャンプ場やRVパークでチェックインすると、スタンプ帳にスタンプがたまっていく。
仕組みとしては昔ながらの、ラジオ体操のカードみたいなものです。

作ってみたら、これが思いのほか泥くさい仕事の連続でした。
今日はその裏側の話を書いてみます。

「そこにいる」をどう証明するか

スタンプラリーの核心は、本当にその場所へ行ったかどうかの判定です。
紙のラリーなら現地のスタンプ台が証明してくれますが、Webにはスタンプ台がありません。
代わりに使うのが、スマホのGPSです。

ブラウザには位置情報を取得する仕組みが最初から入っていて、許可をもらえば緯度と経度が手に入ります。
あとはキャンプ場の座標との距離を測って、十分に近ければスタンプを押す。
地球は丸いので、距離の計算には球面上の2点間を求める式を使います。
ハーバーサインという、いかつい名前のわりに中身は素直な式です。

チェックインの判定ルール

キャンプ場     :中心から半径500m以内ならOK
それ以外のスポット :半径300m以内ならOK
同じ場所は1日1回まで。別の日にまた行けば回数が増える

GPSは意外と嘘をつく

最初は「誤差なんて100mも見ておけば十分だろう」と思っていました。
甘かった。
山あいのキャンプ場だと、GPSの誤差は平気で100mを超えてきます。

判定を厳しくしすぎると、場内のテントサイトにいるのに「圏外です」と言われる。
ゆるくしすぎると、前の道路を通り過ぎただけで押せてしまう。
広いキャンプ場の敷地も考えて、半径500mという数字に落ち着きました。
理論的な根拠があるわけではなく、地図とにらめっこした末の相場観です。

ズルとの知恵くらべ

位置情報は、その気になれば偽装できます。
だからこのラリーには賞品がありません。
もらえるのは称号だけ。

守るものが名誉だけなら、不正対策もほどほどで釣り合います。
偽装と本気で戦おうとすると、まっとうな利用者まで巻き込む検問だらけのシステムになってしまうので。

それでも最低限の関所は置きました。
連打を防ぐ回数制限と、移動速度のチェックです。
前回のチェックイン地点からの距離と時間を割り算して、時速150kmを超えていたら、その移動は人間ではないと判断して弾きます。
高速道路でも、まず出ない速度です。

位置情報は保存しない

設計で最初に決めたのは、緯度経度を記録に残さないことでした。
判定に使ったら、その場で捨てる。
サーバーに残るのは「どのスポットに、どの日に行ったか」だけです。

誰がいつどこにいたかという情報は、持っているだけで重たい。
預からなければ、漏らしようもありません。
個人でサイトを運営する身としては、これがいちばん安心できる答えでした。

スタンプ帳は泊まる場所ガイドのスタンプラリーからどうぞ。
まる子との旅の記録、あなたも一冊つくってみませんか。

技術ブログ一覧へ戻る