聊聊 GPX (GPS Exchange Format)

文章最後更新於 2023 年 1 月 11 日

什麼是GPX?

GPX (GPS Exchange Format) 是一種用於交換 GPS 資料的標準格式,它是一個基於 XML 的開放標準。你可以使用各種程式語言來解析 GPX 檔案。下面是一些常用的方法:

  • 在 Python 中,你可以使用 gpxpy 庫來解析 GPX 檔案。它是一個用於解析和生成 GPX 檔案的簡單工具,可以輕鬆地讀取、修改和寫入 GPX 檔案。
  • 在 JavaScript 中,你可以使用 js-gpx 庫來解析 GPX 檔案。它是一個用於 JavaScript 的輕量級 GPX 解析器,可以在客戶端或服務器上使用。
  • 在 Java 中,你可以使用 GpxParser 庫來解析 GPX 檔案.

如果你有足夠的 XML 基礎,可以使用 XML 解析庫來手動解析 GPX 文件。

如何解析GPX?

用 Python 解析 GPX 的範例

以下是使用 Python 和 gpxpy 庫解析 GPX 檔案的範例:

import gpxpy

# 讀取 GPX 檔案
with open('example.gpx', 'r') as gpx_file:
    gpx = gpxpy.parse(gpx_file)

# 遍歷所有路徑和路徑記錄
for track in gpx.tracks:
    for segment in track.segments:
        for point in segment.points:
            print('Point at ({0},{1}) -> {2}'.format(point.latitude, point.longitude, point.elevation))

# 遍歷所有標記
for waypoint in gpx.waypoints:
    print('waypoint {0} -> ({1},{2})'.format(waypoint.name, waypoint.latitude, waypoint.longitude))

這個範例將解析給定的 GPX 檔案(這裡是 “example.gpx”),並遍歷其中的所有路徑、路徑記錄和標訖。 每個路徑記錄點的經緯度和海拔高度都會被列印出來。 每個標記的名稱、經緯度也會被列印出來。

你可以根據自己的需要更改這個範例。比如说你可以根據你需要的資訊來進行遍歷路徑記錄點和標記,進行資料處理.

另外,gpxpy 庫還提供了許多其他的功能來輕鬆地修改和寫入 GPX 檔案, 可以上gpxpy的github查看文件以及更多的範例。

用 JavaScript 解析 GPX 的範例

以下是使用 JavaScript 和 js-gpx 庫解析 GPX 檔案的範例:

const GPX = require('js-gpx');
const fs = require('fs');

// 讀取 GPX 檔案
const gpxData = fs.readFileSync('example.gpx', 'utf8');

// 解析 GPX 檔案
const gpx = new GPX(gpxData);

// 遍歷所有路徑和路徑記錄
gpx.tracks.forEach(track => {
    track.segments.forEach(segment => {
        segment.points.forEach(point => {
            console.log(`Point at (${point.latitude}, ${point.longitude}) -> ${point.elevation}`);
        });
    });
});

// 遍歷所有標記
gpx.waypoints.forEach(waypoint => {
    console.log(`waypoint ${waypoint.name} -> (${waypoint.latitude}, ${waypoint.longitude})`);
});

這個範例將解析給定的 GPX 檔案(這裡是 “example.gpx”),並遍歷其中的所有路徑、路徑記錄和標記。 每個路徑記錄點的經緯度和海拔高度都會被列印出來。 每個標記的名稱、經緯度也會被列印出來。

就如同 python 範例,你也可以根據自己的需要更改這個範例。 你可以根據你需要的資訊來進行遍歷路徑記錄點和標記,進行資料處理.

需要注意的是,在使用上述程式碼之前,需要先安裝 “js-gpx” 和 “fs” 這兩個library

npm install js-gpx fs

用 Java 解析 GPX 格式 的範例

以下是使用 Java 和 GpxParser 庫解析 GPX 檔案的範例:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

import net.sf.gpxparser.GPXParser;
import net.sf.gpxparser.ParseException;
import net.sf.gpxparser.Parser;
import net.sf.gpxparser.Track;
import net.sf.gpxparser.TrackSegment;
import net.sf.gpxparser.gpx.GPX;
import net.sf.gpxparser.gpx.TrackPoint;

public class GPXReader {

    public static void main(String[] args) throws Exception {
        File gpxFile = new File("example.gpx");
        InputStream inputStream = new FileInputStream(gpxFile);

        GPXParser parser = new Parser();
        GPX gpx = parser.parseGPX(inputStream);

        //遍歷所有路徑和路徑記錄
        List<Track> tracks = gpx.getTracks();
        for (Track track : tracks) {
            for (TrackSegment segment : track.getTrackSegments()) {
                for (TrackPoint point : segment.getTrackPoints()) {
                    System.out.println("Point at (" + point.getLatitude() + ", " + point.getLongitude() + ") -> "
                            + point.getElevation());
                }
            }
        }

        //遍歷所有標記
        List<net.sf.gpxparser.gpx.Waypoint> waypoints = gpx.getWaypoints();
        for (net.sf.gpxparser.gpx.Waypoint waypoint : waypoints) {
            System.out.println("waypoint " + waypoint.getName() + " -> (" + waypoint.getLatitude() + ", "
                    + waypoint.getLongitude() + ")");
        }
    }

}

這個範例會解析給定的 GPX 檔案(這裡是 “example.gpx”),並遍歷其中的所有路徑、路徑記錄和標記。 每個路徑記錄點的經緯度和海拔高度都會被列印出來。 每個標記的名稱、經緯度也會被列印出來。

就如同 python 範例,你也可以根據自己的需要更改這個範例。 你可以根據你需要的資訊來進行遍歷路徑記錄點和標記,進行資料處理。

需要注意的是,在使用上述程式碼之前,你需要先在項目中添加 GpxParser 庫的依賴。你可以透過 maven 或 gradle 來安裝它。

如果使用Maven:

<dependency>
    <groupId>net.sf.gpxparser</groupId>
    <artifactId>gpxparser</artifactId>
    <version>1.4</version>
</dependency>

如果使用Gradle:

implementation 'net.sf.gpxparser:gpxparser:1.4'

希望這些範例對您有所幫助!

關於作者

卡哥
卡哥
我是Oscar (卡哥),前Yahoo Lead Engineer、高智商同好組織Mensa會員,超過十年的工作經驗,服務過Yahoo關鍵字廣告業務部門、電子商務及搜尋部門,喜歡彈吉他玩音樂,也喜歡投資美股、虛擬貨幣,樂於與人分享交流!

如果對文章內容有任何問題,歡迎在底下留言讓我知道。
如果你喜歡我的文章,可以按分享按鈕,讓更多的人看見我的文章。

網友留言