I detta inlägg bygger jag symboler baserade på de data jag samlar in från ADS-B mottagaren jag använde i gårdagens inlägg.
Med tanke på att det är en hemsnickrad antenn under mindre än optimala förhållanden så är det imponerande hur stort område som faktiskt täcks in. Om jag räknat rätt är det flygplan som är längst bort i mina data 167 nautiska mil bort, vilket är över 30 mil.
De data jag använder är sammanslaget från flera tidpunkter för att få ett större urval att skapa min stil för. Det är således inte ett enda ögonblick som symbolerna representerar i bilderna. Därför behöver du inte bli orolig om det ser ut som om planen håller på att krocka.
Jag har valt att använda vissa attribut, men inte andra, av de som ingår i ADS-B.
”Flight” är den beteckning som flygplanen använder och i de fall denna saknas i meddelandet så anges ”UNK”. Kategori beskriver storleken på flygplanet, eller rättare sagt vilken kategori av ADS-B sändare det är.
A0 – Ingen information
A1 – Lätt, under 15500 lbs (under 6.8 ton)
A2 – Små 15500 – 75000 lbs
A3 – Medium 75000 – 300000 lbs
A4 – Stor/High Vortex
A5 – Tung över 300000 lbs (över 136 ton)
A6 – Hög acceleration och fart
A10 – Rotor (helikopter)
Det förekommer andra också men dessa är de som jag kommer att dela upp mina symboler efter.
Innan jag gör en uppdelning i kategorier så skapar jag en symbol med gemensamma inställningar. Exempelvis skall varje symbol ha en ”enkel markör” som har insättningspunkt ”nere” för att den vertikala linjen skall utgå ifrån centrum av punkten. Längden anges sedan i ”kartenheter” (mitt projekt är projicerat i SWEREF99TM) och beräknas till angiven fart gånger 1852/60. Då fart är angiven i ”knop”, eller nautiska mil per timme så kan jag genom att multiplicera med 1852 meter (vilket är en nautisk mil) och dela med 60, få det avstånd som flygplanet kommer att avverka på en minut. Den utstickande linjen representerar således var planet förväntas vara om en minut.
Jag har även lagt till en geometrigenerator som skapar en linje från en punkt på kartan till flygplanet. Punkten anges manuellt och representerar min position (ungefär). Denna position används även senare för att skapa etiketten.
För att skapa linjen använder jag funktionen make_line som tar två punkter som argument. Den första punkten skapar jag genom att manuellt ange en longitud och latitud. den andra punkten hämtas från aktuellt objekts geometri.
Etiketterna byggs av flera attribut och beräknade värden. Flight-beteckningen utgör den första raden och efter en ”ny rad” läggs höjden i fot till. Efter ytterligare en ny rad vill jag beräkna bäringen från min position till flygplanet, samt avståndet.
För bäringen (riktningen) kan jag använda en inbyggd funktion för azimut som tar två punkter som indata. Riktningen beräknas från den första till den andra och anges i förhållande till riktningen mot norr.
För avståndet används också en inbyggd funktion som ger avståndet i grader (av någon anledning) så genom att multiplicera med 60 så får jag avståndet i minuter, vilket är det samma som nautiska mil.
Om detta verkligen ger korrekt riktning är jag inte säker på. Det där med ”sfärisk trigonometri” är inte helt enkelt. Jag hade även tänkt mig beräkna höjdvinkeln, men även här måste man ta hänsyn till jordens form, mer bestämt krökningen över horisonten.
Höjden hos mig är ungefär 0 och jag får ju höjden för flygplanet så det borde inte vara något problem, det är ju bara pytagoras sats… Ha ha! Det är lite krångligare.
För kortare avstånd så blir effekten nog minimal, men det går inte att bortse från den, när avstånden kan vara över 300 mil…
Denna matteövning kommer jag dock att avstå såhär när jag är ledig, så den får du själv ge dig på om du skulle behöva det.