亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mc_gpx.cpp

?? GPS Source code with C++. It is usefull for introducing gps
?? CPP
字號:
/*
  Name:         mc_gpx.cpp
  Copyright:    Keins
  Author:       Thomas Wiens
  Date: 19.02.07 18:04
  Description:  Es werden die gespeicherten GPS-Punkte aus dem Controller ausgelesen
                und als Trackpunkte im GPX-Format abgespeichert.
*/
/* Verwenden der seriellen Schnittstelle
   MSDN:
   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/msdn_serial.asp
 
   Klasse zur Verwendung der seriellen Schnittstelle
   http://www.winapi.net/index.php?inhalt=t3
*/
#include "mc_gpx.h"
#define DEBUG

using namespace std;

ofstream Ausgabe;
CSerial com;

const char GpxHeader[] =  "<?xml version=\"1.0\"?>\n"
                    "<gpx version=\"1.0\"\n"
                    " creator=\"GPS-Logger by T.Wiens\"\n"
                    " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
                    " xmlns=\"http://www.topografix.com/GPX/1/0\"\n"
                    " xsi:schemaLocation=\"http://www.topografix.com/GPX/1/0"
                    " http://www.topografix.com/GPX/1/0/gpx.xsd\">\n";
                    
// *****************************************************************************
// Funktion:
//                       get_data_from_logger
// 躡ergabeparameter:
//                       int com_port
//                                   Nummer des zu 鰂fnenden seriellen Ports
//                       char trackname
//                                   Bezeichnung der Tracks (max. 50 Zeichen)
//                       char track_description            
//                                   Beschreibung des Tracks (max. 50 Zeichen)
//                       char waypoint_names
//                                   Bezeichnung der Wegpunkte (falls vorhanden, werden durchnummeriert)
//  R點kgabewert:
//                       0 -> kein Fehler
//                       >0 -> Fehlercode siehe Headerfile                                                                                                                                                            
// ***************************************************************************** 
int get_data_from_logger(int com_port, char filename[50],char trackname[50], char track_description[50], char waypoint_names[50]) {
    tGPXtrackPoint gpx;
    const char trkpt_request[] = "$TREQ*\r\n";
    const char waypt_request[] = "$WREQ*\r\n";
    char buf[61], temp [20];
    int datasets;
        
    // *** Schnittstelle 鰂fnen **
    if(!com.Open(com_port, 4800, 8, NOPARITY, ONESTOPBIT)) {
        cout << "Fehler: Schnittstelle konnte nicht geoeffnet werden\n";
        return GPX_ERR_SERIAL_OPEN;
    }
    // *** Datei 鰂fnen ***
    Ausgabe.open(filename, ios_base::out);
    if (!Ausgabe.good()){
        cout << "Fehler: Datei " << filename << " konnte nicht zum Schreiben geoeffnet werden." << endl;
        return GPS_ERR_FILE_OPEN;
    }
    // GPX-Header schreiben
    Ausgabe << GpxHeader;
    Ausgabe << "<trk>\n";
    Ausgabe << "<name>" << trackname << "</name>\n";
    Ausgabe << "<desc>" << track_description << "</desc>\n";
    Ausgabe << "<trkseg>\n";
    
    // Anfragen wie viele Datens鋞ze aufgezeichnet wurden
    com.SendData(trkpt_request, sizeof(trkpt_request));
    // Antwort holen
    // Antwort in Form $TCNT,12*<CR><NL>       
    if(com.ReadData(buf, 20)) {
        extract_data(buf, "$TCNT,", "*\r\n");
        datasets = atoi(buf);
        cout << "Es sind "  << datasets << " Datensaetze vorhanden" << endl;
    }
    else {
        cout << "Fehler: Controller auf Anfrage der Anzahl Datensaetze falsch geantwortet" << endl;
        com.Close();
        return GPS_ERR_CONTR_COM;
    }    
    
    // Trackpoint Datens鋞ze abholen
    for (int i = 0; i < datasets; i++) {
        if (!get_gps_trkPoint(i, buf)) { 
            get_gpx_data(buf, &gpx);  
            add_gpx_trkPoint_to_file(&gpx);  
        }        
        else {
            com.Close();   
            return GPS_ERR_CONTR_COM;
        }
        
    } 
    // Ende des Track-Segmentes
    Ausgabe << "</trkseg>\n";
    Ausgabe << "</trk>\n";
    
    // Anfragen wie viele Waypoints aufgezeichnet wurden
    com.SendData(waypt_request, sizeof(waypt_request));
    if(com.ReadData(buf, 20)) {
        extract_data(buf, "$WCNT,", "*\r\n");
        datasets = atoi(buf);
        cout << "Es sind "  << datasets << " Wegpunkte vorhanden" << endl;
    }
    else {
        cout << "Fehler: Controller auf Anfrage der Anzahl Datensaetze falsch geantwortet" << endl;
        com.Close();
        return GPS_ERR_CONTR_COM;
    }  
    if (datasets > 0) {
        // Waypoint Datens鋞ze abholen
        for (int i = 0; i < datasets; i++) {   
            if (!get_gps_trkPoint(get_waypoint(i), buf)) { 
                get_gpx_data(buf, &gpx);  
                sprintf(temp, "%s %d", waypoint_names, i + 1);
                add_gpx_wayPoint_to_file(&gpx, temp);  
            }
            else {
                com.Close();                           
                return GPS_ERR_CONTR_COM;
            }
        }       
    }
    // Ende des GPX-Segmentes
    Ausgabe << "</gpx>\n";
    Ausgabe.close();
    com.Close();    
    return 0;
}

