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
910
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
8
地図が3倍速くなる!?MapLibreコミュニティが本気で作った「MapLibre Tile」徹底解説
kyotonagoya
0
62
Implementing Interactive Indoor Maps with MapLibre and IMDF
kyotonagoya
0
120
MapLibre SwiftUIを使ってGPSトラッキングアプリを作ってみた
kyotonagoya
0
62
Indoor Mapping Data Format を使った屋内フロアマップの表示
kyotonagoya
0
450
Hello Global! 来年 FOSS4G Global が日本に上陸!!
kyotonagoya
0
41
都電LT#000 発表資料
kyotonagoya
0
260
Seminar_QGIS_QField.pdf
kyotonagoya
0
24
mmj001
kyotonagoya
0
240
Other Decks in Technology
See All in Technology
Hooks, Filters & Now Context: Why MCPs Are the “Hooks” of the AI Era
miriamschwab
0
160
DIPS2.0データに基づく森林管理における無人航空機の利用状況
naokimuroki
1
210
Bluesky Meetup in Tokyo vol.4 - 2023to2026
shinoharata
0
180
サイバーフィジカル社会とは何か / What Is a Cyber-Physical Society?
ks91
PRO
0
170
Hello UUID
mimifuwacc
0
140
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
23k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
16k
昔はシンプルだった_AmazonS3
kawaji_scratch
0
220
3つのボトルネックを解消し、リリースエンジニアリングを再定義した話
nealle
0
420
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
700
システムは「動く」だけでは足りない 実装編 - 非機能要件・分散システム・トレードオフをコードで見る
nwiizo
3
370
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
28
8.7k
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
150
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
270
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
So, you think you're a good person
axbom
PRO
2
2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
680
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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で取得した位置情報の軌跡 家の近くの中学校の隣にある遊歩道で徒歩で移動