從照片的 GPS 座標反推回 GPS 軌跡

昨天從棉花嶼回來後,不小心 GPS 被小孩摸走,弄一弄竟然把我辛苦收集的軌跡都刪除了,就算用了 testdisk 把整個 GPS 磁區重新搜尋也找不回來了,這可能是因為 Garmin GPS 收集的資料會存成 Current.gpx 檔案,這個檔案被她不知道怎麼按一按就覆寫了(就是沒有救的意思)。因此只能用另外的方法來推估移動的軌跡,例如說從已拍攝照片中的 GPS 座標依照時間連起來回推移動軌跡,本來想自己用 python 刻,但是以前常使用 exiftool 來讀寫相機的 exif (exchangeable image file format),看看有沒有相關的功能好了,找了一下說明竟然有從有座標的照片中反推 GPS 軌跡,雖然套用到單眼的照片中可能解析度沒這麼好,但總比一個一個點要快多了。以下是如何反推軌跡的說明(exifTool 是 command line 的程式,安裝就自行看一下官網說明):

1. 如果要輸出成 GPX 格式的話,就必須要有 GPX format 檔,依照官網說明的範例如下:

# 要回推軌跡的照片必須要有 GPS Latitude 和 GPS Longitude 這兩個地理標籤
# 可以使用以下 exiftool 指令來查詢:
exiftool -a -gps:all IMG_7103.JPG

GPS Latitude Ref                : North
GPS Latitude                    : 25 deg 29' 2.31"
GPS Longitude Ref               : East
GPS Longitude                   : 122 deg 6' 21.88"
GPS Altitude Ref                : Above Sea Level
GPS Altitude                    : 30.08391003 m
GPS Time Stamp                  : 02:05:14
GPS Speed Ref                   : km/h
GPS Speed                       : 0.03627746661
GPS Img Direction Ref           : Magnetic North
GPS Img Direction               : 233.1803279
GPS Dest Bearing Ref            : Magnetic North
GPS Dest Bearing                : 233.1803279
GPS Date Stamp                  : 2018:07:31
GPS Horizontal Positioning Error: 8 m

2. 接下來建立一個 gpx.fmt 檔案(在 windows 上可以使用記事本,*unix 的使用者就用 vim 吧,Mac 使用者可以用 TextEdit 之類的來編輯),檔案格式如參考下方(可在 gpx.fmt  下載):

# Original GPS format from https://www.sno.phy.queensu.ca/~phil/exiftool/geotag.html
#                                                                    
#[HEAD]<?xml version="1.0" encoding="utf-8"?>
#[HEAD]<gpx version="1.0"
#[HEAD] creator="ExifTool $ExifToolVersion" 
#[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
#[HEAD] xmlns="http://www.topografix.com/GPX/1/0"
#[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
#[HEAD]<trk>
#[HEAD]<name>航跡:2018-07-31</name>
#[HEAD]<number>1</number>
#[HEAD]<trkseg>
#[IF]  $gpslatitude $gpslongitude
#[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
#[BODY]  <ele>$gpsaltitude#</ele>                      
#[BODY]  <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%SZ")}</time>
#[BODY]</trkpt>
#[TAIL]</trkseg>
#[TAIL]</trk>
#[TAIL]</gpx>

<name>標籤包起來的部分可以自行命名這條軌跡的名稱,例如:航跡:2018-07-31

3. 最後輸入以下指令就完成了:

exiftool -fileOrder gpsdatetime -p gpx.fmt $放照片的目錄名稱 > $輸出的軌跡名稱.gpx

參數 -fileOrder 代表會按照 gps 的日期時間(gpsdatetime)來處理;而參數 -p 則代表要輸出的格式,也可以自行調整成你自己想要的格式(例如 KML or CSV)

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s