// *****************************************************************************
// Trackpoint abholen
// ***************************************************************************** 
int get_gps_trkPoint(int trkpt_number, char *line) {
    char buf[61], str[20];
    int ret_chars;
    // Anfragestring basteln
    strcpy(str, "$TSET,");
    sprintf(buf, "%i", trkpt_number);
    strcat(str, buf);
    strcat(str, "*\r\n");   
    // Anfrage senden
    com.SendData(str, strlen(str));
    ret_chars = com.ReadData(buf, TRKPT_DATASET_LENGTH);        
    // Antwort auswerten
    if (ret_chars) {
        extract_data(buf, "$", "*\r\n");
        if (strlen(buf) == TRKPT_DATASET_LENGTH - 4) {                             
            #ifdef DEBUG
            cout << "Datensatz Nr. " << trkpt_number + 1 << ": " << buf << endl;   
            #endif    
            strcpy(line, buf);              
        }
        else {
            #ifdef DEBUG 
            cout << "Fehlerhafte Datensatzlaenge!" << endl;
            #endif
            return GPS_ERR_CONTR_COM;
        }                     
    }
    else {
        #ifdef DEBUG 
        cout << "Fehler: Controller hat auf Datensatzanfrage nicht oder falsch geantwortet" << endl;
        #endif
        return GPS_ERR_CONTR_COM;    
    }
    return 0; 
}

// ***************************************************************************** 
// Wapoint abholen
// ***************************************************************************** 
int get_waypoint(int point_number) {
    char buf[61], str[20];  
    // Anfragestring basteln
    strcpy(str, "$WSET,");
    sprintf(buf, "%i", point_number);
    strcat(str, buf);
    strcat(str, "*\r\n");   
    // Anfrage senden
    com.SendData(str, strlen(str));     
    // Antwort auswerten
    if (com.ReadData(buf, WAYPT_DATASET_LENGTH)) {
        extract_data(buf, "$", "*\r\n");
        if (strlen(buf) == WAYPT_DATASET_LENGTH - 4) {                             
            #ifdef DEBUG
            cout << "Datensatz Nr. " << point_number + 1 << ": " << buf << endl;   
            #endif
            buf[5] = '\0';    
            return (atoi(buf));                   
        }
        else {
            #ifdef DEBUG 
            cout << "Fehlerhafte Datensatzlaenge!" << endl;
            #endif
            return GPS_ERR_CONTR_COM;
        }                     
    }
    else {
        #ifdef DEBUG 
        cout << "Fehler: Controller hat auf Datensatzanfrage nicht oder falsch geantwortet" << endl;
        #endif
        return GPS_ERR_CONTR_COM;    
    }     
}

