NEWS
Brauche Hilfe um ein json abzurufen und auszuwerten
-
@Homoran sagte:
ich dachte i wäre eine Zahl
Nein, das ist bei einer for-Schleife (Zählschleife) so, aber nicht bei for in Schleifen. Bei Arrays sollte man besser die Zählschleifen verwenden.
-
@Homoran
Ich würde die Zählschleife verwenden und innerhalb der Schleife filtern, wobei das erstes Filterkriterium das Vorhandensein von "lat", "lon" und "alt_baro" sein sollte: -
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Ich würde die Zählschleife verwenden und innerhalb der Schleife filtern
so weit bin ich auch schon, wobei es mir nicht gelingt die Attribute korrekt zu bestimmen. Objekt 'i' geht ja jetzt nicht mehr
Muss mir mal deine Vorgehensweise ansehen -
@paul53 Hat was länger gedauert, waren grad keine Flieger unterwegs (muss mein System später mal hardwaretechnisch noch was aufrüsten).
Jetzt scheint es zu klappen!
War ich gar nicht so weit von entfernt, mir fehlte nur das eigenständige Zerlegen des JSON(-Arrays) in "Unter"-JSONs, was bisher die Schleifen gemacht hatte.
Das das ganze JSON jeweils wieder "nur" ein Element des Arrays war, und damit als i-tes Element aufgerufen werden konnte, hatte ich nicht auf dem Schirm.Da habe ich ja heite Nacht noch einiges zu rekapitulieren
-
sooo, aktueller Stand:
gestern Abend bekam ich keinerlei Meldungen.
Vom Bett aus habe ich es dann mit dem Tablet noch geschafft einen debug einzubauen und stellte fest, dass die Geokoordinaten aus der javascript Instanz anscheinend vom Typ String waren.
Diese noch "schnell" in Zahl konvertiert und es lief.Die Daten werden im Moment zur Kontrolle in einen Datenpunkt geschrieben und historisiert:
Dann hatte ich noch versucht den Erfassungsbereich weniger hardcoded zu machen und mit einer Variable schnell zu ändern, Im Moment bekam ich auch Maschinen, die aus einer anderen Richtung im Landeanflug waren (zum Testen ganz gut, auf Dauer aber nicht)
Hatte aber die Rechnung nicht mit Herrn Mercator gemacht, der Ausschnitt war nicht quadratisch
Also empirisch noch einen Faktor eingebaut und es sah besser aus:
Ich werde wahrscheinlich diesen Faktor noch erhöhen, da die mich interessierende Flugroute fast genau von Ost nach West geht.Jetzt kam der quälende Teil.
Ich wollte den Abstand des Fliegers zu meinem Haus berechnen.
Habe im Netz eine brauchbare Rechnung gefunden:distance = sqrt(dx * dx + dy * dy) mit distance: Entfernung in km dx = 111.3 * cos(lat) * (lon1 - lon2) lat = (lat1 + lat2) / 2 * 0.01745 dy = 111.3 * (lat1 - lat2) lat1, lat2, lon1, lon2: Breite, Länge in Grad
Quelle: https://www.kompf.de/gps/distcalc.html
Das wollte ich aus Platzgründen in einer Funktion verstecken, woran ich mal wieder gescheitert bin.
Das Blockly sieht inzwischen gigantisch aus:
und das ist nur der obere Teil für mehrere Flieger, für einen Flieger kommt das selbe nochmal
weitere geplante Dinge
- Der Abstand im Raum (zusätzlich noch ein Pythagoras zur Höhe)
- Arrays für jeweils einen Flug aufbauen, dort den dichtesten Abstand rausfinden
- diesen einen Datensatz in ein weiteres Array für alle Flüge übernehmen
- danach das temporäre Array wieder löschen
mal sehen wie weit ich komme, habe noch keine Möglichkeit gefunden eine Liste mit Namen des Fluges variabel zu erstellen
-
kaum getippt, kommt eine Ryanair rein:
die Einträge mit Abstand in km dazu:
-
So, nach einiger Zeit und Problemen nach einem piaware Update würde ich das Ganze noch etwas optimieren
ich bekomme während des Durchfluges durch das Beobachungsfensters mehrere Meldungen
ich bräuchte aber nur den Datensatz vom nahesten Ergebnis.
ich habe schon versucht jeden Satz als JSON zu bilden und dann in einer Liste das Minimum für Entfernung am Boden zu finden.
Das war nix
gibt es da eine sinnvolle Vorgehensweise, so dass ich optimalerweise ein json pro Flug erhalte, das ich später in einem jsonlist widget oder Eventlis Widget als Liste darstellen kann?
-
@homoran sagte: jsonlist widget
Welche Daten soll die Liste enthalten?
-
@paul53 Danke schon mal!
im Prinzip, die die ich jetzt als String in den Datenpunkt schreibe.
sorry für den Screenshot, bin nur am Tablet
-
@homoran
Ansatz, der noch nicht das Löschen von nicht mehr vorhandenen Flugzeugen aus der Tabelle enthält:Inhalt der Funktion flugObjekt(kennung,_hoehe,abstand,entfernung,pos):
return { Kennung: kennung, Hoehe: _hoehe, Bodenabstand: abstand, Entfernung: entfernung, Position: pos };
-
@paul53 DANKE!
Das muss ich jetzt erst mal ventilieren
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
der noch nicht das Löschen von nicht mehr vorhandenen Flugzeugen aus der Tabelle enthält:
Hab gerade mit Schrecken sogar zwei Flugzeuge zeitgleich im Sektor gehabt.. Ich dachte das wird schon nicht passieren.
Jetzt kreiste zusätzlich noch ein Polizeihubschrauber auf +/- 300m rum.Aber solche Spezialfälle sind erst einmal unwichtig.
Werde deinen Ansatz mal testen
-
@homoran
Habe gerade noch eine Korrektur eingefügt: setze obj. -
@paul53 ich hab es eben abgetippert und mir schon gedacht wo kommt die Liste her?
Jetzt kommt prompt:
18:43:00.020 error javascript.0 (728) script.js.Fliegenklatsche_v3: TypeError: Cannot read property 'length' of undefined 18:43:00.020 error javascript.0 (728) at script.js.Fliegenklatsche_v3:66:23
66:23 ist
vorhanden = false; var j_end = Liste.length; var j_inc = 1; if (1 > j_end) { j_inc = -j_inc; }
(hier die 2. Zeile)
EDIT:
oder meinst du diese Liste ("Rest")
-
@homoran sagte: wo kommt die Liste her?
Erzeuge erst einmal eine leere Liste, damit der Datenpunkt mit einer JSON-Liste befüllt wird. Danach lese oben den Datenpunkt ein:
@homoran sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
oder meinst du diese Liste ("Rest")
Nein.
-
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Danach lese oben den Datenpunkt ein
Jetzt stehe ich ganz auf dem Schlauch!
ich habe keinen DP mit einem JSON. Das war ja mein Problem.
-
@homoran sagte: ich habe keinen DP mit einem JSON.
Erstelle den Datenpunkt vom Typ "string" unter "0_userdata.0". Keinen Wert reinschreiben!
Das Erzeugen der leeren Liste kann besser so erfolgen: -
@paul53 sagte in Brauche Hilfe um ein json abzurufen und auszuwerten:
Erstelle den Datenpunkt vom Typ "string" unter "0_userdata.0". Keinen Wert reinschreiben!
Hab ich bereits gemacht.
Allerdings für den DP in den nachher das Ergebnis soll.Ich brauche jetzt einen weiteren DP?
Jetzt hab ich mir endlich angewöhnt mit Variablen statt DPs zu arbeiten, jetzt kommst du soOder ab ich dich ganz falsch verstanden?
-
@homoran sagte: Allerdings für den DP in den nachher das Ergebnis soll.
Das ist genau der DP. Das Ergebnis ist die JSON-Liste, die durch das Skript nur modifiziert wird. Um Vergleiche anzustellen, muss der DP auch wieder eingelesen werden.
-
@paul53 Danke!
Kam kurz eine Meldung mit Kennung of undefined.
Ist klar, da war der DP noch leer.Jetzt steht was drin
Mal sehn
EDIT:
Das JSON wächst!jetzt merke ich was passiert.
Wie groß darf das werden?bisher hatte ich für jede 10 Sekunden im Sektor etwas im DP, dies über history geloggt ergab die Tabelle.
Dort konnte ich über den Zeitfilter die gesuchten Flugzeuge finden, leider zu viele unnütze Einträge.Wenn das JSON auch über zwei Jahre weiter wachsen darf, bräuchte ich noch den Timestamp von dem Eintrag.
Wenn nicht, brauche ich immer nur einen Eintrag (der alte müsste gelöscht werden), den ich über das Eventlist Widget zur Liste umbaue
Ich lass mir das mal durch den Kopf gehen.
EDIT2:
da stimmt was nicht[ { "Kennung": "XGO3KB ", "Hoehe": 2377, "Bodenabstand": 10633, "Entfernung": 10895, "Position": "50.12345,6.12345" }, { "Kennung": "GWI3XU ", "Hoehe": 3520, "Bodenabstand": 45431, "Entfernung": 45567, "Position": "51.12345,7.12345" }, { "Kennung": "CHX3 ", "Hoehe": 122, "Bodenabstand": 4400, "Entfernung": 4402, "Position": "50.12345,6.12345" }, { "Kennung": "EWG754 ", "Hoehe": 3231, "Bodenabstand": 43243, "Entfernung": 43364, "Position": "51.12345,7.12345" }, { "Kennung": "CXI7CD ", "Hoehe": 4062, "Bodenabstand": 27839, "Entfernung": 28134, "Position": "50.12345,6.12345" }, { "Kennung": "EWG686 ", "Hoehe": 472, "Bodenabstand": 13704, "Entfernung": 13712, "Position": "50.12345,7.12345" } ]
EDIT3:
Ich glaube ich hatte den neuen Teil an der falschen Stelle im Blockly eingefügt.
Ein Eurowings mit 340m Höhe über meinem Haus hätte ich gemerktIch hoffe ich hab es jetzt richtig
-
@homoran sagte: Wenn das JSON auch über zwei Jahre weiter wachsen darf
Wie willst Du eine so lange Liste in Vis anzeigen? Man kann die Liste auf eine bestimmte Anzahl Einträge begrenzen (ältesten Eintrag löschen).