czwartek, stycznia 20, 2011

Z NMEA do KML (chyba najbardziej kryptyczny tytuł postu jak stworzyłem ;-))

Popełniłem sobie dziś prostego toola (pewnie gdzieś już to ktoś zrobił i to kilka razy, ale mi się szukać nie chciało ;-)) który przerabia strumień danych z GPSa (w formacie NMEA) w pliki KML zrozumiałe między innymi przez Google Earth.

Sprytne tą te pliki KML, można w nich np. pokazać nie tylko długość i szerokość, ale i wysokość co wygląda tak:



Zresztą wychodzi, że Rosjanie prezentując raport MAK używali właśnie plików KML w Google Earth, albo co mi się bardziej prawdopodobne wydaje w Google Earth Browser Plugin czy jak to nazwać, bo tam można używać JavaScriptu do oprogramowania i animacji... chociaż możliwe, że KML też na to pozwala ;-)

Sam tool to skrypt w Pythonie, który wygląda tak:
a=open("Do Krakowa.txt")
b=a.read()
c=b.split("\n")
print len(c)
s = ""
s2 = ""
for i in range(0,len(c)-1):
if c[i].find("$GPGGA")!=0:
continue
d=c[i].split(",")
if d[2]<>"":
lat=float(d[2])/100
latDeg = int(lat)
latMin = (lat-latDeg)/60
lon=float(d[4])/100
lonDeg = int(lon)
lonMin = (lon-lonDeg)/60
lat=latDeg+latMin*100
lon=lonDeg+lonMin*100
if d[3]=='S':
lat=lat*-1
if d[5]=='W':
lon=lon*-1
alt=float(d[9])
s=s+str(lon)+","+str(lat)+","+str(alt)+"\n"
s2=s2+str(lon)+","+str(lat)+"\n"
sourceStart="""<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Paths</name>
<Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
</Style>
<Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>"""
sourceAlt="<altitudeMode>absolute</altitudeMode>"
sourceEnd="""</LineString>
</Placemark>
</Document>
</kml>"""
file=open("result___A.kml","w+")
file.write(sourceStart);
file.write("<coordinates>");
file.write(s2)
file.write("</coordinates>");
file.write(sourceEnd);
file.close()
file=open("result___A2.kml","w+")
file.write(sourceStart);
file.write(sourceAlt);
file.write("<coordinates>");
file.write(s)
file.write("</coordinates>");
file.write(sourceEnd);
file.close()


U mnie na dysku ten plik zowie się walczKML.py ;-)

Pooglądanie takich plików w Google Earth pokazuje, że wysokość podawana przez GPSa i ta w Google Earth dość mocno się różnią ;-) To co jest na obrazku u góry postu to moja trasa z moją wysokością, a jak widać poruszałem się wtedy wg. Google Earth znacznie ponad powierzchnią ;-)


Podobne postybeta
Robimy widget do Windows 7 :-)
Jak nie zapomnieć kupić biletu miesięcznego - revised ;-)
SSD a programowanie
Różniste różności różne ;-)
Najkrótsza droga do przyszłości - Polymer ;-)