// *****************************************************************************       
// Es wird ein Zeiger auf einen String 黚ergeben. Bei Auftreten von
// begin und end werden diese Zeichenketten entfernt.
// ***************************************************************************** 
int extract_data(char *ext_string, char begin[10], char end[10]) {
    char *ptr_anf;
    char *ptr_end;
    char buf[100];
    char temp[100];    
    strncpy(buf, ext_string, 99);    
    ptr_anf = strstr(buf, begin);
    ptr_end = strstr(buf, end);       
    if (ptr_anf && ptr_end) {
        *ptr_end = '\0';
        strcpy(temp, ptr_anf + strlen(begin)); 
        strcpy(ext_string, temp);
        return 0;
    }
    else {
        return 1;       // Zeichenketten nicht gefunden
    }
}

// *****************************************************************************  
// Umwandeln der Daten in das GPX Format
// *****************************************************************************  
void get_gpx_data(char *line, tGPXtrackPoint *gpx) {
    double grad, minutes, dezimal_lat, dezimal_lon;
    char temp[20];
    int altitude, i;   
    
    // Zeitstempel bauen
    // 0000160806 0000194137 0052153447 0008031685 0079NE
    // 0123456789 0123456789 0123456789 0123456789 012345    
    strcpy(gpx->datetime, "20");                                                 // Im 20.Jahrhundert
    gpx->datetime[2] = line[8];
    gpx->datetime[3] = line[9];
    gpx->datetime[4] = '-';
    gpx->datetime[5] = line[6];
    gpx->datetime[6] = line[7];
    gpx->datetime[7] = '-';
    gpx->datetime[8] = line[4];
    gpx->datetime[9] = line[5];
    gpx->datetime[10] = 'T';
    gpx->datetime[11] = line[14];
    gpx->datetime[12] = line[15];
    gpx->datetime[13] = ':';
    gpx->datetime[14] = line[16];
    gpx->datetime[15] = line[17];
    gpx->datetime[16] = ':';
    gpx->datetime[17] = line[18];
    gpx->datetime[18] = line[19];
    gpx->datetime[19] = 'Z';
    gpx->datetime[20] = '\0';
    #ifdef DEBUG
    cout << "datetime: " << gpx->datetime << endl;   
    #endif
    // *** Gradzahlen kopieren ***    
    // Breitengrad 0052153407
    for (i = 0; i < 4; i++) {
        temp[i] = line[i + 20];
    }
    temp[4] = '\0';
    grad = atof(temp); 
    #ifdef DEBUG   
    cout << "Breitenrad als Text: " << temp << endl;
    #endif
    temp[0] = line[24];
    temp[1] = line[25];
    temp[2] = '.';
    for (i = 0; i < 5; i++) {
        temp[i + 3] = line[i + 26];
    }   
    temp[7] = '\0';
    #ifdef DEBUG   
    cout << "Minuten als Text: " << temp << endl;
    #endif
    minutes = atof(temp);    
    dezimal_lat = grad + minutes / 60;   
    // S黡licher Breitengrad ist negativ
    if (line[44] == 'S')
        dezimal_lat = -dezimal_lat;
    #ifdef DEBUG
    cout << "Grad: " << grad << " Minuten: " << minutes << " Breitengrad dezimal: " << dezimal_lat << endl;
    #endif
    sprintf(gpx->latitude, "%.6f", dezimal_lat);
    #ifdef DEBUG
    cout << "Text: " << gpx->latitude << endl;
    #endif
    // L鋘gengrad
    for (i = 0; i < 4; i++) {
        temp[i] = line[i + 30];
    }
    temp[4] = '\0';
    grad = atof(temp);    
    temp[0] = line[34];
    temp[1] = line[35];
    temp[2] = '.';
    for (i = 0; i < 4; i++) {
        temp[i + 3] = line[i + 36];
    }   
    temp[7] = '\0';
    minutes = atof(temp);    
    dezimal_lon = grad + minutes / 60;   
    // Westlicher L鋘gengrad ist negativ
    if (line[45] == 'W')
        dezimal_lat = -dezimal_lon;
    #ifdef DEBUG
    cout << "Grad: " << grad << " Minuten: " << minutes << " Laengengrad dezimal: " << dezimal_lon << endl;
    #endif
    sprintf(gpx->longitude, "%.6f", dezimal_lon);
    #ifdef DEBUG
    cout << "Text: " << gpx->longitude << endl;    
    #endif    
    // H鰄enangabe
    temp[0] = line[40];
    temp[1] = line[41];
    temp[2] = line[42];
    temp[3] = line[43];
    temp[4] = '\0';
    altitude = atoi(temp);
    #ifdef DEBUG
    cout << "Hoehe: " << altitude << endl;
    #endif
    sprintf(gpx->altitude, "%d", altitude);
    #ifdef DEBUG
    cout << "Text: " << gpx->altitude << endl;    
    #endif  
}

