前回の記事ではiPhoneとAWS IoTでMQTT通信を行いました。
AWS IoTとiPhoneアプリでMQTTを行う方法【動画付き】
今回はiPhoneの位置情報をAWS IoTに送信し、更にAWS Location Serviceによるトラッキング(位置追跡)を試しました。
スポンサーリンク
目次
構成
iPhoneからAWS IoTにMQTTで緯度、経度をpublishし、Lambdaを経由してAmazon Location ServiceのTrackを使って、位置追跡を行いました。

位置情報をpublishするソースコード
CLLocationManagerから位置情報が更新された時にpublishします。
// 位置情報を取得した場合
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(location.latitude) \(location.longitude)")
let publishProperties = MqttPublishProperties()
publishProperties.contentType = "JSON"
let date: Date = Date()
let unixtime: Int = Int(date.timeIntervalSince1970)
let json: JSON = [
"payload": [
"deviceid": "iPhone-location",
"timestamp": unixtime,
"location":[
"lat":location.latitude,
"long":location.longitude
]
]
]
if let strJson = json.rawString() {
mqtt!.publish("iphone/lacation", withString: strJson, qos: .qos1)
}
}
AWS側の設定
以下リンクの説明通りにLambdaとAmazon Location Serviceを設定
https://docs.aws.amazon.com/location/latest/developerguide//tracking-using-mqtt.html
位置追跡結果の取得
AWS CLIを使って取得できます。
aws location get-device-position-history --device-id "iPhone-location" --start-time-inclusive "2022-01-16T06:05:07.327Z" --end-time-exclusive "2022-01-17T19:20:07.327Z" --tracker-name "iPhoneTracker"
{
"DevicePositions": [
{
"DeviceId": "iPhone-location",
"Position": [
139.76705309787633,
35.68144517816189
],
"ReceivedTime": "2022-01-16T06:05:08.754000+00:00",
"SampleTime": "2022-01-16T06:05:08+00:00"
},
{
"DeviceId": "iPhone-location",
"Position": [
139.75284555346155,
35.6855127405154
],
"ReceivedTime": "2022-01-16T06:05:09.403000+00:00",
"SampleTime": "2022-01-16T06:05:09+00:00"
},
{
"DeviceId": "iPhone-location",
"Position": [
139.7454742892775,
35.660116269038845
],
"ReceivedTime": "2022-01-16T06:05:10.485000+00:00",
"SampleTime": "2022-01-16T06:05:10+00:00"
},
まとめ
当初はAWS Location Serviceのmap上に位置追跡したルートを可視化できる想定できたが、方法は分かりませんでした。ただ緯度・経度が出てくるので他サービスを使ってiPhoneの位置追跡の結果を可視化することはできそうです。
Amazon Location ServiceにはGeofencesという指定したエリアの出入りを通知する機能もあり、ドローンが指定エリアに入らないように制御する、社員が会社のエリア内に入ったら通知する、といった使い道があるようです。
参考
AWSは公式サイトに設定手順が記載されていますが、日本語訳は読みづらく英語の方が分かりやすいと思うのですが、AWSの基本的なサービスを知っている前提で説明されているように見受けられます。
AWSの基本的なサービスを把握するには「AWS認定ソリューションアーキテクト アソシエイト」を取得するのが良いです。筆者の所属する企業始め多くの企業ではAWSを扱うエンジニアには上記の認定を取得することが求められます。筆者は取得した際に仕事の考課査定にもプラスになりました。
「AWS認定ソリューションアーキテクト アソシエイト」には数多くの教材が存在しますが、筆者としては十分な講義量とハンズオンが用意されているUdemyの【2022年版】これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座 をオススメします。筆者と周りのエンジニアからも評判が良かったです。
試験の費用が150US $と安くないので【2022年版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(6回分390問) という6回分の模擬試験も受けておくとより安全です。