GPS text file converter to Google Earth/Maps

From MikroTik Wiki
Revision as of 17:16, 29 July 2010 by SurferTim (talk | contribs)
Jump to: navigation, search
global gpstext [/file get gps.txt contents];
local longstart [:find $gpstext "longitude" -1];
local longend [:find $gpstext "\n" $longstart];
local latstart [:find $gpstext "latitude" -1];
local latend [:find $gpstext "\n" $latstart];
local validstart [:find $gpstext "valid" -1];
local validend [:find $gpstext "\n" $validstart];
global longitude [:pick $gpstext ($longstart + 12) $longend];
local degreestart [:find $longitude " " -1];
local minutestart [:find $longitude " " $degreestart];
local secondstart [:find $longitude "'" $minutestart];
local secondend [:find $longitude "'" $secondstart];
local longdegree;
local longdegreelink;
if ([:pick $longitude 0 1] = "W") do={
   :set longdegree "-";
   :set longdegreelink "W";

} else={

   :set longdegree "+";
   :set longdegreelink "E";

};

set longdegree ($longdegree . [:pick $longitude 2 $minutestart]);
set longdegreelink ($longdegreelink . [:pick $longitude 2 $minutestart]);
local longmin [:pick $longitude ($minutestart + 1) $secondstart];
local longsec [:pick $longitude ($secondstart + 2) $secondend];
local longfract ((([:tonum $longmin] * 6000) + ([:tonum $longsec] * 100)) / 36);
global newlong ($longdegree . "." . $longfract);
global newlonglink ($longdegreelink . "." . $longfract);
global latitude [:pick $gpstext (latstart + 11) $latend];
set degreestart [:find $latitude " " -1];
set minutestart [:find $latitude " " $degreestart];
set secondstart [:find $latitude "'" $minutestart];
set secondend [:find $latitude "'" $secondstart];
local latdegree;
local latdegreelink;
if ([:pick $latitude 0 1] = "N") do={
   :set latdegree "+";
   :set latdegreelink "N";

} else={

   :set latdegree "-";
   :set latdegreelink "S";

};

set latdegree ($latdegree . [:pick $latitude 2 $minutestart]);
set latdegreelink ($latdegreelink . [:pick $latitude 2 $minutestart]);
local latmin [:pick $latitude ($minutestart + 1) $secondstart];
local latsec [:pick $latitude ($secondstart + 2) $secondend];
local latfract ((([:tonum $latmin] * 6000) + ([:tonum $latsec] * 100)) / 36);
global newlat ($latdegree . "." . $latfract);
global newlatlink ($latdegreelink . "." . $latfract);
global coordinates ($newlong . "," . $newlat);
global linkout "http://maps.google.com?q=$newlonglink$newlatlink";
global kmlout "<?xml version=\"1.0\" encoding=\"UTF-8\"?>

<kml xmlns=\"http://www.opengis.net/kml/2.2\">

 <Placemark>
   <name>My router</name>
   <description>My router's location</description>
   <Point>
     <coordinates>$coordinates</coordinates>
   </Point>
 </Placemark>

</kml> ";

global oldpos;
if ($oldpos != $coordinates) do={
   /file set [/file find name=gps.kml] contents=$kmlout
   /tool e-mail
   send to=me@mydomain.com subject="Router move" body="Move to $linkout" file=gps.kml
   :set oldpos $coordinates;

};