void add_gpx_trkPoint_to_file(tGPXtrackPoint *gpx) {
    Ausgabe << "<trkpt lat=\"" << gpx->latitude << "\" ";
    Ausgabe << "lon=\"" << gpx->longitude << "\">\n";
    Ausgabe << "<ele>" << gpx->altitude << "</ele>\n";
    Ausgabe << "<time>" << gpx->datetime << "</time>\n";
    Ausgabe << "</trkpt>\n";
}

void add_gpx_wayPoint_to_file(tGPXtrackPoint *gpx, char *pointname) {
    Ausgabe << "<wpt lat=\"" << gpx->latitude << "\" ";
    Ausgabe << "lon=\"" << gpx->longitude << "\">\n";
    Ausgabe << "<name>" << pointname << "</name>\n";
    Ausgabe << "<type>Waypoint</type>\n";
    Ausgabe << "</wpt>\n";
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久不卡8050| 国产精品免费看片| 一区二区在线观看免费| 韩国精品免费视频| 欧美日韩成人一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 91精品国产入口在线| 国产精品传媒视频| 国产精品1区2区3区在线观看| 欧美人成免费网站| 樱桃国产成人精品视频| 粉嫩欧美一区二区三区高清影视| 日韩午夜电影av| 午夜欧美电影在线观看| 91色视频在线| 中文字幕制服丝袜一区二区三区| 蜜臀av一区二区| 欧美妇女性影城| 一区二区三区在线观看国产| 成人黄色网址在线观看| 久久精品夜色噜噜亚洲aⅴ| 另类专区欧美蜜桃臀第一页| 欧美伦理视频网站| 亚洲一二三四久久| 一本久久a久久精品亚洲| 国产精品福利一区二区| 成熟亚洲日本毛茸茸凸凹| 久久蜜臀中文字幕| 精品夜夜嗨av一区二区三区| 日韩午夜中文字幕| 奇米色一区二区三区四区| 欧美三级电影精品| 亚洲国产一区视频| 欧美日免费三级在线| 亚洲精品高清在线| 色94色欧美sute亚洲线路二| 972aa.com艺术欧美| 欧美韩日一区二区三区| 成人中文字幕电影| 国产精品伦理一区二区| 成人精品电影在线观看| 国产精品三级av| 不卡欧美aaaaa| 日韩一区欧美一区| 91在线免费视频观看| 亚洲日韩欧美一区二区在线| 色哟哟一区二区三区| 一区二区三区在线看| 欧美中文字幕一区二区三区 | 色综合天天天天做夜夜夜夜做| 国产精品污网站| jizz一区二区| 亚洲精品成人少妇| 欧美三区在线视频| 日本午夜精品一区二区三区电影| 91精品国产综合久久久久久久久久| 日本中文字幕一区| 日韩欧美123| 国产乱子伦一区二区三区国色天香 | 天堂va蜜桃一区二区三区漫画版| 日一区二区三区| 欧美一区二区视频在线观看| 蜜桃免费网站一区二区三区| www久久精品| 成人做爰69片免费看网站| 亚洲六月丁香色婷婷综合久久| 色综合色综合色综合色综合色综合 | 亚洲色图欧洲色图| 欧美性生活久久| 日韩有码一区二区三区| 精品成人在线观看| 不卡区在线中文字幕| 一区二区三区在线视频观看58| 欧美日本一道本在线视频| 久久电影网站中文字幕 | 6080日韩午夜伦伦午夜伦| 国产美女精品人人做人人爽| 国产精品狼人久久影院观看方式| 欧美亚洲动漫另类| 麻豆精品蜜桃视频网站| 国产精品美女久久久久久久久久久 | 亚洲国产人成综合网站| 精品国产亚洲一区二区三区在线观看| 国产精品1区2区3区在线观看| 亚洲三级电影全部在线观看高清| 欧美日韩精品电影| 国产精品18久久久久久久网站| 亚洲视频免费观看| 日韩亚洲欧美高清| 成人深夜福利app| 午夜精品视频在线观看| 国产日韩欧美电影| 欧美日韩一区二区在线视频| 国产精品一区二区果冻传媒| 一区二区不卡在线播放 | 久久精品欧美一区二区三区不卡| 91蜜桃网址入口| 久久www免费人成看片高清| 国产精品电影一区二区| 欧美一个色资源| 99久久精品国产网站| 美女久久久精品| 亚洲人xxxx| 26uuu国产日韩综合| 欧美在线一二三四区| 国产美女娇喘av呻吟久久| 亚洲高清不卡在线| 国产精品热久久久久夜色精品三区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲va中文字幕| 国产精品久久久久久久久搜平片| 91精品国产欧美一区二区18| 91在线porny国产在线看| 久久99九九99精品| 亚洲电影你懂得| 国产亚洲福利社区一区| 日韩一区二区三| 91蝌蚪国产九色| 国产成人精品午夜视频免费 | 亚洲欧洲三级电影| 欧美精品一区二区精品网| 欧美日韩在线播| 91在线云播放| 国产91露脸合集magnet| 精品在线播放免费| 日日夜夜一区二区| 一区二区日韩av| 国产精品国产三级国产普通话三级| 精品国产乱码久久久久久蜜臀| 在线观看亚洲a| 99国产欧美另类久久久精品 | 亚洲高清一区二区三区| 亚洲柠檬福利资源导航| 国产精品久久一级| 久久久一区二区三区捆绑**| 日韩一级成人av| 欧美一区二区精美| 欧美日本在线观看| 欧美日韩情趣电影| 在线亚洲人成电影网站色www| 99久久婷婷国产| 成人精品免费视频| 成人网页在线观看| 国产福利91精品| 国产一区二区三区四区五区入口| 久久精品999| 毛片一区二区三区| 蜜臀久久久久久久| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜成人免费视频| 亚洲18影院在线观看| 亚洲成人777| 午夜精品一区二区三区免费视频| 亚洲国产精品久久人人爱| 亚洲一区二区在线播放相泽| 亚洲乱码精品一二三四区日韩在线| 亚洲人精品午夜| 亚洲精品一二三| 亚洲综合免费观看高清在线观看| 一区二区三区免费观看| 亚洲一区在线观看网站| 亚洲大片精品永久免费| 亚洲成人免费av| 日韩精品1区2区3区| 免费日韩伦理电影| 久久99精品久久久久久动态图| 黑人巨大精品欧美黑白配亚洲| 国产麻豆欧美日韩一区| 国产成人a级片| 成人福利电影精品一区二区在线观看| 成人avav在线| 91麻豆文化传媒在线观看| 在线观看亚洲专区| 欧美美女喷水视频| 欧美成人综合网站| 国产性天天综合网| 日韩一区欧美小说| 亚洲成人综合网站| 美女精品一区二区| 国产成人免费在线观看不卡| 99久久99久久精品免费观看| 91成人在线观看喷潮| 91精品国产色综合久久ai换脸| 精品国产sm最大网站免费看| 国产精品午夜春色av| 一区二区在线观看不卡| 日本午夜精品一区二区三区电影| 国产一区二区调教| 99久久精品国产精品久久| 欧美色网站导航| 精品久久一区二区| 国产精品久久午夜| 午夜天堂影视香蕉久久| 精品一区二区三区免费视频| 99久久精品免费| 制服丝袜亚洲网站| 国产日韩影视精品| 亚洲国产综合在线| 国产伦精品一区二区三区视频青涩 | 亚洲sss视频在线视频|