Geotagging via SMS und UMTS-Stick
Hallo,
ich hätte eine frage und komme im momment nicht so ganz klar damit.
Ich habe ein "Gerät" das sendet die aktuelle Position via SMS als "Google Maps URL" an meinen Windows PC an dem ein UMTS-Stick dran ist.
Jetzt hätte ich aber die Postionen gerne in Google Earth oder in einem ähnlichen Programm, hätte jemand eine Idee für eine Batch Datei?
Die Text Datei in der die SMS gespeichert wird sieht so aus:
Oder wen das nicht klappen sollte, dann hätte ich wenigstens gerne eine schöne Sicherungsdatei, in der die URLs stehen.
Vielleicht weiß es ja jemand.
Viele Grüße
Robin
ich hätte eine frage und komme im momment nicht so ganz klar damit.
Ich habe ein "Gerät" das sendet die aktuelle Position via SMS als "Google Maps URL" an meinen Windows PC an dem ein UMTS-Stick dran ist.
Jetzt hätte ich aber die Postionen gerne in Google Earth oder in einem ähnlichen Programm, hätte jemand eine Idee für eine Batch Datei?
Die Text Datei in der die SMS gespeichert wird sieht so aus:
2013-01-27 13:06:15'43 SMS: +49100000000 2013-01-27 13:05:49 [04]
27.01.2013 13:05
https://maps.google.de/maps?q=+48%C2%B024'10.25%22N+++9%C2%B058'18.83%22E&hl=de&ie=UTF8&ll=48.401742,9.97683&spn=0.013063,0.033023&sll=48.661847,9.003665&sspn=6.654792,16.907959&t=h&z=16
Oder wen das nicht klappen sollte, dann hätte ich wenigstens gerne eine schöne Sicherungsdatei, in der die URLs stehen.
Vielleicht weiß es ja jemand.
Viele Grüße
Robin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 197712
Url: https://administrator.de/forum/geotagging-via-sms-und-umts-stick-197712.html
Ausgedruckt am: 08.05.2025 um 09:05 Uhr
19 Kommentare
Neuester Kommentar
Hi Speider,
ich sehe keinerlei Geoinformation in der Zeile.
Anosonsten macht man das in etwa so, dass man die empfangene Zeile an eine vorhandene Datei anhängt. Das geht mit nahezu allen BATCH Kommandos.
In der Batch ist das das Zeichen ">>"getagt.txt oder .CSV. Dann kann man das Zeilenweise wieder abarbeiten.
Gruß
Netman
ich sehe keinerlei Geoinformation in der Zeile.
Anosonsten macht man das in etwa so, dass man die empfangene Zeile an eine vorhandene Datei anhängt. Das geht mit nahezu allen BATCH Kommandos.
In der Batch ist das das Zeichen ">>"getagt.txt oder .CSV. Dann kann man das Zeilenweise wieder abarbeiten.
Gruß
Netman
Hallo Speider13, willkommen im Forum.
Wenn du uns nun noch erzählst, wo du eine Zeil 3 siehst (gepostet hast du 2) und wie diese aussieht, könnte man vielleicht auch was daraus machen. Aus deinen Informationen kann ich diesbezüglich nichts nützliches entnehmen (und offensichtlich bin ich da nicht der einzige).
Grüße
rubberman
Zitat von @Speider13:
Die Text Datei in der die SMS gespeichert wird sieht so aus:
Die Text Datei in der die SMS gespeichert wird sieht so aus:
2013-01-27 13:06:15'43 SMS: +49100000000 2013-01-27 13:05:49 [04]
URL
URL
also praktisch muss man ja Zeile "3" kopieren
Wenn du uns nun noch erzählst, wo du eine Zeil 3 siehst (gepostet hast du 2) und wie diese aussieht, könnte man vielleicht auch was daraus machen. Aus deinen Informationen kann ich diesbezüglich nichts nützliches entnehmen (und offensichtlich bin ich da nicht der einzige).
Grüße
rubberman
Hallo Speider13,
ja jetzt wird das was.
Bei mir heißt die Textdatei test.txt, musst du entsprechend anpassen.
Alternativ drag/drop Textdatei auf das Script:
Grüße
rubberman
ja jetzt wird das was.
Bei mir heißt die Textdatei test.txt, musst du entsprechend anpassen.
@echo off &setlocal
for /f "usebackq skip=2 delims=" %%i in ("test.txt") do if not defined url set "url=%%i"
start "" "%url%"
Alternativ drag/drop Textdatei auf das Script:
@echo off &setlocal
for /f "usebackq skip=2 delims=" %%i in ("%~1") do if not defined url set "url=%%i"
start "" "%url%"
Grüße
rubberman
Hallo Speider13.
Das Spielchen mit Google Earth zu betreiben, ist noch mal eine andere Liga. Hier kommst du mit Batch nicht weit, JScript würde sich da eher anbieten.
Um die Sache nicht unnötig zu verkomplizieren, gehe ich davon aus, dass die Koordinaten immer in Grad, Minuten und Sekunden Nord bzw. Ost angegeben sind und dass die Dateiendung *.kml mit Google Earth assoziiert ist.
Speichere folgenden Code als *.js Datei ab und ziehe deine Textdatei auf des Script.
Grüße
rubberman
Das Spielchen mit Google Earth zu betreiben, ist noch mal eine andere Liga. Hier kommst du mit Batch nicht weit, JScript würde sich da eher anbieten.
Um die Sache nicht unnötig zu verkomplizieren, gehe ich davon aus, dass die Koordinaten immer in Grad, Minuten und Sekunden Nord bzw. Ost angegeben sind und dass die Dateiendung *.kml mit Google Earth assoziiert ist.
Speichere folgenden Code als *.js Datei ab und ziehe deine Textdatei auf des Script.
if (WScript.arguments.count() != 1) {WScript.quit();}
var oFSO = new ActiveXObject('Scripting.FileSystemObject');
var oWShell = new ActiveXObject('WScript.Shell')
oWShell.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName);
var oFile = oFSO.OpenTextFile(WScript.arguments(0));
var url;
var s = '';
while (!oFile.AtEndOfStream) {
url = oFile.ReadLine();
if (url.substr(0, 4) == 'http') {
var query = url.split('?');
var vars = query[1].split('&');
for (var i = 0; i < vars.length; ++i) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair) == 'q') {
s = decodeURIComponent(pair[1]);
}
}
}
}
oFile.close();
oFile = null;
if (s == '') {WScript.quit();}
var oRepl = new RegExp('[+°\'"NE]', 'g');
s = s.replace(oRepl, ' ');
for (var i = 0; i < 20; ++i) {s = s.replace(' ', ' ');}
if (s.charAt(0) == ' ') {s = s.substr(1);}
var a = s.split(' ');
var north = parseFloat(a) + parseFloat(a[1]) / 60 + parseFloat(a[2]) / 3600;
var east = parseFloat(a[3]) + parseFloat(a[4]) / 60 + parseFloat(a[5]) / 3600;
oFile = oFSO.OpenTextFile('location.kml', 2, true);
oFile.WriteLine('<?xml version="1.0" encoding="Windows-1252"?>');
oFile.WriteLine('<kml xmlns="http://www.opengis.net/kml/2.2">');
oFile.WriteLine(' <Placemark>');
oFile.WriteLine(' <name>Position</name>');
oFile.WriteLine(' <description>Koordinaten via SMS.</description>');
oFile.WriteLine(' <Point>');
oFile.WriteLine(' <coordinates>' + east + ',' + north + ',0</coordinates>');
oFile.WriteLine(' </Point>');
oFile.WriteLine(' </Placemark>');
oFile.WriteLine('</kml>');
oFile.close();
oWShell.run('location.kml');
Grüße
rubberman
Hallo Speider 13

