/usr/bin/gegps is in gpsd-clients 3.17-5.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #! /usr/bin/python
# -*- coding: utf-8 -*-
#
# usage: gegps [-i] [-d kmldir]
#
# Feed location data from a running GPSD to a Google Earth instance.
# The -d argument is the location of the Google Earth installation
# directory. If not specified, it defaults to the current directory.
#
# If you have the free (non-subscription) version, start by running with
# the -i option to drop a clue in the Google Earth installation directory,
# as 'Open_in_Google_Earth_RT_GPS.kml', then open that file in Places
# (File > Open...),
#
# The basic recipe is here:
# http://tjworld.net/wiki/Linux/Ubuntu/GoogleEarthPlusRealTimeGPS
#
# This code originally by Jaroslaw Zachwieja and a guy referring
# to himself/herself as TJ(http://tjworld.net)
# Modified by Chen Wei <weichen302@aol.com> for use with gpsd
# Cleaned up and adapted for the GPSD project by Eric S. Raymond.
# This code runs compatibly under Python 2 and 3.x for x >= 2.
# Preserve this property!
from __future__ import absolute_import, print_function, division
import getopt
import os
import sys
import gps
KML_OPEN_IN_GE = '''\
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<NetworkLink>
<name>Realtime GPS</name>
<open>1</open>
<Link>
<href>Realtime_GPS.kml</href>
<refreshMode>onInterval</refreshMode>
</Link>
</NetworkLink>
</kml>
'''
def kmlize(tpv):
'''http://code.google.com/apis/kml/documentation/kmlreference.html
for official kml document'''
latitude = tpv['lat']
longitude = tpv['lon']
speed_in = tpv['speed'] # meter/second
speed = speed_in * gps.MPS_TO_KPH # Km/h
heading = int(round(tpv['track'], 0))
altitude = tpv['alt']
if speed < 1:
heading = 0
return """<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Placemark>
<name>%s km/h,heading %s</name>
<description>Realtime GPS feeding</description>
<LookAt>
<longitude>%s</longitude>
<latitude>%s</latitude>
</LookAt>
<Point>
<coordinates>%s,%s,%s</coordinates>
</Point>
</Placemark>
</kml>""" % (speed, heading, longitude, latitude, longitude,
latitude, altitude)
if __name__ == "__main__":
session = gps.gps()
session.stream(gps.WATCH_ENABLE)
kmldir = "."
initialize = False
(options, arguments) = getopt.getopt(sys.argv[1:], "d:i")
for (opt, arg) in options:
if opt == '-d':
kmldir = arg
elif opt == '-i':
initialize = True
if initialize:
f = open(os.path.join(kmldir, 'Open_in_Google_Earth_RT_GPS.kml'), 'w')
f.write(KML_OPEN_IN_GE)
f.close()
else:
try:
while True:
report = session.next()
if report['class'] == 'TPV':
f = open(os.path.join(kmldir, 'Realtime_GPS.kml'), 'w')
f.write(kmlize(report))
f.close()
except StopIteration:
pass
except KeyboardInterrupt:
print('gegpsd stopped ')
# end
|