Added ST source explanation
[ais.git] / bin / show_targets_planes.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 from __future__ import division
5 import sys
6 from datetime import datetime, timedelta
7
8 from ais.db import *
9
10 def main():
11     #from optparse import OptionParser
12     #parser = OptionParser()
13     #options, args = parser.parse_args()
14
15     cursor = get_common_cursor()
16
17     print '<?xml version="1.0" encoding=\"UTF-8\"?>'
18     print '<kml xmlns="http://earth.google.com/kml/2.1">'
19     print '<Document>'
20     print '<name>BTF spotters</name>'
21     
22     def print_style(name,icon,heading=None):
23         stylename = name
24         if heading is not None:
25             stylename+='-'+str(heading)
26         print '<Style id="%s">' % stylename
27         print '  <LabelStyle>'
28         print '    <scale>0.7</scale>'
29         print '  </LabelStyle>'
30         print '  <IconStyle>'
31         print '    <Icon>'
32         print '      <href>%s</href>' % icon
33         print '    </Icon>'
34         if heading is not None:
35             print '    <heading>%d</heading>' % heading
36         print '    <scale>0.5</scale>'
37         print '    <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>'
38         print '  </IconStyle>'
39         print '</Style>'
40     
41     print_style('plane', 'plane.png')
42    
43     sql = u'''
44     SELECT reg, ads, type, flight, plane.usr, updated, lat, lon
45         FROM plane
46         JOIN ppuser
47             ON (plane.usr = ppuser.usr)
48         WHERE reg != '        '
49         ORDER BY reg
50     '''
51     sqlexec(sql)
52
53     for reg, ads, type, flight, usr, updated, latitude, longitude  in cursor.fetchall():
54         if not latitude or not longitude:
55             continue
56         def _xml(txt):
57             if txt:
58                 return txt.encode('utf8').replace('<', '&lt;')
59             else:
60                 return ''
61
62         print '<Placemark>'
63         print '<name>',
64         if reg:
65             print _xml(reg),
66         else:
67             print 'ADS', ads,
68         print '</name>'
69
70         print '<description><![CDATA['
71         print 'Last seen: %s<br/>' % str(updated)
72         print 'ADS:', ads, '<br/>'
73         print 'Plane type:', type, '<br/>'
74         print 'Flight:', flight, '<br/>'
75         print "Warning, position is a wild guess! It's computed by averaging the positions broadcasted by other planes and received by the same ground station.<br/>"
76         print ']]>'
77         print '</description>'
78
79         style = 'plane'
80         print '<styleUrl>#%s</styleUrl>' % style
81
82         print '<Point>'
83         print '<altitudeMode>relativeToGround</altitudeMode>'
84         print '<coordinates>'+str(longitude)+','+str(latitude)+',0</coordinates>'
85         print '</Point>'
86         print '</Placemark>'
87     
88     print '</Document>'
89     print '</kml>'
90
91 if __name__ == "__main__":
92     main()