Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スマホアプリで位置情報を取得してみよう(iOS成分多め)
Search
Haruki Inoue
December 19, 2022
Technology
920
1
Share
スマホアプリで位置情報を取得してみよう(iOS成分多め)
MIERUNE_Meetup_mini_2022-12-15の発表資料です。
https://mierune.connpass.com/event/266903/
Haruki Inoue
December 19, 2022
More Decks by Haruki Inoue
See All by Haruki Inoue
豊橋で走っていた自動運転バスに乗ってみた
kyotonagoya
0
10
地図が3倍速くなる!?MapLibreコミュニティが本気で作った「MapLibre Tile」徹底解説
kyotonagoya
0
74
Implementing Interactive Indoor Maps with MapLibre and IMDF
kyotonagoya
0
150
MapLibre SwiftUIを使ってGPSトラッキングアプリを作ってみた
kyotonagoya
0
69
Indoor Mapping Data Format を使った屋内フロアマップの表示
kyotonagoya
0
490
Hello Global! 来年 FOSS4G Global が日本に上陸!!
kyotonagoya
0
45
都電LT#000 発表資料
kyotonagoya
0
270
Seminar_QGIS_QField.pdf
kyotonagoya
0
25
mmj001
kyotonagoya
0
240
Other Decks in Technology
See All in Technology
古今東西SRE
okaru
1
170
多角的な視点から見たAGI
terisuke
0
130
データモデリング通り #5オンライン勉強会: AIに『ビジネスの文脈』を教え込むデータモデリング
datayokocho
0
220
マンション備え付けのネットワークとLTE回線を組み合わせた ネットワークの安定化の考案
harutiro
1
110
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
230
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
370
知ってた?JavaScriptの"正しさ"を検証するテストが5万以上もあること(Test262)
riyaamemiya
1
180
雑談は、センサーだった
bitkey
PRO
2
220
【技術書典20】OpenFOAM(自宅で深める流体解析)流れと熱移動(2)
kamakiri1225
0
390
毎日の作業を Claude Code 経由にしたら、 ノウハウがコードになった
kossykinto
1
1.2k
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
820
Swift Sequence の便利 API 再発見
treastrain
1
240
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
740
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
540
Code Review Best Practice
trishagee
74
20k
How to build a perfect <img>
jonoalderson
1
5.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
360
KATA
mclloyd
PRO
35
15k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
190
Transcript
スマホアプリで位置情報を取得してみよう (iOS成分多め) マルティスープ株式会社 井上 晴稀
自己紹介 井上 晴稀 (いのうえ はるき) 25歳 マルティスープ株式会社 iOSアプリエンジニア iField 位置情報を用いた動態管理アプリを作ってます
• 1997年 愛知県名古屋市生まれ • 1999年? 愛知県豊橋市に引っ越し • 2021年 千葉県流山市に引っ越して上京 @kyotonagoya1476 場所の履歴書 休日は電車などを使って色んな場所に行っています
位置情報の種類 屋外の位置情報 (地図上における位置情報) ©OpenStreetMap contributors 屋内の位置情報 バーチャルの位置情報
位置情報の種類 屋外の位置情報 (地図上における位置情報) ©OpenStreetMap contributors 屋内の位置情報 バーチャルの位置情報 きょう話す内容 ※ネイティブアプリ
ユーザーの位置情報 スマートフォンでユーザーの位置情報が取得可能 スマートフォンの中に GPS受信機が搭載 ナビゲーション 広告 流山市のみなさん! お得なセールです! 私達の暮らしの中で いろんな形で活用
Lat: 35.871778, Lon: 139.925 次の交差点を 左に曲がります ©OpenStreetMap contributors ユーザーの位置情報を取得
GNSS衛星測位システム 人工衛星からの信号を使って 位置測位などを行うシステム GPS グローバルポジショニングシステム アメリカが運営しているGNSS GPSは元々軍事用で開発 ➔航空機事故を境に一般開放(諸説あり) 位置測位システム GNSS/GPS
GNSSの一種
受信機 (スマホ) GPS衛星が送信する情報 • 時刻データ • 衛星の軌道位置 受信機(スマホ)が位置情報を算出 GPS衛星が送信する情報に 受信機(スマホ)の位置情報は存在しない
GPSとスマートフォンの関係 4つの衛星を使って位置情報を算出 電波の3次元交点の算出+誤差計算 ※スマートフォンはGPSだけではなく携帯電波・Wi-Fiを使った位置測位もしています
大まかな実装の流れ 具体的な実装方法は公式ドキュメントなどを参照してください iOSでは 「CoreLocation」を使って位置情報に関する処理を実装 ① ユーザーの位置情報取得の許可状態を確認 ② 位置情報の取得設定を定義(フィルタ・バックグラウンド取得など) ③ 位置情報の測位開始
④ 位置情報を受け取ったときの処理を定義 位置情報を受け取ったときに実行する関数が用意されている そこで位置情報に関するデータを取ってくる処理などを定義
ユーザーの位置情報は個人情報につながる ➔ 扱いには注意が必要 ↑バックグラウンドの利用許可 ←位置情報の利用許可 アプリケーションにおいて アプリ開発者がユーザーに 位置情報の使用許可を得るのは必須 iOSアプリにおける位置情報の使用許可は2段階 1.
フォアグラウンドでの位置情報使用許可 2. バックグラウンドでの位置情報使用許可 • バックグラウンドでの位置情報取得 ➔ ユーザーの許可が得ていれば認められている • アプリを完全に閉じた状態での位置情報取得 ➔ 厳しい制限が設けられている 位置情報とプライバシー
• 緯度・経度 • 高度 (m) • 速度 (m/s) • 方位(デバイスの移動方向
0-360度) • 緯度・経度の精度 (m) • 高度の精度 (m) • 速度の精度 (m/s) • 方位の精度 (度) 1回の取得で以下の値を取得可能(よく使う値を列挙) iOSとAndroidで値が異なる 例: 富士山の頂上付近 iOS = 3776m Android = 3815m スマートフォンで取得可能な位置情報関連の値 高度について: iOSは標高(楕円体高 - ジオイド高) Androidは楕円体高 ※比較的新しいiOSでは楕円体高も算出可能 iOSでは一番良い精度でも5m程度 参考: 国土地理院「ジオイド」
• 衛星的要因:衛星の位置誤差 衛星時刻の誤差 • 大気的要因:電離層の変化 大気の状態 • 地理的要因:山脈 ビル • 人為的要因:電波干渉 勝手に妨害電波を発する • 機械的要因:受信した衛星数が少ない 受信した衛星同士が近い
都心では高層ビルが GPS電波を跳ね返す 位置情報の誤差 GPSによる位置情報は様々な要因で誤差が発生 屋内や地下はGPS電波が届かない・反射が多いためGPSによる位置測位は難しい
• 移動距離による取得制限 • 受け取りたい位置情報の精度 ソースコード内で位置取得の設定をかけることが可能 (下記の項目はiOSの例) スマートフォンでの位置情報取得制御 ただし最短の位置取得間隔は1秒に1回 例: 移動距離によるフィルタを0mにしていても1秒経過しないと取得されない
どれくらいの精度の位置情報を取得したいのか設定 現在地(推定) ユーザーは現在地から 半径100m以内のどこかにいる 精度範囲 例: 100m 受け取りたい位置情報の精度を設定 実際には ここにいるかも
位置情報精度のイメージ iOSで設定できる値(定数値) • ナビゲーション用の精度 ◦ 他のセンサーも使用して精度を高める • 最高レベルの精度 • 10m以内 • 100m以内 • 1km以内 • 3km以内 参考資料: https://developer.apple.com/documentation/corelocation/cllocationaccuracy 高 低 バッテリー 使用量 位置情報 精度
ユーザーがどれくらい動いたら位置情報を更新するか設定 例: フィルタ値 = 10m 5m移動 GPS信号 5m移動 GPS信号 合計10m移動
受信 受信 位置測位 位置測位 移動フィルタ 実際には位置測位をしているが 移動距離が満たされておらず破棄
ジオフェンス機能 指定した座標から半径nメートル以内に ユーザーが入っているかどうか判定(判定は少し遅め?) 円形のジオフェンスのみ対応 OUT IN 滞在記録機能 ユーザーが特定の地点からの動きがない場合 その場所に滞在したと判定して位置情報を記録 滞在した場所の座標と滞在日時を記録
例: お店で食事 座標: (135.0,35.0) 到着: 10:00 出発: 10:20 ジェオフェンスと滞在記録機能 iOSは20個 Androidは100個までジオフェンスの設定が可能
おわりに スマホアプリで位置情報に関する様々な情報を取得できます ぜひ皆さんも一度スマホアプリで位置情報を活用してみませんか? ナビゲーション ©OpenStreetMap contributors 天気予報 乗換案内 位置情報を活用すると便利な世の中が期待できます
位置情報取得のデモ 位置情報の履歴をマップ上に表示するアプリ 地図上の青い丸 地図ライブラリの現在位置表示 赤い線 CoreLocationで取得した位置情報の軌跡 家の近くの中学校の隣にある遊歩道で徒歩で移動