記事検索

検索ワードを入力してください。
Sky Tech Blog
Wi-Fiに​よる​位置情報取得

Wi-Fiに​よる​位置情報取得

WindowsでWi-Fiに関連するAPIを使用する際に位置情報へのアクセスが必要となる理由について説明します。位置情報取得の精度や実際の測定結果を紹介します。

WindowsではWi-Fiに関連する一部のAPIを呼び出す場合、位置情報へのアクセスに関するユーザーからの同意が必要となる予定です。

参考:

Wi-Fiと位置情報へのアクセスにどのような関係があるのかを調べたところ、位置情報サービス事業者がWi-Fiのアクセスポイントの位置などの情報を収集してデータベース化しているため、デバイスの周囲にあるWi-Fiのアクセスポイントがわかればかなりの精度で位置情報を取得することが可能であるということがわかりました。

どのくらいの精度で位置情報が取得可能なのか調べてみました。

以下のソースコードを、ビルドしたモジュールをGPSが搭載されていないWi-Fiが使用可能なWindows端末で実行しました。

#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Devices.Geolocation.h>
#include <iostream>
#include <string>

using namespace winrt;
using namespace Windows::Devices::Geolocation;

std::wstring PositionSourceToString(PositionSource ps)
{
    switch (ps) {
    case PositionSource::Cellular:
        return L"Cellular";
    case PositionSource::Satellite:
        return L"Satellite";
    case PositionSource::WiFi:
        return L"WiFi";
    case PositionSource::IPAddress:
        return L"IPAddress";
    case PositionSource::Default:
        return L"Default";
    case PositionSource::Obfuscated:
        return L"Obfuscated";

    case PositionSource::Unknown:
    default:
        break;
    }

    return L"Unknown";
}

int main()
{
    init_apartment();

    try {
        Geolocator geolocator;
        auto geoposition = geolocator.GetGeopositionAsync().get();
        auto coord = geoposition.Coordinate();
        auto point = coord.Point().Position();

        std::wcout << L"Position: " << point.Latitude << ", " << point.Longitude << std::endl;
        std::wcout << L"Source: " << PositionSourceToString(coord.PositionSource()) << std::endl;
    }
    catch (const winrt::hresult_error&) {
        std::wcout << L"error" << std::endl;
    }
}

すると、このような結果になりました。

Position: 34.7341, 135.497
Source: WiFi

位置情報取得の情報源がWi-Fiとなっていたので、確かにWi-Fiを使って位置情報が取得できました。

取得した位置情報をGoogle マップに入力してみます。
結果は、以下の通りです。

この位置は、Sky株式会社の大阪本社が入っているビルです。
位置情報を取得した場所も大阪本社でしたので、今回の測定ではビルまで一致しています。
位置情報を取得する場所や状況により、位置情報を測定できる/できないが変わったり、精度も変わるとは思いますが、この一例を見るとかなりの精度だと思いました。

Windowsにおいて、Wi-Fiに関連する一部APIの呼び出しに位置情報へのアクセスに関するユーザーからの同意が必要となる理由がよくわかりました。


XFacebookLINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム