iOSのルートヒストリーから取得したGPXファイルをQGISでシェープファイルに変換しSQL Serverにアップロードする

 我々の手元にあるスマホにはかなり高性能な衛星測位システムが備わっている.GPS, GLONASS, QZSS, Galileo など.それぞれ米国,ロシア,日本,EU が管理するものである.これらのシステムを利用したアプリにルートヒストリーというものがあり,移動経路をログとして記録できる.今回はこのアプリから取得したファイルをQGISでシェープファイルに変換し,SQL Serverにアップロードするまでを記事とした.

ルートヒストリーでデータを取る

 まずはデータを取らなければならない.ルートヒストリーを起動して下図のように右下にある+のアイコンをタップする.

ルートヒストリー右下の+アイコンをタップ
ルートヒストリー右下の+アイコンをタップ

 すると現在地が表示され,画面下部に「開始」「終了」ボタンが表示される.「開始」をタップして記録を開始する.記録を終えるには「終了」をタップする.

ログの取得開始には「開始」をタップ
ログの取得開始には「開始」をタップ

ログのエクスポート

 ルートヒストリーを起動した初期状態ではログが降順に表示されている.任意のログをタップすると下図のように上部にアイコンがいくつか表示される.左から2番目のアイコンをタップする.

ログをエクスポートするには左から二番目のアイコンをタップ
ログをエクスポートするには左から二番目のアイコンをタップ

 「アクション選択」画面に推移する.SNS共有,Export, Export(ルートヒストリー用)と選択肢が3つ表示される.ここでは Export をタップする.

「アクション選択」でExportをタップ
「アクション選択」でExportをタップ

 「ファイル形式選択」画面に推移する.GPX, XML と選択肢が2つ表示される.ここでは GPX をタップする.

「ファイル形式選択」でGPXをタップ
「ファイル形式選択」でGPXをタップ

 メールやGoogle Driveなど任意の方法でファイルを送る.ファイルサイズはさほど大きくならないため,メールに添付しても問題ない.

ファイルを添付するアプリを選択
ファイルを添付するアプリを選択

QGISでGPXファイルを開く

 送付した GPX ファイルをQGISにドラッグアンドドロップすると,下図のように「追加するアイテムを選択」画面が開く.route_points, routes, track_points, tracks, waypoints と5つのアイテムがあるようだが,実際のデータは track_points と tracks にしかないようだ.「レイヤを追加」ボタンをクリックする.

GPXファイルをQGISで開く
GPXファイルをQGISで開く

シェープファイルにエクスポート

 レイヤを右クリックして「エクスポート」「新規ファイルに地物を保存」する.track_points は Point, tracks は LineString のようである.

QGISでシェープファイルにエクスポート
QGISでシェープファイルにエクスポート

Shape2SQL で SQL Serverにアップロード

 下図のようにアップロードする.しかし SQL Serer にアップロードできたのは Point の track_points だけであった.LineString の track がアップロードできなかった理由は不明である.

Shape2SQLでSQL Serverにアップロード
Shape2SQLでSQL Serverにアップロード

クエリで中身を覗く

SELECT	geog.Lat	AS Latitude
,	geog.Long	AS Longitude
,	geog.M	AS M
,	geog.Z	AS Z
,	geog.STAsText()	AS WKT
  FROM [CommutingDB].[dbo].[T_From3To1Points]
(1491 行処理されました)

 M, Z は NULL が返った.ルートヒストリーの ele にはおそらく標高が格納されていると思われるが,可能なら Z 属性に格納しておいてほしい.また,time に格納されている時刻は世界標準時のようである.アプリで表示される時刻とは異なるため,混乱するかもしれない.

STPointFromText() メソッドでZ属性を追加する

 テーブルに Location 列を追加してデータ型を geography とし,下記クエリを実行する.

UPDATE	dbo.T_From3To1Points
SET	Location = geography::STPointFromText('POINT(' + CAST(geog.Long AS varchar(255)) + ' ' + CAST(geog.Lat AS varchar(255)) + ' ' + CAST(ele AS varchar(255)) + ')', 4326)
(1491 行処理されました)

 結果を確認する.

SELECT	Location.AsTextZM()	AS WKT
FROM	dbo.T_From3To1Points

ルートヒストリーの track_points のメタデータ

 ルートヒストリーの track_points のメタデータであるが,作者が仕様を公開していないので詳細は不明である.

track_fid
track_seg_
track_se_1
ele
time
magvar
geoidheigh
name
cmt
desc
src
link1_href
link1_text
link1_type
link2_href
link2_text
link2_type
sym
type
fix
sat
hdop
vdop
pdop
ageofdgpsd
dgpsid

まとめ

 スマホのアプリ(ルートヒストリー)で GPX ファイルとしてログを取得し,QGIS でシェープファイルに変換して Shape2SQL で SQL Serverにアップロードした.LineString データが欲しかったのだが,SQL Server にアップロードできなかった.原因は不明である.Point データは SQL Server にアップロードできた.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください