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
700
スマホアプリで位置情報を取得してみよう(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
Seminar_QGIS_QField.pdf
kyotonagoya
0
6
mmj001
kyotonagoya
0
110
OSSを使って「自分の地図」を更新してみよう! (QGIS・QField連携入門)
kyotonagoya
0
22
[FOSS4G 2023 Japan] スマホアプリの地図表示における第三の選択肢 MapLibre Native を使ってみる
kyotonagoya
1
250
[FOSS4G TOKAI 2023 LT] みんな名古屋駅からどこに降りているのか?大都市交通センサスを使って見てみる
kyotonagoya
2
820
Other Decks in Technology
See All in Technology
型情報を用いたLintでコード品質を向上させる
sansantech
PRO
2
170
AWS re:Invent 2024 Recap in ZOZO - Serverless で好きなものをしゃべってみた
chongmyungpark
0
690
ZOZOTOWN の推薦における KPI モニタリング/KPI monitoring for ZOZOTOWN recommendations
rayuron
1
230
プロダクト組織で取り組むアドベントカレンダー/Advent Calendar in Product Teams
mixplace
0
570
AWS環境におけるランサムウェア攻撃対策の設計
nrinetcom
PRO
1
290
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
1
390
OPENLOGI Company Profile for engineer
hr01
1
17k
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
42
18k
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
6
1.3k
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
210
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
360
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
680
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
66
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Navigating Team Friction
lara
183
15k
4 Signs Your Business is Dying
shpigford
182
21k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Building Your Own Lightsaber
phodgson
104
6.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
We Have a Design System, Now What?
morganepeng
51
7.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.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で取得した位置情報の軌跡 家の近くの中学校の隣にある遊歩道で徒歩で移動