feat: tracker location based on multiple location providers #5
No due date set.
No dependencies set.
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -12,0 +18,4 @@
var gnss_based_latitude!: number; // Should this be set here?
var gnss_based_longitude!: number; // Should this be set here?
var ttn_gw_based_latitude!: number;
var ttn_gw_based_longitude!: number;
Das ! kann weg.
Bzw. kann alles weg, wird nicht verwendet
@ -12,0 +22,4 @@
if (!event.ttnGateways || event.ttnGateways.length === 0) {
console.log("No TTN Gateway location received!")
} else {
Ich würde nach dem console.log ein return machen. Dann sparst du dir die else
ne, dann würdest ja evtl. die Location von GNSS oder Wifi nicht "parsen"
Ich hätte es so aufgebaut Vorschlag:
Für jede Berechnung eine eigene Funktion die die Werte ausrechnet und dann zurück gibt:
const CalculateTtngatewayLocation = (event: TtnMessageReceivedEvent) => {
//... do stuff
return {
gnss_latitude: virtualLocation.latitude,
gnss_longitude: virtualLocation.longitude,
};
};
In der "Hauptfunktion" dann prüfen ob die werte da sind und wenn ja die Funktion aufrufen und die Werte zuweisen:
var location: Partial<Location> = {};
So werden drei if else zu drei if und man hat weniger Komplexität in einer Funktion.
@ -12,0 +63,4 @@
const apiResponse = await getLocationForWifiMemoized(wifi.mac);
if ((apiResponse != undefined) && (apiResponse?.totalResults > 0)) {
// Create new WiFi Scan entry if wigle.net reported location
const newWifiScan = wifiScanService.createWifiScan({
await wifiScanService.createWifiScan
@ -12,0 +58,4 @@
let weightedLongitude = 0;
// Process Wi-Fi data to compute weighted location
await Promise.all(
Der Wifi eintrag wird nur die die Datenbank geschrieben, wenn es eine Location gibt, sollte dieser nicht auch ohne reingeschrieben werden mit latitude und longitude undefined? Ansonsten würde ich es in drei steps unterteilen: Api Call, Datenbank entry erstellen, totalWeight + weightedLatitude + weightedLongitude ausrechnen. Ich glaube das macht es übersichtlicher ist aber vermutlich Geschmackssache. Mein Vorschlag:
` const wifiScans = await Promise.all(
event.wifis.map(async (wifi) => {
const apiResponse = await getLocationForWifiMemoized(wifi.mac);
@ -12,0 +72,4 @@
})
// Calculate weight based on RSSI (higher signal strength gives more weight)
const weight = 1 / Math.abs((await newWifiScan).rssi);
await kann weg
@ -12,0 +77,4 @@
// Accumulate weighted latitude and longitude
weightedLatitude += (await newWifiScan).latitude * weight;
weightedLongitude += (await newWifiScan).longitude * weight;
await kann weg
@ -13,1 +13,4 @@
}[];
gnssLocation: {
latitude: number | undefined;
longitude: number | undefined;
Hier habe ich Mist erzählt statt:
latitude: number | undefined; longitude: number | undefined;
geht auch einfach
latitude?: number; longitude?: number;
feat: tracker location based on TTTN Gateway locationto feat: tracker location based on multiple location providers