diff --git a/GPX/Examples/Static_Track/Static_Track.pde b/GPX/Examples/Static_Track/Static_Track.ino similarity index 76% rename from GPX/Examples/Static_Track/Static_Track.pde rename to GPX/Examples/Static_Track/Static_Track.ino index 05e99f0..65938d3 100644 --- a/GPX/Examples/Static_Track/Static_Track.pde +++ b/GPX/Examples/Static_Track/Static_Track.ino @@ -19,9 +19,9 @@ void loop(){ Serial.print(myGPX.getTrakOpen()); Serial.print(myGPX.getInfo()); Serial.print(myGPX.getTrakSegOpen()); - Serial.print(myGPX.getPt(GPX_TRKPT,"41.123","-71.456")); - Serial.print(myGPX.getPt(GPX_TRKPT,"42.123","-72.456")); - Serial.print(myGPX.getPt(GPX_TRKPT,"43.123","-73.456")); + Serial.print(myGPX.getPt(GPX_TRKPT,41.123,-71.456, 20)); + Serial.print(myGPX.getPt(GPX_TRKPT,42.123,-72.456, 50)); + Serial.print(myGPX.getPt(GPX_TRKPT,43.123,-73.456, 70)); Serial.print(myGPX.getTrakSegClose()); Serial.print(myGPX.getTrakClose()); Serial.print(myGPX.getClose()); diff --git a/GPX/GPX.cpp b/GPX/GPX.cpp index 572f478..72bb75d 100644 --- a/GPX/GPX.cpp +++ b/GPX/GPX.cpp @@ -47,16 +47,16 @@ String GPX::getClose(){ String GPX::getMetaData(){ String localStr(_GPX_META_HEAD); if (_metaName.length() > 0){ - localStr = localStr + String(_GPX_NAME_HEAD); - localStr = localStr + wrapCDATA(_metaName); - localStr = localStr + String(_GPX_NAME_TAIL); + localStr += String(_GPX_NAME_HEAD); + localStr += wrapCDATA(_metaName); + localStr += String(_GPX_NAME_TAIL); } if (_metaDesc.length() > 0){ - localStr = localStr + String(_GPX_DESC_HEAD); - localStr = localStr + wrapCDATA(_metaDesc); - localStr = localStr + String(_GPX_DESC_TAIL); + localStr += String(_GPX_DESC_HEAD); + localStr += wrapCDATA(_metaDesc); + localStr += String(_GPX_DESC_TAIL); } - localStr = localStr + String(_GPX_META_TAIL); + localStr += String(_GPX_META_TAIL); return localStr; } @@ -91,16 +91,36 @@ String GPX::getInfo(){ return localStr; } -String GPX::getPt(String typ, String lon, String lat){ +String GPX::getName() +{ + return _name; +} + +String GPX::getPt(String typ, float lon, float lat){ String localStr(_GPX_PT_HEAD); - localStr = localStr.replace("TYPE",typ); - localStr += lat + "\" lon=\""; - localStr += lon + "\">"; + localStr.replace("TYPE", typ); + localStr += String(lat) + "\" lon=\""; + localStr += String(lon) + "\">"; if (_ele.length() > 0){ localStr += _GPX_ELE_HEAD; localStr += _ele; localStr += _GPX_ELE_TAIL; } + if (_time.length() > 0){ + localStr += _GPX_TIME_HEAD; + localStr += _time; + localStr += _GPX_TIME_TAIL; + } + if (_num_sat.length() > 0){ + localStr += _GPX_NUM_SAT_HEAD; + localStr += _num_sat; + localStr += _GPX_NUM_SAT_TAIL; + } + if (_horizontal_accuracy.length() > 0){ + localStr += _GPX_HORIZONTAL_ACCURACY_HEAD; + localStr += _horizontal_accuracy; + localStr += _GPX_HORIZONTAL_ACCURACY_TAIL; + } if (_sym.length() > 0){ localStr += _GPX_SYM_HEAD; localStr += _sym; @@ -111,12 +131,36 @@ String GPX::getPt(String typ, String lon, String lat){ localStr += wrapCDATA(_src); localStr += _GPX_SRC_TAIL; } - localStr += String(_GPX_PT_TAIL).replace("TYPE",typ); + String ptTail(_GPX_PT_TAIL); + ptTail.replace("TYPE", typ); + localStr += ptTail; return localStr; } - -String GPX::getPt(String typ, String lon, String lat, String ele){ +String GPX::getPt(String typ, float lon, float lat, float ele){ + setEle(ele); + return getPt(typ, lon, lat); +} + +String GPX::getPt(String typ, float lon, float lat, float ele, String time){ + setEle(ele); + setTime(time); + return getPt(typ, lon, lat); +} + +String GPX::getPt(String typ, float lon, float lat, float ele, String time, int num_sat){ + setEle(ele); + setTime(time); + setNumSat(num_sat); + return getPt(typ, lon, lat); +} + +String GPX::getPt(String typ, float lon, float lat, float ele, String time, int num_sat, float horizontal_accuracy){ + setEle(ele); + setTime(time); + setNumSat(num_sat); + setHorizontalAccuracy(horizontal_accuracy); + return getPt(typ, lon, lat); } //Set Methods @@ -132,8 +176,8 @@ void GPX::setName(String name){ void GPX::setDesc(String desc){ _desc = desc; } -void GPX::setEle(String ele){ - _ele = ele; +void GPX::setEle(float ele){ + _ele = String(ele); } void GPX::setSym(String sym){ _sym = sym; @@ -142,6 +186,18 @@ void GPX::setSrc(String src){ _src = src; } +void GPX::setNumSat(int num_sat){ + _num_sat = String(num_sat); +} + +void GPX::setHorizontalAccuracy(float horizontal_accuracy){ + _horizontal_accuracy = String(horizontal_accuracy); +} + +void GPX::setTime(String time){ + _time = time; +} + //Private Functions String GPX::wrapCDATA(String input){ String localStr(" -#include +#include #define _GPX_HEAD "\n" #define _GPX_TAIL "\n" @@ -58,6 +57,10 @@ #define _GPX_SRC_TAIL "\n" #define _GPX_TIME_HEAD "\n" +#define _GPX_NUM_SAT_HEAD "" +#define _GPX_NUM_SAT_TAIL "\n" +#define _GPX_HORIZONTAL_ACCURACY_HEAD "" +#define _GPX_HORIZONTAL_ACCURACY_TAIL "\n" // 'Public' Tags #define GPX_TRKPT "trkpt" @@ -65,39 +68,48 @@ #define GPX_RTEPT "rtept" class GPX{ - public: - GPX(); - String getOpen(); - String getClose(); - String getMetaData(); - String getTrakOpen(); - String getTrakClose(); - String getTrakSegOpen(); - String getTrakSegClose(); - String getInfo(); - String getPt(String typ, String lon, String lat); - String getPt(String typ, String lon, String lat, String ele); - void setMetaName(String name); - void setMetaDesc(String desc); - void setName(String name); - void setDesc(String desc); - void setEle(String ele); - void setSym(String sym); - void setSrc(String src); - void setTime(String time); - private: - //Variables - String _metaName; - String _metaDesc; - String _name; - String _desc; - String _ele; - String _sym; - String _src; - String _time; +public: + GPX(); + String getOpen(); + String getClose(); + String getMetaData(); + String getTrakOpen(); + String getTrakClose(); + String getTrakSegOpen(); + String getTrakSegClose(); + String getInfo(); + String getName(); + String getPt(String typ, float lon, float lat); + String getPt(String typ, float lon, float lat, float ele); + String getPt(String typ, float lon, float lat, float ele, String time); + String getPt(String typ, float lon, float lat, float ele, String time, int num_sat); + String getPt(String typ, float lon, float lat, float ele, String time, int num_sat, float horizontal_accuracy); + void setMetaName(String name); + void setMetaDesc(String desc); + void setName(String name); + void setDesc(String desc); + void setEle(float ele); + void setSym(String sym); + void setSrc(String src); + void setNumSat(int num_sat); + void setHorizontalAccuracy(float horizontal_accuracy); + void setTime(String time); - //Functions - String wrapCDATA(String input); +private: + //Variables + String _metaName; + String _metaDesc; + String _name; + String _desc; + String _ele; + String _sym; + String _src; + String _time; + String _num_sat; + String _horizontal_accuracy; + + //Functions + String wrapCDATA(String input); }; #endif