Export session to KML format for Google Earth.
(self)
| 1061 | v2 = after['speed_kmh'] |
| 1062 | if v1 is not None and v2 is not None and (v1 + v2) > 0: |
| 1063 | f = (2 * v1 * f_time + (v2 - v1) * f_time * f_time) / (v1 + v2) |
| 1064 | f = max(0.0, min(1.0, f)) |
| 1065 | else: |
| 1066 | f = f_time |
| 1067 | lat = before['latitude'] + (after['latitude'] - before['latitude']) * f |
| 1068 | lon = before['longitude'] + (after['longitude'] - before['longitude']) * f |
| 1069 | alt = None |
| 1070 | if before['altitude'] is not None and after['altitude'] is not None: |
| 1071 | alt = before['altitude'] + (after['altitude'] - before['altitude']) * f |
| 1072 | return (lat, lon, alt) |
| 1073 | cand = before if (before and (epoch - before['timestamp']) <= max_gap_seconds) else None |
| 1074 | if cand is None and after and (after['timestamp'] - epoch) <= max_gap_seconds: |
| 1075 | cand = after |
| 1076 | if cand: |
| 1077 | return (cand['latitude'], cand['longitude'], cand['altitude']) |
| 1078 | return None |
| 1079 | |
| 1080 | rows = conn.execute( |
| 1081 | "SELECT bssid, first_seen FROM networks " |
| 1082 | "WHERE best_lat IS NULL OR best_lon IS NULL" |
| 1083 | ).fetchall() |
| 1084 | for r in rows: |
| 1085 | pos = _pos_at(_parse_iso(r['first_seen'])) |
| 1086 | if pos: |
| 1087 | conn.execute( |
| 1088 | "UPDATE networks SET " |
| 1089 | "latitude = COALESCE(latitude, ?), " |
| 1090 | "longitude = COALESCE(longitude, ?), " |
| 1091 | "altitude = COALESCE(altitude, ?), " |
| 1092 | "best_lat = ?, best_lon = ?, " |
| 1093 | "gps_backfilled = 1 WHERE bssid = ?", |
| 1094 | (pos[0], pos[1], pos[2], pos[0], pos[1], r['bssid']) |
| 1095 | ) |
| 1096 | result['wifi'] += 1 |
| 1097 | |
| 1098 | try: |
| 1099 | rows = conn.execute( |
| 1100 | "SELECT mac, first_seen FROM bluetooth_devices " |
| 1101 | "WHERE latitude IS NULL OR longitude IS NULL" |
| 1102 | ).fetchall() |
| 1103 | for r in rows: |
| 1104 | pos = _pos_at(_parse_iso(r['first_seen'])) |
| 1105 | if pos: |
| 1106 | conn.execute( |
| 1107 | "UPDATE bluetooth_devices SET " |
| 1108 | "latitude = ?, longitude = ?, " |
| 1109 | "altitude = COALESCE(altitude, ?), " |
| 1110 | "best_lat = COALESCE(best_lat, ?), " |
| 1111 | "best_lon = COALESCE(best_lon, ?), " |
| 1112 | "gps_backfilled = 1 WHERE mac = ?", |
| 1113 | (pos[0], pos[1], pos[2], pos[0], pos[1], r['mac']) |
| 1114 | ) |
| 1115 | result['bluetooth'] += 1 |
| 1116 | except sqlite3.OperationalError: |
| 1117 | pass |
| 1118 | |
| 1119 | try: |
| 1120 | rows = conn.execute( |