24#include <wx/tokenzr.h>
31PositionParser::PositionParser(
const wxString& src) {
33 if (FindSeparator(src)) {
34 latitude = fromDMM(latitudeString);
35 longitude = fromDMM(longitudeString);
36 if ((latitude != 0.0) && (longitude != 0.0)) parsedOk =
true;
40bool PositionParser::FindSeparator(
const wxString& src) {
42 wxString posPartOfSeparator =
"";
50 int re_compile_flags = wxRE_ICASE;
51#ifdef wxHAS_REGEX_ADVANCED
52 re_compile_flags |= wxRE_ADVANCED;
56 "<[a-z,A-Z]*\\s*[a-z,A-Z]*=\"([0-9,.]*)\"\\s*[a-z,A-Z]*=\"([-,0-9,.]*)"
60 if (regex.IsValid()) {
61 if (regex.Matches(src)) {
62 int n = regex.GetMatchCount();
63 latitudeString = regex.GetMatch(src, 1);
64 longitudeString = regex.GetMatch(src, 2);
65 latitudeString.Trim(
true);
66 latitudeString.Trim(
false);
67 longitudeString.Trim(
true);
68 longitudeString.Trim(
false);
76 wxStringTokenizer tk1(src, separator);
77 if (tk1.CountTokens() == 2) {
78 latitudeString = tk1.GetNextToken();
79 latitudeString.Trim(
true);
80 latitudeString.Trim(
false);
81 longitudeString = tk1.GetNextToken();
82 longitudeString.Trim(
true);
83 longitudeString.Trim(
false);
89 wxStringTokenizer tk2(src, separator);
90 if (tk2.CountTokens() == 2) {
91 latitudeString = tk2.GetNextToken();
92 latitudeString.Trim(
true);
93 latitudeString.Trim(
false);
94 longitudeString = tk2.GetNextToken();
95 longitudeString.Trim(
true);
96 longitudeString.Trim(
false);
102 wxStringTokenizer tk3(src, separator);
103 if (tk3.CountTokens() == 2) {
104 latitudeString = tk3.GetNextToken();
105 latitudeString.Trim(
true);
106 latitudeString.Trim(
false);
107 longitudeString = tk3.GetNextToken();
108 longitudeString.Trim(
true);
109 longitudeString.Trim(
false);
115 wxStringTokenizer tk4(src, separator);
116 if (tk4.CountTokens() == 2) {
117 latitudeString = tk4.GetNextToken();
118 latitudeString.Trim(
true);
119 latitudeString.Trim(
false);
120 longitudeString = tk4.GetNextToken();
121 longitudeString.Trim(
true);
122 longitudeString.Trim(
false);
128 wxStringTokenizer tk5(src, separator);
129 if (tk5.CountTokens() == 2) {
130 latitudeString = tk5.GetNextToken();
131 latitudeString.Trim(
true);
132 latitudeString.Trim(
false);
133 longitudeString = tk5.GetNextToken();
134 longitudeString.Trim(
true);
135 longitudeString.Trim(
false);
141 posPartOfSeparator =
"N";
142 wxStringTokenizer tk6(src, separator);
143 if (tk6.CountTokens() == 2) {
144 latitudeString = tk6.GetNextToken() << posPartOfSeparator;
145 latitudeString.Trim(
true);
146 latitudeString.Trim(
false);
147 longitudeString = tk6.GetNextToken();
148 longitudeString.Trim(
true);
149 longitudeString.Trim(
false);
155 posPartOfSeparator =
"S";
156 wxStringTokenizer tk7(src, separator);
157 if (tk7.CountTokens() == 2) {
158 latitudeString = tk7.GetNextToken() << posPartOfSeparator;
159 latitudeString.Trim(
true);
160 latitudeString.Trim(
false);
161 longitudeString = tk7.GetNextToken();
162 longitudeString.Trim(
true);
163 longitudeString.Trim(
false);
Navigation Utility Functions without GUI dependencies.
String positions parsing.