Spottizmo! PhotoMapperのソースコードを公開しました

Spottizmo! PhotoMapperのソースコードをGitHubで公開しました。

wiggling/SpottizmoPhotoMapper – GitHub

Spottizmo!はBluetoothを介したインタフェースを用意してまして、外部から日時を送信すればその時の居場所を返すという機能があります。Spottizmo!は間欠的ながらも位置情報を常時記録していますので、外部から検索できれば自分の居場所DBとして面白い事ができるのでは?という事で作った機能です。

Spottizmo! PhotMapperは、これを利用してiPadに取り込まれた写真にジオタグを付けるアプリです。アプリ自体はAppStoreでも配布しています。

Spottizmo! PhotoMapper – すべてのカメラで使えるジオタガー

以下ではこのインタフェースの利用方法を説明します。

利用条件は、GameKit.frameworkをプロジェクトに追加する事。GKSessionを使いますので、iOS4.1以降に対応します。

iOS7ではMultipeer Connectivity Frameworkが追加されたことでGKSessionはDeprecatedなのですが、Spottizmo!はiOS6にも対応しているためGKSessionを利用しています。

まず送信データですが、解決したいNSDateの配列をプロトコルバージョンと併せてNSDictionaryに入れて送信します。プロトコルバージョンは現状は1のみです。

 {
    data =     (
        "2013-06-05 06:19:59 +0000",
        "2013-06-05 06:14:16 +0000",
        "2012-08-12 01:49:36 +0000"
    );
    version = 1;
}

PhotoMapperでは、SPMGeotagController.mのlocationResolveRequestメソッドでこれを行っています。

Spottizmo!側で問い合わせリクエストを許可すると、以下のような応答を返します。

(
        {
        photodate = "2013-06-05 06:19:59 +0000";
        safe = 1;
        spotdate = "2013-06-05 07:16:27 +0000";
        spotlatitude = "34.16350642173193";
        spotlongitude = "132.1792335885163";
    },
        {
        photodate = "2013-06-05 06:14:16 +0000";
        safe = 1;
        spotdate = "2013-06-05 07:16:27 +0000";
        spotlatitude = "34.16350642173193";
        spotlongitude = "132.1792335885163";
    },
        {
        photodate = "2012-08-12 01:49:36 +0000";
        safe = 1;
        spotdate = "2012-08-12 02:39:20 +0000";
        spotlatitude = "34.44627937652892";
        spotlongitude = "133.997870314635";
    }
)

配列の各要素内のphotodateが問い合わせのNSDateに対応し、その日付にマッチングされたSPOTの時刻(spotdate), 緯度(spotlatitude), 経度(spotlongitude), プライベートエリアか否か(safe)を表します。safe要素は0ならプライベートエリア内のSPOTで、1ならそうではない安全な場所です。SPOTのマッチングは問い合わせ時刻に最も近いものを採用しています。

PhotoMapperでは、SPMGeotagController.mのreceiveData:fromPeer:inSession:context:というGKSessionのデリゲートメソッドでこれを行っています。

PhotoMapperからSpottizmo!への問い合わせ処理はこちらのムービーのような動作になります。

かなり突貫で作ったためiOSからの利用しか想定しておらず、プロトコル仕様的にもこんなので良いのか等々思う事は多々あるのですが、公開すればその辺りのフィードバックも得られるかなという事で。URLスキームを使って同一デバイスの他アプリからの問い合わせできるようにするインタフェースも検討しています。

もし面白いと思ったら、是非対応アプリを作ってみて下さい。