| #!/usr/bin/env python3
|
|
|
| import csv
|
| import os
|
|
|
| input_file = "/storage/emulated/0/wifi_gps_log.csv"
|
| ap_data = {}
|
|
|
| # Read CSV
|
| with open(input_file, "r") as f:
|
| reader = csv.DictReader(f)
|
| for row in reader:
|
| bssid = row["BSSID"]
|
| try:
|
| lat = float(row["Latitude"]) if row["Latitude"] else None
|
| lon = float(row["Longitude"]) if row["Longitude"] else None
|
| rssi = float(row["RSSI"]) if row["RSSI"] else 0
|
| ssid = row["SSID"]
|
| except ValueError:
|
| continue
|
| if lat and lon:
|
| if bssid not in ap_data:
|
| ap_data[bssid] = {"coords": [], "rssi": [], "ssid": ssid}
|
| ap_data[bssid]["coords"].append([lat, lon])
|
| ap_data[bssid]["rssi"].append(rssi)
|
|
|
| # Compute weighted averages and stats
|
| for bssid, data in ap_data.items():
|
| coords = data["coords"]
|
| rssi = data["rssi"]
|
| ssid = data["ssid"]
|
| num_samples = len(rssi)
|
| if not rssi or sum(rssi) == 0 or num_samples == 0:
|
| continue
|
| weights = [r / sum(rssi) for r in rssi]
|
| ap_lat = sum(c[0] * w for c, w in zip(coords, weights))
|
| ap_lon = sum(c[1] * w for c, w in zip(coords, weights))
|
| min_rssi = min(rssi)
|
| max_rssi = max(rssi)
|
| print(f"AP {bssid} (SSID: {ssid}): Lat={ap_lat:.6f}, Lon={ap_lon:.6f}, Samples={num_samples}, Min_RSSI={min_rssi:.1f}, Max_RSSI={max_rssi:.1f}")
|