從裝置(智慧型手機、GPS 追蹤器)收集 GPS 位置,儲存在 SQLite 資料庫中並允許顯示在地圖上(OSM 或 Google)。
js/GM_utils/
) docker
複製到您的伺服器(例如重新命名為gps-server
)webapp
(如果需要的話tcp_udp_http_bridge
)複製到gps-server
目錄中auth/.htpasswd
中包含一個使用者admin
,其密碼為changeme
admin/.htaccess
中調整 .htpasswd 檔案的路徑。需要絕對路徑!htpasswd /path-to-htpasswd-file/.htpasswd myusername mypassword
或線上產生器https://www.j-berkemeier.de/GPXViewer/
取得 javascript GPXViewer 並將資料夾 GM_Utils 複製到gpstracker/js/
google maps api key application
./js/GM_Utils/GPX2GM_Defs.js
並取消註解包含JB.GPX2GM.GM_Api_key
的行並將 API 金鑰新增為值1 * * * * /usr/bin/wget -O /dev/null -o /dev/null https://servername/gpstracker?checkserver=SECRETKEY >/dev/null 2>&1
owntracks/<username>
例如owntracks/gps
mqtt-bridge
下提供了橋接代碼,用於從 MQTT 伺服器提取資料並將其發送到簡單 GPS 資料伺服器docker-compose.yml
檔案或設定對應的環境變數(伺服器、密碼、秘密...)docker-compose build
docker-compose up -d
sudo docker exec gps-mqtt sh -c "mosquitto_passwd -b mosquitto/config/password.txt <username> <password>"
devices.config
複製到 ./exe/ 目錄。這包含不同格式的正規表示式(例如 OpenGTS、TK103)devices.config
html/gpxviewer_html.template
中的 html 範本來控制外觀和行為js/GM_utils/GPX2GM_Defs.js
中GO 代碼開啟一個連接埠並接受透過 TCP 和 UDP 的連線。伺服器只是消化資料包並且(通常)不回應。接收到的資料與已知裝置格式的正規表示式(./exe/devices.config)進行比對。如果找到匹配且裝置 ID 已知,則 GPS 資料將轉換為 PHP 程式碼所需的格式,並透過 HTTP 連線傳遞到伺服器(例如 localhost/gpstracker/index.php)。 GPS 位置隨後儲存在資料庫中。傳遞給伺服器的參數:
-port <portnumber>
-httpserver <server name - e.g. localhost>
-urlpath <path on server>
-key <secret key in order to check the status of the server - used by PHP>
-verbose - print raw messages, which allows to determine the format send by the device
呼叫範例
nohup tcp_udp_http_bridge -port 20202 -httpserver localhost -urlpath /gpstracker/index.php -key 123456
tcp/udp 伺服器可以處理 AES 加密封包。這需要./exe/encrypt_psk.config
中的伺服器範圍 PSK。目前,這僅在我的 Android 專用 GPS 記錄器版本中實現。
大多數設備以 NMEA GPRMC 記錄的形式提供資料(請參閱 https://de.wikipedia.org/wiki/NMEA_0183)
$GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
identifier, time, Active/Void, latitude, N/S, longitude, E/W, speed, angle, date, magnetic deviation, E/W, signal integrity, check sum
緯度和經度以度和分 (ddmm.mmmm) 為單位給出,由伺服器以度為單位儲存。速度以節為單位,由伺服器以米/秒為單位儲存。
通常使用簡化的 GPRMC 記錄(無磁偏差),並帶有設備類型、已識別設備的附加識別碼。所識別的通常是設備的 IMEI 號碼。由於 GPRMC 缺乏高度和精度/準確度,有時會添加這些。校驗和是透過 $ 和 * 之間的所有字元(ASCII 代碼)進行異或計算得出的
HTTP 格式
https://my-server.com?time=UTC&lat=LATITUDE&lon=LONGITUDE&alt=ALTITUDE&acc=ACCURACY&id=DEVICEID (lat and lon given in degree 0-180 and 0-360, respectively) or
https://my-server.com?id=DEVICEID&gprmc=<GPRMC-RECORD> or
TCP/UDP 格式
適用於 Android 的 GPS 記錄器(OpenGTS 格式)
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20
username/deviceid/GPRMC-RECORD
適用於 Android 的 GPS 記錄器,附加海拔高度
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20,alt=100.5
商業設備 (TCP/UDP)
存在不同的格式。通常,2-3 個字元的短標頭後面跟著裝置的 IMEI/裝置識別號碼、2 個字元的狀態和或多或少完整的 GPRMC 記錄(不含 $GPRMC 標頭)。可能會在末尾添加一些狀態位。大多數設備也會發送心跳訊息,其格式不同。有些設備需要登入才能開始通訊。該協定包含在伺服器和裝置配置中,但目前未經測試。目前 devices.config 中僅包含 TK103B H02 設備。
透過 UDP 的 GPS 位置訊息範例
*HQ,7893267561,V1,050316,A,2212.8745,N,11346.6574,E,14.28,028,220902,FFFFFFFF#
HQ 是製造商 ID,後面跟著識別號碼和訊息類型「V1」。 GPRMC 記錄缺少 $GPRMC 標頭、磁偏差和校驗和。在訊息的末尾,給出了狀態資訊。