Grüße
rubberman
1. Wen ich mit dem Befehl eine .txt erstelle, steht der Text dort drin nur mit "Text" also mit Anführungszeichen.
echo "%url%" >> %Earth%\%Nr%\%Datum::=.%.txt
was ist falsch?
Falsch ist erst mal dass du es aus dem Zusammenhang gerissen hast. So kann ich dir das auch nicht beantworten. Im ganzen Batch bitte echo "%url%" >> %Earth%\%Nr%\%Datum::=.%.txt
was ist falsch?
2. Wie ist es möglich die .js Datei von einer Batch Datei zu starten?
Also so funktioniert es nicht:
start "%Quelle%\%Nr%\%Datum%.txt" "D:\SMS\Earth.js"
So ähnlich.Also so funktioniert es nicht:
start "%Quelle%\%Nr%\%Datum%.txt" "D:\SMS\Earth.js"
start "" wscript "D:\SMS\Earth.js" "%Quelle%\%Nr%\%Datum%.txt"
3. Kann man die .js auch so umschreiben das es mehrere Koordinaten aus einer Textdatei in der mehrere Links drin sind rausliest?
Weil im Momment nimmt es immer nur eine URL.
Kann man.Weil im Momment nimmt es immer nur eine URL.
if (WScript.arguments.count() != 1) {WScript.quit();}
var oFSO = new ActiveXObject('Scripting.FileSystemObject');
var oWShell = new ActiveXObject('WScript.Shell')
var oRepl = new RegExp('[+°\'"NE]', 'g');
oWShell.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName);
var oFile2 = oFSO.OpenTextFile('location.kml', 2, true);
oFile2.WriteLine('<?xml version="1.0" encoding="Windows-1252"?>');
oFile2.WriteLine('<kml xmlns="http://www.opengis.net/kml/2.2">');
oFile2.WriteLine(' <Document>');
var oFile1 = oFSO.OpenTextFile(WScript.arguments(0));
var url, s, n = 0;
while (!oFile1.AtEndOfStream) {
url = oFile1.ReadLine();
if (url.substr(0, 4) == 'http') {
var query = url.split('?');
var vars = query[1].split('&');
for (var i = 0; i < vars.length; ++i) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair) == 'q') {
n += 1;
s = decodeURIComponent(pair[1]);
s = s.replace(oRepl, ' ');
for (var i = 0; i < 20; ++i) {s = s.replace(' ', ' ');}
if (s.charAt(0) == ' ') {s = s.substr(1);}
var a = s.split(' ');
var north = parseFloat(a) + parseFloat(a[1]) / 60 + parseFloat(a[2]) / 3600;
var east = parseFloat(a[3]) + parseFloat(a[4]) / 60 + parseFloat(a[5]) / 3600;
oFile2.WriteLine(' <Placemark>');
oFile2.WriteLine(' <name>Position ' + n + '</name>');
oFile2.WriteLine(' <description>Koordinaten via SMS.</description>');
oFile2.WriteLine(' <Point>');
oFile2.WriteLine(' <coordinates>' + east + ',' + north + ',0</coordinates>');
oFile2.WriteLine(' </Point>');
oFile2.WriteLine(' </Placemark>');
}
}
}
}
oFile1.close();
oFile2.WriteLine(' </Document>');
oFile2.WriteLine('</kml>');
oFile2.close();
if (n == 0) {WScript.quit();}
oWShell.run('location.kml', 3);
Grüße
rubberman
Hallo Speider13.
Bin mit Google Earth nicht vertraut (konkret habe ich es nur installiert, um das .js zu testen). Hast du so etwas schon mal in GE gesehen? Falls ja, wird das auch irgendwie funktionieren. Kannst ja mithelfen eine Vorlage für eine .kml Datei zu finden, die so etwas beispielhaft beschreibt. Die Umsetzung im Script sollte dann vermutlich nicht mehr das Problem sein.
Grüße
rubberman
PS: Wenn du mit "Route" meinst, dass einem Straßenverlauf gefolgt werden soll, dann nein. Dazu wäre eine Datenbank nötig, die sämtliche Straßenverläufe beinhaltet. So wie bspw. Navigationssysteme solche Datenbanken haben oder auf solche zurück greifen.
Bin mit Google Earth nicht vertraut (konkret habe ich es nur installiert, um das .js zu testen). Hast du so etwas schon mal in GE gesehen? Falls ja, wird das auch irgendwie funktionieren. Kannst ja mithelfen eine Vorlage für eine .kml Datei zu finden, die so etwas beispielhaft beschreibt. Die Umsetzung im Script sollte dann vermutlich nicht mehr das Problem sein.
Grüße
rubberman
PS: Wenn du mit "Route" meinst, dass einem Straßenverlauf gefolgt werden soll, dann nein. Dazu wäre eine Datenbank nötig, die sämtliche Straßenverläufe beinhaltet. So wie bspw. Navigationssysteme solche Datenbanken haben oder auf solche zurück greifen.
Hallo Speider13.
Wenn die URL so aussieht, vereinfacht das die Verarbeitung sogar. Letztlich werden Längen- und Breitengrad als Dezimalzahl benötigt.
Wie man die Punkte verbindet, habe ich mittlerweile auch heraus gefunden.
Grüße
rubberman
Wenn die URL so aussieht, vereinfacht das die Verarbeitung sogar. Letztlich werden Längen- und Breitengrad als Dezimalzahl benötigt.
Wie man die Punkte verbindet, habe ich mittlerweile auch heraus gefunden.
if (WScript.arguments.count() != 1) {WScript.quit();}
var oFSO = new ActiveXObject('Scripting.FileSystemObject');
var oWShell = new ActiveXObject('WScript.Shell')
oWShell.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName);
var oFile2 = oFSO.OpenTextFile('location.kml', 2, true);
oFile2.WriteLine('<?xml version="1.0" encoding="Windows-1252"?>');
oFile2.WriteLine('<kml xmlns="http://www.opengis.net/kml/2.2">');
oFile2.WriteLine(' <Document>');
oFile2.WriteLine(' <Style id="lineStyle">');
oFile2.WriteLine(' <LineStyle>');
oFile2.WriteLine(' <color>80ff0000</color>');
oFile2.WriteLine(' <width>6</width>');
oFile2.WriteLine(' </LineStyle>');
oFile2.WriteLine(' </Style>');
var oFile1 = oFSO.OpenTextFile(WScript.arguments(0));
var url, s, pt, line = '', n = 0;
while (!oFile1.AtEndOfStream) {
url = oFile1.ReadLine();
if (url.substr(0, 4) == 'http') {
var query = url.split('?');
var vars = query[1].split('&');
for (var i = 0; i < vars.length; ++i) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair) == 'q') {
n += 1;
s = decodeURIComponent(pair[1]);
pt = s.split(',');
oFile2.WriteLine(' <Placemark>');
oFile2.WriteLine(' <name>Position ' + n + '</name>');
oFile2.WriteLine(' <description>Koordinaten via SMS.</description>');
oFile2.WriteLine(' <Point>');
oFile2.WriteLine(' <coordinates>' + pt[1] + ',' + pt + ',0</coordinates>');
oFile2.WriteLine(' </Point>');
oFile2.WriteLine(' </Placemark>');
line += pt[1] + ',' + pt + ',0 ';
}
}
}
}
oFile1.close();
oFile2.WriteLine(' <Placemark>');
oFile2.WriteLine(' <name>Verbindungslinie</name>');
oFile2.WriteLine(' <description>Linie zwischen den Einzelpositionen</description>');
oFile2.WriteLine(' <styleUrl>#lineStyle</styleUrl>');
oFile2.WriteLine(' <GeometryCollection>');
oFile2.WriteLine(' <LineString>');
oFile2.WriteLine(' <coordinates>' + line + '</coordinates>');
oFile2.WriteLine(' </LineString>');
oFile2.WriteLine(' </GeometryCollection>');
oFile2.WriteLine(' </Placemark>');
oFile2.WriteLine(' </Document>');
oFile2.WriteLine('</kml>');
oFile2.close();
if (n == 0) {WScript.quit();}
oWShell.run('location.kml', 3);
Grüße
rubberman
Hallo Speider13.
Wie kommst du darauf, dass die Batchdatei 3x ausgeführt wird
?
Du rufst für jede Zeile in sms1.txt die Subroutine :ProcessLine auf. Je mehr Zeilen, um so öfter wird sie aufgerufen. Da ich aber nicht weiß, welches Verhalten du von deinem Batchscript erwartest (welche Logik steckt dahinter und was soll dabei heraus kommen), weiß ich nicht wo ich dir helfen kann.
Ein paar Sachen die mir unabhängig davon aufgefallen sind:
Grüße
rubberman
Wie kommst du darauf, dass die Batchdatei 3x ausgeführt wird
Du rufst für jede Zeile in sms1.txt die Subroutine :ProcessLine auf. Je mehr Zeilen, um so öfter wird sie aufgerufen. Da ich aber nicht weiß, welches Verhalten du von deinem Batchscript erwartest (welche Logik steckt dahinter und was soll dabei heraus kommen), weiß ich nicht wo ich dir helfen kann.
Ein paar Sachen die mir unabhängig davon aufgefallen sind:
- Wo nutzt du Variable Main?
- Woher kommt der Wert der Variablen Earth?
- Warum maskierst du < und > in den Zeilen 12 und 13? Kommen die irgendwo vor?
Grüße
rubberman
Schau mal, ob du mit diesem Ansatz bei allen Möglichkeiten die richtigen Ausgaben bekommst.
Grüße
rubberman
@echo off &setlocal
set "quelle=D:\SMS\sms1.txt"
set /p "firstLine="<"%quelle%"
echo %firstLine%
for /f "tokens=2 delims=+" %%i in ("%firstLine%") do (
for /f "tokens=1-3" %%j in ("%%i") do (
set "nr=%%j"
set "datum=%%k"
for /f "tokens=1-3 delims=:" %%m in ("%%l") do (
set "hh=%%m"
set "mm=%%n"
set "ss=%%o"
)
)
)
echo %nr%
echo %datum%
echo %hh%
echo %mm%
echo %ss%
for /f "tokens=*" %%i in ('findstr "\<http" "%quelle%"') do set "url=%%i"
setlocal EnableDelayedExpansion
echo !url!
endlocal
pause
Grüße
rubberman