Posts: 7,529
Threads: 230
Joined: Aug 2007
Folgenden Thread könnten andere auch interessant finden:
Moin Christian,
Danke für die Antwort.
Aber könntest Du mir mal einen Beispieldatensatz geben, wie der zum
Importieren aufgebaut sein muss?
Vielen Dank.
Michael.
Am Thu, 03 Apr 2008 08:37:17 +0200 hat Christian Pesch
<Christian_Pesch@gmx.de> geschrieben:
> Hallo Michael,
>
> kannst Du aus den Zeile unten nicht RMC-Datensätze machen?
> Das wäre wohl das einfachste, oder?
>
> Gruss
> Christian
>
> Michael Wicher schrieb:
>>
>> Hallo Christian,
>>
>>
>> vielen Dank für dieses super Tool!!
>> Allerdings habe ich noch ein kleines Problem.
>> Ich bekomme die GPS Koordinaten als ASCII-Zeichen in einer TXT-Datei
>> (o.ä.).
>>
>> Hier ein kleines Beispiel:
>>
>> A,5038.4251,N,00944.5372,E,055.6,009.8,A
>> A,5038.6425,N,00944.7727,E,056.3,043.6,A
>> A,5038.8766,N,00944.9752,E,052.3,015.6,A
>> A,5039.1450,N,00945.0684,E,051.6,013.2,A
>>
>>
>> Das sind jeweils Teile aus einem RMC-Datensatz, den ich vom meinem
>> GPS-Modul (Furuno) in ASCII empfange und dann direkt weiter verarbeiten
>> möchte.
>> Wie kann ich diese importieren?
>>
>> Für Deine Mühen vielen Dank im Vorraus!
>> Michael.
>>
>>
>
>
--
Christian
Posts: 7,529
Threads: 230
Joined: Aug 2007
Hallo Michael,
kannst Du reguläre Ausdrücke lesen ;-) ?
private static final Pattern RMC_PATTERN = Pattern.
compile(BEGIN_OF_LINE + "RMC" + SEPARATOR +
"([\\d\\.]*)" + SEPARATOR + // UTC Time
"[AV]" + SEPARATOR +
"([\\d\\.]+)" + SEPARATOR + "([NS])" + SEPARATOR +
"([\\d\\.]+)" + SEPARATOR + "([WE])" + SEPARATOR +
"[\\d\\.]*" + SEPARATOR + // Speed over ground, knots
"[\\d\\.]*" + SEPARATOR +
"(\\d*)" + SEPARATOR + // Date, ddmmyy
"[\\d\\.]*" + SEPARATOR +
"[\\d\\.]*" + SEPARATOR + "?" +
"[AEW]?" +
END_OF_LINE);
RouteConverter interpretiert:
$GPRMC,180114,A,4808.9490,N,00928.9610,E,000.0,000.0,160607,, ,A*76
$GPRMC,140403.000,A,4837.5194,N,00903.4022,E,15.00,0.00,260707,, *3E
sowie:
$GPGGA,130441.89,5239.3154,N,00907.7011,E,1,08,1.25,16.76,M,46.79,M,,*6D
$GPWPL,5334.169,N,01001.920,E,STATN1*22
$GPZDA,032910,07,08,2004,00,00*48
$PMGNTRK,4914.967,N,00651.208,E,000199,M,152224,A,KLLERTAL-RADWEG,210307*48
D.h. für Dich aus
A,5038.4251,N,00944.5372,E,055.6,009.8,A
wird
$GPRMC,180114,A,5038.4251,N,00944.5372,E,055.6,009.8,160607,,*AB
wobei
180114 die Uhrzeit im Format HHMMSS,
160607 das Datum im Format TTMMYY sowie
AB die Checksumme (die RouteConverter ignoriert, da sie meist falsch ist :-()
Die Checksumme berechnet sich so:
private byte computeChecksum(String line) {
byte result = 0;
for (int i = 0; i < line.length(); i++) {
result ^= line.charAt(i);
}
return result;
}
private boolean hasValidChecksum(String line) {
String lineForChecksum = line.substring(1, line.length() - 3);
byte expected = computeChecksum(lineForChecksum);
String actualStr = line.substring(line.length() - 2);
byte[] actual = HexDecoder.decodeBytes(actualStr);
if (actual.length != 1 || actual[0] != expected) {
String expectedStr = HexEncoder.encodeByte(expected);
log.severe("Checksum of '" + line + "' is invalid. Expected '" + expectedStr + "' but found '" + actualStr + "'");
return false;
}
return true;
}
Ich hoffe, das hilft.
Gruss
Christian
PS: Wäre das nicht etwas fürs Forum?
--
Christian
Posts: 7,529
Threads: 230
Joined: Aug 2007
Hallo Christian,
vielen Dank für die umfangreiche Antwort.
Den Aufbau der RMC-Daten ist mir bekannt, ebenfalls die Berechung der
Checksumme, da meine Software den kompletten String vom GPS-Modul empfängt
und die Daten nur übernimmt, falls die Checksumme OK ist. Ich wusste nur
nicht, wie ich zu importierenden Daten auszusehen haben und welche vom
Routconverter akzeptiert werden. Schön ist, dass die Checksumme egal ist,
da ich sie nicht weiterverarbeite und aus dem String entferne.
Ich denke, jetzt komme ich klar.
Nochmals vielen Dank und einen schönen Tag.
Michael.
--
Christian
Posts: 7,529
Threads: 230
Joined: Aug 2007
Hallo Christian,
leider muß ich mich nochmal melden.
So wie es mir scheint wird doch die Checksumme der Daten geprüft.
Ohne oder mit falscher Checksumme werden keine Koordinaten angenommen oder mache ich einen Denkfehler?
Wie unterscheidest Du eigentlich, welches Datenformat ausgewählt wird?
Automatisch anhand der Daten oder kann man das irgendwie einstellen?
Die Idee, die Sache im Forum abzuhandeln, ist eigentlich gut!
mfG
Michael.
--
Christian
Posts: 7,529
Threads: 230
Joined: Aug 2007
Hallo Michael,
sorry, Du hast recht. Ich hatte das falsch in Erinnerung.
Zeilen mit falscher Checksumme werden ignoriert, das lesen
der Datei jedoch nicht abgebrochen.
Das Erkennen funktioniert so: Alle Datenformate versuchen
die Datei zu lesen. Der erste, der es meint zu erkennen,
gewinnt :-)
Gruß
Christian
PS: Ich kopiere den Thread mal ins Forum.
http://www.routeconverter.de/forum/showt...php?tid=92
--
Christian
|