大家好,

本人使用 Garmin Legend T, 看到網站上分享的景點大多是 PaPaGo 的格式, 所以想了一個方法可將
這些景點轉入 Garmin, 步驟有些麻煩,卻是可行的, 因為我一直這樣在用.

分享這個做法以拋磚引玉, 希望您提供您更好的做法.

限制/仍待改進事項/FAQ:
1. 步驟2須在命令視窗執行(Command Line Mode)
2. Garmin 航點名稱為10 碼(LegendT), 有時會切斷在中文字上(但不影響上傳)
3. GPS Utility 未註冊板航點只能上傳100點(分多次上傳即可)
4. 圖示(Symbol)的對應仍未完整, 您可自行加入.
5. 為何用 GPS Utility? 目前試過free且上傳中文無問題. g7towin 上傳中文有問題.
6. 為何不用 Garmin提供的 WTR? WTR 目前無法讀文字檔, 若要解析EVO檔很累.
7. Vista,V,2610 可用 GPS Utility 上傳航點嗎? 應該可以.

步驟:
1. 準備輸入檔, 可以是 PaPaGo 的匯出檔, 或是景點分享網站(如 http://7tour.us)得到的景點,
檔案的內容格式應是(例如檔名為 mypoint.txt):
Datum,WGS84,WGS84,0,0,0,0,0
WP,D,墾丁白沙灣||||旅遊點|水上活動, 21.933840000, 120.718560000,12/31/1989,00:00:00, 08/23/2004 02:00
WP,D,仙塘跡||||消費點|餐廳, 24.256200000, 120.785100000,12/31/1989,00:00:00, 08/23/2004 02:00
WP,D,惠來遺址||||旅遊點|寺廟/古蹟, 24.161780000, 120.636550000,12/31/1989,00:00:00, 08/23/2004 02:00
WP,D,花露農場||||旅遊點|動植物園, 24.333001000, 120.825454000,12/31/1989,00:00:00, 08/23/2004 02:00
WP,D,高美溼地||台中縣清水鎮高美里||休閒點|一般, 24.325005000, 120.552174000,12/31/1989,00:00:00, 08/23/2004 02:00
WP,D,薰衣草森林||||自建點|一般, 24.129380000, 120.841240000,12/31/1989,00:00:00, 08/23/2004 02:00

2. 用程式 papago2wpt.exe 轉成 wpt 的格式:
C:\>
C:\>papago2wpt.exe mypoint.txt > mypoint.wpt
C:\>

3. 用 GPS Utility(http://www.gpsu.co.uk) 讀取 mypoint.wpt(格式選 Waypoints(wpt)), 然後將其上傳(upload)到 Garmin 的 GPS.

papago2wpt.exe 的 source code(papago2wpt.c):
#include
#include
#include
#include
#include

#define MAX_STR_LENGTH 1024
#define PAPAGO_WAYPOINT_KEYWORD "WP,"
void process_point (char *);
void print_header (void);

char *symbol_list[100] = {
"住宿", "House",
"飯店", "House",
"登山", "Trail",
"步道", "Trail",
"古道", "Trail",
"購物", "Shopping Center",
"市場", "Shopping Center",
"森林區", "Park",
"公園", "Park",
"風景", "Scenic Area",
"古蹟", "Scenic Area",
"賞鳥", "Scenic Area",
"溫泉", "Showers",
"三角點", "Weigh Station",
"小木屋", "House",
"動植物園", "Zoo",
"博物", "Museum",
"美術", "Museum",
"露營地", "Campground",
"水上活動", "Swimming Area",
"動物園", "Zoo",
"餐廳", "Knife & Fork",
"小吃", "Knife & Fork",
"咖啡", "Knife & Fork",
0, 0
};

int main (int argc, char **argv)
{
char str[MAX_STR_LENGTH];
FILE *fp;

if (argc != 2)
{
printf ("Usage: %s file_name\n", argv[0]);
return (1);
}

fp = fopen (argv[1], "r");
if (fp == NULL)
{
printf ("%s open error.\n", argv[1]);
return (-1);
}

print_header ();

while (!feof (fp))
{
fgets (str, MAX_STR_LENGTH, fp);
if (feof (fp))
break;
if (strncmp(str, PAPAGO_WAYPOINT_KEYWORD,strlen (PAPAGO_WAYPOINT_KEYWORD)) == 0)
process_point (&str[5]);
}
fclose (fp);
return (0);
}

void process_point (char *str)
{
char *str_ptr;
int count, i;
char name[MAX_STR_LENGTH];
double value_N, value_E;
char symbol[20];
char pseudo_str[MAX_STR_LENGTH];
char output[MAX_STR_LENGTH];
char tmpstr[MAX_STR_LENGTH];

memset (output, 0, MAX_STR_LENGTH);
strcpy (output, "W ");

strcpy (pseudo_str, str);
str_ptr = strtok (pseudo_str, ",");

memset (name, 0, MAX_STR_LENGTH);
strcpy (name, str_ptr);

name[10] = 0;

memset (tmpstr, 0, MAX_STR_LENGTH);
sprintf (tmpstr, "%-10s", name);
strcat (output, tmpstr);

strcpy (symbol, "Flag");

i = 0;
while (symbol_list[i])
{
if (strstr (str_ptr, symbol_list[i]))
strcpy (symbol, symbol_list[i + 1]);
i = i + 2;
}
count = 0;

while (str_ptr)
{
str_ptr = strtok (NULL, ",");
if (count == 0)
{
value_N = atof (str_ptr);
sprintf (tmpstr, " N%9.6f", value_N);
strcat (output, tmpstr);
}
if (count == 1)
{
value_E = atof (str_ptr);
sprintf (tmpstr, " E%9.6f", value_E);
strcat (output, tmpstr);
}
++count;
}
sprintf (tmpstr, " %s\n", symbol);
strcat (output, tmpstr);

printf ("%s", output);
}

void print_header (void)
{
printf ("H SOFTWARE NAME & VERSION\n");
printf ("I GPSU 4.15 FREEWARE VERSION\n");
printf ("S DateFormat=yyyy/m/d\n");
printf ("S Units=M,M\n");
printf ("S SymbolSet=2\n");
printf ("\n");
printf ("H R DATUM\n");
printf ("M E WGS 84 100 0.0000000E+00 0.0000000E+00 0 0 0\n");
printf ("\n");
printf ("H COORDINATE SYSTEM\n");
printf ("U LAT LON DEG\n");
printf ("\n");
printf ("F ID-------- Latitude Longitude Symbol------------- T Comment\n");
}
對不起,

include 為:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
stdio.h
string.h
stdlib.h
math.h
ctype.h

感謝您分享,
但素有一些不了解?
是否只要執行步驟1,2,3就好?
其他下文不必理會!...
謝謝!

貴人 wrote:
感謝您分享,
但素有一些不了解?
是否只要執行步驟1,2,3就好?
其他下文不必理會!...
謝謝!


很對不起, 我沒有說清楚:
下文是 source code(papago2wpt.c) 原始檔, 要將其編譯成 papago2wpt.exe 才可進行步驟2.
我試試看能否將 papago2wpt.exe 上傳上來.

附加壓縮檔: mobile01-d12940966bb5f183330d9f53b1cd71a5.zip
很不錯的分享,
先加分~
下班回家再試試看,
謝謝您!
剛剛試了一下! 太棒了!
如果能讓 2610 報出測速照相的話. 那就更好了.
請問前輩
匯入之後是變'內建景點'還是'自建景點'
謝謝
tim wrote:
剛剛試了一下! 太棒了!
如果能讓 2610 報出測速照相的話. 那就更好了.

咦? 2610 有像 GPS V 的警示點功能嗎?
我是還沒有 2610,但是我看去 Garmin 網站上下載的使用手冊上好像沒有提到
這個功能。

GPS V 好像也只是加約 10 個警示點吧,台灣的測速照相點可能有好幾千個吧。

請知道的大大幫忙解答一下喔。
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!