スマホが位置情報を取得する方法は大きく3つあります。
- GPS
- 携帯基地局
- wifi
このうち、携帯基地局とwifiは、スマホがGPSで取得した位置情報をGoogleなりAppleがサーバサイドで紐付けることで、位置情報を推定しているようです。
携帯基地局やwifiの情報から位置情報を逆引きするためには、Google Map APIを使えば出来るのですが、ルナスコープのようなGPSトラッキングをしているサービスでは、Google Mapプレミアムサービスへの申し込みが必須のため気軽に利用することが出来ません。
GPSトラッキングしていても無料で利用できるサービスを探したところ、OpenCelliD というものがありました。
OpenCelliDとは
OpenCelliDホームページ
世界中の基地局情報のデータベースを無料で公開するプロジェクト。位置情報はOpenCelliDのAndroidアプリを使ったユーザが登録するようになっています。
OpenCelliDのAndroidアプリ
ダウンロードできる基地局データ
無料でアカウントを作成してログインするとダウンロードページにアクセスできるようになります。

この時は、560MB程度のCSVファイルを提供していました。(時間がたつと大きくなるはず)
CSVは次のようなカラムに分かれています。
radio, mcc, net, area, cell, unit, lon, lat, range, samples, changeable, created, updated, averageSignal
カラムについては、こちらのwikiページに説明があるのですが、一部カラムについて過不足があるのようなのでwikiの更新が遅れているのかもしれません。
実際にデータベースに入れて試す
お試しでAWSのRDSにPostgreSQLのインスタンスを立ててデータをインポートしてみました。
DBが起動したら、CSVに合わせて次のようなテーブルを作りました。
CREATE TABLE cell_towers(
radio varchar(16),
mcc int,
net int,
area int,
cell int,
unit int,
lon double precision,
lat double precision,
range int,
samples int,
changeable int,
created int,
updated int,
averageSignal int
);
試しで検索する部分についてインデックスも貼っておきます。
CREATE INDEX cell_index ON cell_towers (cell); CREATE INDEX mcc_index ON cell_towers (mcc);
先程ダウンロードしたファイル(560MB程度)を解凍して(3GB程度)から、pgadmin4でDBに接続して、インポートを実行しました。
pgadminを使うとCSVファイルを指定するだけでインポートが出来て便利です。
DBで必要な容量を見積もらずにやったのですが、おおよそ6GBくらいを使いました。(最初、DB容量が足りなくてインポートに失敗しました。。)
データが無事にインポートできたら次のようなSQLで検索すれば、基地局の位置情報が取得できます。
select * from cell_towers where cell = xxxxxxxxx limit 1;
日本の基地局の網羅状況について
都市部は割りと基地局のデータがあるようです。実際に東京の調布で取得した基地局データを2つテストしてみたところ、1つは見つかって、1つは見つからなかったです。
しかし、地方はまだまだスカスカなイメージです。
これからのデータ充実に期待しましょう。
※皆様、ぜひ一度 OpenCelliDのアプリをインストールして生活圏の基地局情報を送信してください!
