Help us understand the problem. What is going on with this article?

iPhone5sの位置情報水平精度を取得してみた

More than 5 years have passed since last update.

サンプル取得回数も少なく、適当に計測しているので正確な値ではない可能性があります。ここの値を鵜呑みにしないようお願いします。

CLLocationManagerが出力する値の水平精度が気になったので、開発中のアプリにFlurryエベントを仕込んで確認してみた。自転車通勤のデータなので、約1時間20分くらい。Flurry側には1000レコードほどログが記録されていて、おそらくアプリケーションからFlurryに記録可能なログの上限と思われる。

コードはこんな感じ(アプリのコードから抜粋+加工なので、コピペで動かないかも。あしからず)。

- (id)init
{
    self = [super init];
    if (self) {
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
        [_locationManager startUpdatingLocation];

        [Flurry startSession:@"YOUR_FLURRY_API_KEY"];
    }
    return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // ログ用のdictionaryを作成
    NSDictionary *params = @{
            @"latitude": [NSNumber numberWithDouble:newLocation.coordinate.latitude],
            @"longitude": [NSNumber numberWithDouble:newLocation.coordinate.longitude],
            @"horizontalAccuracy": [NSNumber numberWithDouble:newLocation.horizontalAccuracy],  // 水平精度
            @"verticalAccuracy": [NSNumber numberWithDouble:newLocation.verticalAccuracy],  // 垂直精度
    };

    // Flurryにログ記録
    [Flurry logEvent:@"CLLocation" withParameters:params];
}

ロジックを実行するとlocationManager:didUpdateToLocation:fromLocationが呼び出されてFlurryにイベントログが記録される。イベントログはFlurryを開いて EventsEvent Logs から参照する。

kobito.1386043979.326856.png

で、肝心の水平精度はどうなのよ?というと、取得開始直後は次のような感じ。場所は屋内→屋外(ただし建物のすぐ隣)。

スクリーンショット_2013-12-03_13.16.07-6.png

走りだして少ししたら精度が良くなった。

スクリーンショット 2013-12-03 14.13.43.png

他にもいくつかデータを取得して表にまとめてみた。セルラーがXになっているのはSIMを抜いたiPhone5(iPhone5sではない)のもの。

Cellular WiFi Bluetooth 場所 精度
屋内 65m
屋外で建物のすぐ隣 50m
見晴らしのいい屋外 5m - 10m
X 屋内 65m
X X 屋内 450m - 3000m
X X X 屋内 450m - 3000m
X 屋外 5m - 10m
X X 屋外 5m - 10m

まとめると次のような傾向がある。

  • 水平精度の最高値は5m
  • GPSが利用可能であれば、セルラー、Wi-Fiの有無を問わず、水平精度5m - 10mで位置を取得できる
  • GPSが利用不可能な場合、Wi-Fiをベースに水平精度50m - 100m程度で位置を取得できる
  • 屋外では、見通しが良い場合、悪い場合で精度がかなり違う(5m - 100mくらい)
  • セルラー、Wi-Fiがなくてもおおよその位置を把握できる(どうやってるんだ?過去の値か?)

以上。ツッコミ歓迎。

key
Python + Djangoでウェブ・アプリケーション開発、SwiftでiOSアプリ開発をやってます。
http://blog.mitsukuni.org
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away