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
0
770
スマホアプリで位置情報を取得してみよう(iOS成分多め)
MIERUNE_Meetup_mini_2022-12-15の発表資料です。
https://mierune.connpass.com/event/266903/
Haruki Inoue
December 19, 2022
Tweet
Share
More Decks by Haruki Inoue
See All by Haruki Inoue
都電LT#000 発表資料
kyotonagoya
0
210
Seminar_QGIS_QField.pdf
kyotonagoya
0
12
mmj001
kyotonagoya
0
160
OSSを使って「自分の地図」を更新してみよう! (QGIS・QField連携入門)
kyotonagoya
0
33
[FOSS4G 2023 Japan] スマホアプリの地図表示における第三の選択肢 MapLibre Native を使ってみる
kyotonagoya
1
290
[FOSS4G TOKAI 2023 LT] みんな名古屋駅からどこに降りているのか?大都市交通センサスを使って見てみる
kyotonagoya
2
930
Other Decks in Technology
See All in Technology
FastMCPでSQLをチェックしてくれるMCPサーバーを自作してCursorから動かしてみた
nayuts
1
150
KMP導⼊において、マネジャーとして考えた事
sansantech
PRO
1
180
[JAWS-UG 栃木 #2]AWS FISはドSなのか?システムに試練を与えて強くする!
sh_fk2
1
270
大事なのは、AIの精度だけじゃない!〜1円のズレも許されない経理領域とAI〜
jun_nemoto
9
4.9k
オープンソースのハードウェアのコンテストに参加している話
iotengineer22
0
340
VueUseから学ぶ実践TypeScript #TSKaigi #TSKaigi2025
bengo4com
3
5.3k
Project Referencesを活用した実行環境ごとのtsconfig最適化
itatchi3
1
240
ソフトウェアは捨てやすく作ろう/Let's make software easy to discard
sanogemaru
10
5.2k
型がない世界に生まれ落ちて 〜TypeScript運用進化の歴史〜
narihara
1
200
Houtou.pm #1
papix
0
530
Machine Intelligence for Vision, Language, and Actions
keio_smilab
PRO
0
390
Oracle Database オプティマイザ・ヒントの活用
oracle4engineer
PRO
1
130
Featured
See All Featured
Navigating Team Friction
lara
185
15k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Rails Girls Zürich Keynote
gr2m
94
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Building an army of robots
kneath
306
45k
Into the Great Unknown - MozCon
thekraken
38
1.8k
Why Our Code Smells
bkeepers
PRO
336
57k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Making Projects Easy
brettharned
116
6.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
We Have a Design System, Now What?
morganepeng
52
7.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
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で取得した位置情報の軌跡 家の近くの中学校の隣にある遊歩道で徒歩で移動