Häirekaart ja marsruudi eksponeeritus
kshana interference-map koostab päevapõhise pildi sellest, kus õhusõidukid ja laevad teatasid halvenenud navigatsiooniandmetest, esitatud avatud litsentsiga jälgimisfailidest. kshana route-exposure ütleb seejärel, kui suur osa kavandatud marsruudist jäi igal päeval mõjutatud lahtritesse.
Mis see on: kirjeldus sellest, kuidas avaldatud asukohateated minevikupäevadel välja nägid. Mis see ei ole: ühegi vastuvõtja mõõtmine, prognoos ega häirimise tõend. Halvenenud või anomaalsel lahtril on mitu võimalikku põhjust (loetletud allpool) ja lahter, mille kohta kirjet ei ole, lihtsalt jäi vaatlemata.
Kõik töötab kohalike failidega. Vaikimisi käsud ei ava kunagi võrguühendust; ainus vabatahtlik allalaadimisabiline vajab selgesõnalist lippu.
Mõlemad päevad on sünteetilised näidised kaustas examples/interference-map/output/, kummalgi sünteetiline marsruut kaustas examples/interference-map/input/; marsruudi kokkupuute osakaalud on need, mida kshana route-exposure nende jaoks trükib. Midagi neis ei ole päris koht, õhusõiduk ega laev.
Andmed ja litsentsid#
Sisse on ehitatud ainult failis data/INTERFERENCE-DATA-SOURCES.md läbi vaadatud allikad, mis valitakse võtmega --dataset:
--dataset |
Liik | Litsents | Väljundi litsentsiväli |
|---|---|---|---|
adsb-lol |
ADS-B | ODbL 1,0 | ODbL-1.0 |
noaa-marinecadastre |
AIS | USA avalik omand (CC0 1,0 avaldaja sõnul) | avalik omand |
kystverket |
AIS | NLOD 2,0 | NLOD-2.0 |
custom |
kumbki | mis iganes on määratud | --licence, --licence-url, --attribution nõutud |
Iga väljundfail sisaldab litsentsi, litsentsi URL-i, nõutavat omistust ja allika katvuse piire. Sisseehitatud kirjet ei ole allikatele, mille tingimused keelavad tuletatud kaartide kommertskasutuse või levitamise.
ODbL ja Kshana väljaanded. adsb.lol-i andmetest tehtud lahtripõhine ADS-B fail on Derived Database (tuletatud andmebaas) ja see antakse välja litsentsi ODbL 1,0 all; selle väli licence ütleb seda. Kshana enda kood jääb AGPL-3.0 alla. Kshana kommertsväljaanded, mis selliseid faile kirjutavad, kannavad sama märget ja igaüks, kes faili uuesti avaldab, peab selle säilitama. ADS-B ja AIS tulemusi ei kombineerita kunagi ühes failis, mistõttu ODbL ei kehti AIS-kihile.
Katvuse kallutatus. Kaardid pärivad oma allika katvuse. adsb.lol järgib vabatahtlike vastuvõtjaid, seega on avameri ja hõredalt kaetud piirkonnad hõredad. Kystverketi avaandmed jätavad välja kalalaevad alla 15 m ja vabaaja alused alla 45 m, mistõttu selle kaart peegeldab suuremaid laevu. MarineCadastre katab ainult USA vetesid.
Identifikaatorid. Sisendread kannavad õhusõiduki või laeva identifikaatorit. See räsitakse mälus juhusliku käivituskohase soolaga, kasutatakse ainult eri õhusõidukite või laevade loendamiseks ning seda ei kirjutata, logita ega trükita kunagi. Väljundid on koondatud: ühtegi identifikaatorit neis ei esine.
Mahasurumine. Lahtrit, kus sel päeval vaadeldi vähem kui 5 eri õhusõidukit või laeva, ei avaldata üldse ning AIS-i puhul teatatakse avaldatud lahtris märgitud arvust üks või kaks kui null. Ükski avaldatud väärtus ei saa üksikut õhusõidukit ega laeva esile tuua.
Sisendvormingud#
Lihtne CSV päiserealt, komadega eraldatud, ilma jutumärkideta, UTC ajad. Veergude järjekord on vaba; tundmatud veerud ignoreeritakse. Ajatempel on Unixi sekundid või YYYY-MM-DDTHH:MM:SS[.fff]Z. Read, mida ei saa sõeluda, loendatakse väljundi metaandmetes, mitte ei jäeta vaikselt välja.
ADS-B (kshana interference-map adsb):
| Veerg | Nõutud | Tähendus |
|---|---|---|
timestamp |
jah | teate aeg |
aircraft_id |
jah | läbipaistmatu identifikaator (räsitud, ei salvestata kunagi) |
lat, lon |
jah | kraadid |
alt_baro_ft |
jah | kõrgus jalgades; ground või tühi välistab rea |
nic, nacp |
vähemalt üks | täisarvud 0 kuni 11; tühi tähendab, et ei teatatud |
source_type |
ei | kui olemas, kasutatakse ainult väärtusi, mis algavad märgendiga adsb (MLAT, TIS-B jms on välistatud) |
adsb.lol-i readsb ajalugu, otse loetuna. Päevaarhiivid on readsb jälgfailide jagatud tar. Pakkida üks lahti, nagu avaldaja kirjeldab (osad ühendada, tar -xf -), seejärel anda Kshanale lahtipakitud kaust, üksik trace_full_*.json fail või CSV:
kshana interference-map adsb extracted-day/ --dataset adsb-lol --out maps/
Kataloogist otsitakse rekursiivselt trace_full_* faile (muid faile, näiteks trace_recent_*, ignoreeritakse ning sümbolilisi linke ei järgita). Iga fail on gzip-pakitud või lihtne JSON, tuvastatuna esimeste baitide järgi, sest readsb kirjutab gzipi .json nime all; lahtipakkimine on piiratud 512 MiB-ga faili kohta. Igast jälgkirjest loeb Kshana ajanihke, laiuskraadi, pikkuskraadi, kõrguse (marker ground välistab kirje), õhusõiduki üksikasjade objekti väljad nic ja nac_p ning asukoha allika stringi (kirjed, mis ei pärine ADS-B-st, välistatakse). Kirjel, millel ei ole üksikasjade objekti, ei ole täpsusvälju ja see loetakse välistatuks. Fail, mida ei saa lugeda, loendatakse väljundi metaandmetes väljal trace_files_unreadable ja jäetakse vahele.
AIS (kshana interference-map ais):
| Veerg | Nõutud | Tähendus |
|---|---|---|
timestamp |
jah | teate aeg |
vessel_id |
jah | läbipaistmatu identifikaator (räsitud, ei salvestata kunagi) |
lat, lon |
jah | kraadid; AIS-i „pole saadaval“ väärtused ja (0, 0) jäetakse kõrvale |
sog_kn |
ei | kiirus üle maapinna sõlmedes; 102,3 (pole saadaval) käsitletakse puuduvana |
Maismaadetektor vajab maa polügoonifaili (--land): GeoJSON Polygon või MultiPolygon. Ettenähtud fail on Natural Earthi 1:10 miljoni maakiht (avalik omand). Ilma --land on detektor välja lülitatud ja väljund ütleb seda. Selle allalaadimiseks (selle funktsiooni ainus võrgujuurdepääs):
kshana interference-map fetch-land --out ne_10m_land.geojson --allow-network
See käivitab süsteemi curl (argumendiloendina, mitte kesta kaudu) HTTPS-i kaudu, ühe korra, ühe faili jaoks püsival aadressil, mis nimetab upstream-hoidla ühe kommiti. Allalaadimine säilitatakse ainult siis, kui selle SHA-256 võrdub koodi kinnitatud väärtusega; mittevastavus kustutab selle ja ebaõnnestub. Kui curl ei ole paigaldatud, ütleb käsk seda ning annab aadressi ja kontrollsumma, et faili saaks käsitsi tuua. Hoidlas ei ole midagi kaasas.
Väljund#
Üks GeoJSON-fail allika kohta UTC päeva kohta, kataloogis --out, nimega <source>-<dataset>-<YYYY-MM-DD>.geojson, kus <source> on adsb või ais, <dataset> on võtme --dataset väärtus (adsb-lol, noaa-marinecadastre, kystverket või custom) ja kuupäev on teadete UTC päev: adsb-adsb-lol-2026-03-01.geojson, ais-kystverket-2026-03-01.geojson. Andmekogum on nimes, et kaks ühe liigi andmekogumit ei saaks faili jagada, ning Kshana ei kirjuta faili kunagi üle: kui mõni siht on olemas, ebaõnnestub käsk enne mis tahes kirjutamist. CLI trükib iga kirjutatava faili kohta ühe rea. Lugeja saab kolm osa taastada avaldisega ^(adsb|ais)-(.+)-(\d{4}-\d{2}-\d{2})\.geojson$; sama teave on faili sees (source_kind, data.dataset, date). Sünteetilised näidisfailid, üks allika kohta, asuvad kaustas examples/interference-map/output/, koos käsuga, mis need uuesti genereerib, vaaturi ehitamiseks ja testimiseks. Ülataseme liige kshana_interference_map sisaldab skeemi nime, kuupäeva, võrku, meetodi id-d ja kõiki parameetreid, päevatasandi arve, andmelitsentsi ja omistust ning märget. Iga objekt on lahtri polügoon koos väljadega cell_i, cell_j, status, degraded ja koondarvud.
Võrk on fikseeritud: ruudukujulised lahtrid --cell-deg kraadi (vaikimisi 0,5) laius- ja pikkuskraadis, indekseeritud alates (-90, -180). Ida-lääne laius kahaneb laiuskraadiga: vaikimisi umbes 55 km ekvaatoril ja umbes 28 km 60 kraadi juures. Laiuskraad 90 kuulub viimasele reale ja pikkuskraad 180 on sama meridiaan kui -180. Eelregistreeritud meetodid on määratletud 0,5 kraadi võrgul. Mõni teine --cell-deg töötab, kuid ei ole eelregistreeritud meetod: CLI ütleb seda ja fail salvestab grid.preregistered_cell_deg ja grid.is_preregistered (false), et vaaturgi saaks seda öelda.
Varjatud arvud. Iga lahtripõhine arv, mis jääb avaldamisminimumist (5) allapoole, on null, kaasa arvatud null, mistõttu null ei tähenda kunagi „mitte ühtegi“ ning ükski avaldatud arv ei saa üksikut õhusõidukit ega laeva esile tuua. Väljad status ja degraded antakse endiselt. ADS-B failides on aircraft_observed avaldatud lahtri puhul alati vähemalt 5; aircraft_sampled ja aircraft_affected on null alla 5, ning affected_share on null, kui mõlemad ei ole vähemalt 5 (osakaal paljastaks varjatud arvu). AIS-failides on iga vessels_flagged kirje null alla 5.
Vormingu versioon ja väljad#
Vorming on fikseeritud kui schema: "kshana-interference-map/v1", format_version: 1. Muudatus, mis eemaldab või nimetab ümber välja või muudab selle tähendust, tõstab versiooni; välja lisamine ei tõsta, seega peab lugeja tundmatud väljad ignoreerima. Arv, mis on null, on varjatud, mitte null.
FeatureCollection
kshana_interference_map
schema, format_version, kshana_version, notice
source_kind "adsb" | "ais"
date "YYYY-MM-DD" (UTC)
grid { type: "fixed_lat_lon", cell_deg, preregistered_cell_deg, is_preregistered }
method { id, summary, parameters{...}, guards[], input_stats{...}, caveats[] }
day day-level figures (ADS-B: background_evaluated, background_share,
day_confounded, cells_published, cells_suppressed_below_min_distinct;
AIS: on_land_detector, cells_published, cells_suppressed_...)
data { dataset, name, licence, licence_url, attribution, coverage_notes[] }
features[] Polygon (one closed ring, [lon, lat], counter-clockwise)
properties cell_i, cell_j, status, degraded,
ADS-B: aircraft_observed, aircraft_sampled|null, aircraft_affected|null,
affected_share|null
AIS: vessels_observed, vessels_flagged{detector: n|null}, detectors[]
Väärtused status: ADS-B degraded, not_degraded, insufficient_sample, withheld_day_confounded, withheld_no_background; AIS anomalous, not_anomalous. degraded on tõene ainult väärtuste degraded ja anomalous puhul. Marsruudi kokkupuute aruandel on oma skeem kshana-route-exposure/v1.
Vaatluskeskus: päevatoode#
kshana interference-map daily muudab ühe UTC päeva ADS-B teated vaatluskeskuse kolmeks failiks (GeoJSON, PNG ja intsidendiaruande JSON) ning räsimanifestiks, ja kshana interference-map sensitivity taasesitab selle päeva eelregistreeritud parameetrite ühekaupa muutmisel. Käsk jõustab väljalaskereeglid: vähemalt 24 h pärast päeva lõppu (--delay-hours võib ainult tõsta), lahtrid 0,5 kraadi või jämedamad, ainult kolm olekut (degraded, not_degraded, not_observed), põhjust ei omistata ja OpenSky andmeid ei kasutata. Meetodi märkus, failivormingud ja piirid on failis observatory/METHOD.md. Piirkondlik käivitus (--bbox south,west,north,east) loeb ainult kasti teateid ja ütleb seda failis.
Studio kaardilehe spetsifikatsioon#
Studio kaardilehe jaoks, mis laeb kasutaja antud GeoJSON-faili (leht on ehitatud Studio lähtekoodis, mitte selles hoidlas). Midagi ei laadita üles: fail loetakse brauseris ja leht ei tee päringuid ühelegi andmeallikale.
Faili lugemine. Faili tuleks vastu võtta ainult siis, kui kshana_interference_map.schema algab väärtusega kshana-interference-map/ ja format_version on arv, mida leht toetab; vastasel juhul tuleb öelda, et fail ei ole toetatud Kshana häirekaart. Lugeda ülalloetletud väljad; tundmatuid ignoreerida. Fail sisaldab ühte allikat ja ühte päeva. Laadida võib mitu faili.
Lahtrid. Iga objekti polügoon tuleb joonistada. Värvida status järgi ja alati selgitada legendis, mida iga värv tähendab. Neli olekut, millest ühtegi ei tohi peita ega ühendada:
| Olek | Tähendus | Kust see tuleb |
|---|---|---|
| Halvenenud (AIS-i puhul anomaalne) | suur osa õhusõidukitest teatas madalast täpsusest või laevadel ilmnesid sel päeval anomaaliad | degraded on tõene |
| Selge | vaadeldud piisava arvu õhusõidukite või laevadega ja märkimata | status on not_degraded või not_anomalous |
| Hindamata | vaadeldud, kuid sõelutud õhusõidukeid ei ole piisavalt, päev oli segatud või päeva tausta ei saanud hinnata | status on insufficient_sample, withheld_day_confounded või withheld_no_background |
| Vaatlemata | liiga vähe õhusõidukeid või laevu, mistõttu lahtrit ei avaldatud | selle lahtri jaoks objekti ei ole |
„Vaatlemata“ on objekti puudumine: joonistada see neutraalselt (ilma täiteta või viirutusega), mitte kunagi „selge“ värviga. Kasutada värviskeemi, mis ei toetu ainult punasele vastu rohelisele. Lahtri üksikasjad hõljutamisel või valimisel näitavad arve väljal properties sellisena nagu antud ja iga null arvu kui „varjatud (vähem kui 5)“, mitte kunagi nullina. Vaatur peaks ütlema ka siis, kui grid.is_preregistered on false, et fail kasutab eelregistreeritud meetodist väljapoole jäävat lahtrisuurust.
Kihid. ADS-B ja AIS on eraldi kihid oma lülitite, legendide ja litsentsiridadega. Neid ei tohi kunagi liita üheks värviväljaks ega üheks arvuks, joonistada üheks kombineeritud lahtriks ega nende lahtreid summeerida. Erinevad päevad on erinevad failid: näidata üks päev korraga päevavalijaga, mitte päevi üksteise peale kattes.
Litsents ja omistus. Iga nähtava kihi puhul näidata kaardil ning igas ekspordis või ekraanipildis sõna-sõnalt teksti data.attribution, välja data.licence koos lingiga väljale data.licence_url ja välja data.coverage_notes. Kui ADS-B kiht on nähtav, kehtib selle ODbL litsents ainult sellele kihile. Ühendatud faili eksporti ei tohi pakkuda.
Meetod. Meetodi id ja parameetrid (method.id, method.parameters) ning arvud day tuleb pakkuda üksikasjade paneelil, kaasa arvatud day_confounded (öelda selgelt, et ühtegi lahtrit ei nimetatud halvenenuks päeva tausta tõttu) ja input_stats.
Säilitatavad hoiatused (näidata faili enda method.caveats ja notice ning hoida see sõnastus või selle ekvivalent kaardiga koos nähtaval):
- Halvenenud või anomaalne lahter ei ole häirimise tuvastamine. Olemas on ka muid põhjuseid.
- Värvita lahtrit ei vaadeldud. See ei ole tõend, et ala oli selge.
- See on mineviku asukohateadete kirjeldus, mitte prognoos ega ühegi vastuvõtja mõõtmine.
- Katvus järgib andmeallikat; lugeda katvusmärkusi.
Leht ei tohi nimetada ega näidata ühtegi üksikut õhusõidukit ega laeva ning failid ei sisalda ühtegi.
Marsruudi kokkupuude. Kui leht laeb ka kshana-route-exposure/v1 aruande, näidata selle ridu päeva ja allika kohta koos nelja osakaaluga (halvenenud, selge, hindamata, vaatlemata) koos, mitte kunagi ainult halvenenud osakaalu, ning aruande caveats ja iga rea map_licence ja map_attribution.
Kiirgusallika piirkond (interference-map locate)#
kshana interference-map locate hindab, kus võib asuda häireallikas, samadest avatud ADS-B või AIS teadetest: piirkond öeldud usaldusnivoodel, tsentroid määramatuse ellipsiga ja sessioonid ajas. See ei tagasta kunagi paljast punkti. MODELLED (registririda VM-bc70cb57): füüsika on õpikuraadionähtavus, piirkondade usaldusväärsus sõltub mudelist ja ainus väline kontroll on Jammertesti võrdlus, mis on eelregistreeritud failis emitter-region/PREREGISTRATION.md. Kiirgusallika piirkondade avaldamine avalikus observatooriumis on eraldi omaniku otsus ja on välja lülitatud: observatoorium seda moodulit ei loe ja test kinnistab seda.
kshana interference-map locate input.csv --source adsb --dataset adsb-lol --out regions/
kshana interference-map locate day-dir/ --source adsb --dataset adsb-lol --out regions/ # readsb traces
kshana interference-map locate ais.csv --source ais --dataset kystverket --land land.geojson --out regions/
Valikud: --levels 0.5,0.9,0.95, --cell-km, --session-gap-min, --emitter-height-m min,max, --ship-height-m (AIS), --tdoa fix.json (liida TDOA fikseering; allpool). Iga valik, mis erineb eelregistreeritud väärtusest, teatatakse kui „mitte eelregistreeritud meetod“. Faile ei kirjutata kunagi üle.
Mudel. Teated rühmitatakse üksusteks (üks õhusõiduk või laev ühes 2-minutilises vahemikus), millest igaüks on mõjutatud (ADS-B: vähemalt pooltel selle teadetest on kaardi enda reegli järgi madal NIC või NACp; AIS: ebatõenäoline kiirus või hüpe või rannikujoonest sisemaa poole jääv positsioon) või mitte. Õhusõiduk või laev loetakse ainult siis, kui sisendis on vähemalt 5 head teadet (sama varustuse lähtetaseme kaitse nagu kaardil). Mõjutatud üksused rühmitatakse sessioonideks: rohkem kui 30 minuti pikkune vahe jagab ajas ja ajaklastri sees kuuluvad kaks üksust kokku, kui üks kiirgusallikas võiks mõlemat ulatuda. Ühe sessiooni jaoks saab iga ruudustiku kandidaatpositsioon tõenäosuse:
- Raadionähtavus. Kõrgusel
holev õhusõiduk ja kiirgusallika antenn kõrguselh_enäevad teineteist 4/3 Maa raadiusel kuni4.122 (sqrt h + sqrt h_e)km kaugusele.h_emarginaliseeritakse vahemikus 2 kuni 100 m (8 logaritmiliselt jaotatud väärtust). - Võimsus. Kiirgusallika võimsus on tundmatu, seega piirab ulatust efektiivne ulatus vahemikus 12 km kuni 426 km (sammud 1,25) või „ainult raadionähtavus“, marginaliseeritud võrdse kaaluga. Ulatuse serv on pehme: üksus loetakse ulatuses olevaks kaaluga, mis langeb lineaarselt 15% ulatuse ulatuses mõlemal küljel (vähemalt kolm neljandikku ruudustiku lahtrist), sest maastik, antennikiirgus ja tee pole sellest täpsemalt teada.
- Mõjutatud ja mõjutamata. Õhusõiduk või laev on vastuvõtlik tõenäosusega 0,6 (vastuvõtja varustus, antenn ja signaalitee erinevad), ulatuses oleva vastuvõtliku õhusõiduki üksus on mõjutatud tõenäosusega 0,9 ja iga muu üksus on mõjutatud taustatõenäosusega 0,03 (muud põhjused). Vastuvõtlikkus on õhusõiduki latentne omadus, summeeritud õhusõiduki kaupa välja, nagu ka püsiv varustusrike (tõenäosus 0,03: kõik selle õhusõiduki üksused on mõjutatud kus iganes see on), mis hoiab vigase transponderi eemal piirkonna kaasatõmbamisest. Seega mõjutatud õhusõiduk tõmbab posterioori positsioonide poole, mis seda ulatavad, ja mõjutamata nähtavusega õhusõiduk surub vastu positsioonidele, mis oleksid seda ulatanud, kuni ühe õhusõiduki kaaluga, olenemata sellest, mitu teadet see saatis, samas kui mõjutamata õhusõiduk ilma nähtavuseta ei ütle midagi.
- Maastikuvaba. Maastikku, kanaliseerumist ega difraktsiooni ei modelleerita (maastik saab nähtavust ainult eemaldada).
- Tempereerimine. Logitõenäosus korrutatakse arvuga 0,3 (astmeline posterioor). Mudeli tõendid on sõltuvamad ja selle servad vähem teravad kui sõltumatus, mida tõenäosus eeldab, ning nende vigadega sünteetilistel andmetel hoidsid tempereerimata piirkonnad tegelikku allikat selgelt alla oma öeldud määra; 0,3 valiti ainult sünteetiliste andmete põhjal (tuletus on failis
docs/emitter-region/PREREGISTRATION.md, jaotis 8).
Posterioor annab suurima tihedusega piirkonnad öeldud tasemetel (pesastatud; polügoonid aukudega, kus vaja), posterioori kaaluga tsentroidi ja selle momentellipsi (skaleeritud 95%-ni Gaussi all; kalibreeritud tasemed on polügoonid, mitte ellips). Ruudustik on kogu piirkonna ulatuses jäme (umbes 5 kuni 10 km) ja iga massi hoidev jäme lahter jagatakse 4 korda 4. Katvuse nihet käsitletakse tingimisega selle peale, kus teateid on: piirkond on lai seal, kus õhusõidukeid oli vähe, ja sessioon, mille 95% piirkond täidab rohkem kui 80% selle otsinguala ulatusest, teatatakse kui unconstrained ilma tsentroidita.
Sessioonid ja profiil. Iga avaldatud sessioonil on algus, lõpp, kestus, 0.5-kraadiste lahtrite ala, mis sisaldavad mõjutatud üksust ja vähemalt 5 eristatavat õhusõidukit või laeva, eristatavate mõjutatud ja vaadeldud arv ning vastutõend (eristatavad mõjutamata nähtavusega tsentroidile; varjatud alla 5). Sessioon, milles on vähem kui 5 eristatavat mõjutatud õhusõidukit või laeva, varjatakse ja loetakse kokku. Profiil annab UTC tunni kaupa päevas eristatavad mõjutatud õhusõidukid (null alla 5) ja sessiooniaja minutid ning sessiooniaja tunnid UTC päeva kohta.
Valikuline TDOA liitmine. --tdoa fix.json võtab {"receivers": [[lat, lon, height_m], ...], "tdoa_s": [...], "sigma_s": 1e-7, "start": [lat, lon]} (vähemalt kolm vastuvõtjat; tdoa_s[i] on vastuvõtja i+1 miinus vastuvõtja 0). Asend lahendatakse Maa pinnal Gauss-Newtoniga sõltuvusel geolocation::tdoa_predict, selle kovariatsioon on geolocation::tdoa_crlb_on_sphere ja Gaussi jaotus korrutatakse posterioori sisse. Cramer-Rao tõke on mudeli alampiir, mitte mõõdetud täpsus.
Väljundid (emitter-<source>-<dataset>-<day>): .geojson (MultiPolygon piirkond taseme ja sessiooni kohta, ellipsi polügoon, tsentroidi punkt, mis kannab oma ellipsi), -summary.json, -sessions.csv, -figure.svg. Igaüks põimib andmekogu litsentsi, litsentsi URL-i ja viite autorile, meetodi id kshana-interference-map/emitter-region/v1, iga parameetri, eeldused ja piirangud ning kannab oma tõendimärgist (tase MODELLED, registrirea id-d; joonise all olev riba, # evidence read tabelis, evidence liige JSON-is). Masinfailid on inglise keeles, olenemata keelest; joonise tekst ja käsurea read on lokaliseeritud. Sünteetiline näide on kaustas examples/emitter-region/ (regenerate.sh).
Privaatsus ja sõnastus. Ühelgi väljundil ei ole õhusõiduki ega laeva tuvastajat; teate positsiooni ei joonistata; sessioon vajab vähemalt 5 eristatavat õhusõidukit või laeva; alla 5 arvud on null. Sõnastus on neutraalne: „hinnanguline kiirgusallika piirkond“, „häireallika piirkond“. Piirkond ei ole kellegi positsioon, ei ole põhjuse järeldus ega ütle midagi selle kohta, kes või mis seisab allika taga; laiendatud sõnastuse test kontrollib väljundeid osalejate, kavatsuse ja konflikti sõnade suhtes.
Piirangud. Usaldusväärsus sõltub mudelist. Sünteetilistel andmetel (generaator, mis jagab mudelit, ulatuse servad on õhusõiduki kohta 15% ebakindlad, püsivad varustusrikked, tundmatu võimsus ja tundmatu antenni kõrgus) hoidis 95% piirkond tegelikku allikat 0,99 (õhusõiduki geomeetria) ja 1,00 (laeva geomeetria) sessioonidest ning 50% piirkond umbes 0,77: tasemed on konservatiivsed tõenäosuse astendaja 0,3 tõttu ja sessiooni tsentroidi vea mediaan on 23 km (õhusõiduk) ja 12 km (laevad). Kalibreeringut kontrollitakse ainult sünteetilistel andmetel; Jammertesti võrdlus eelregistreeriti (emitter-region/PREREGISTRATION.md) ja käivitati üks kord: NOT ASSESSABLE mõlema allika puhul (emitter-region/RESULTS.md). Üks allikas sessiooni kohta; mitu lähedast allikat näevad välja nagu üks. Piirkondlik põhjus (konstellatsiooni katkestus, kosmoseilm) annab piirkonna, mis ei ole allikas. ADS-B annab väljaspool tiheda liiklusega õhuruumi vähe teateid ja ainult umbes veerand readsb jälgimispunktidest kannab NIC ja NACp, seega hõredad alad annavad laiu piirkondi või üldse mitte (31% laeva geomeetria sessioonidest olid unconstrained).
ADS-B meetod (kshana-interference-map/adsb/v2)#
Iga õhus oleva ADS-B teade kannab kahte ise hinnatud navigatsioonikvaliteedi välja: NIC (asukoha sisaldumisraadius) ja NACp (95 % täpsuspiir, EPU). Kui pardal olev vastuvõtja kaotab oma satelliidifiksi või ei usalda seda, langevad mõlemad, mistõttu need kannavad häirimise signatuuri. Need langevad ka muudel põhjustel.
Eelregistreeritud parameetrid (konstandid koodis, kirjutatud igasse faili; muudatus tähendab uut meetodi versiooni):
| Parameeter | Väärtus |
|---|---|
| Kõrguse alampiir | baromeetriline kõrgus vähemalt 5000 ft |
| Madala täpsusega teade | NACp kuni 6 (teatatud EPU piir on 556 m, 0,3 NM või suurem või teadmata) või NIC kuni 5 (teatatud sisaldumisraadiuse piir on 1852 m, 1 NM või suurem või teadmata) |
| Hea teade | NACp vähemalt 8 ja NIC vähemalt 7; hinnatakse sisendis olevate väljade järgi (mõlemad, kui mõlemad on olemas, muidu see, mis on olemas) |
| Varustuse lähtetase | õhusõiduk loetakse lahtris ainult siis, kui sellel on samal päeval väljaspool seda lahtrit vähemalt 5 head teadet |
| Lahtris sõelutud õhusõidukid | vähemalt 3 teadet lahtris |
| Lahtris mõjutatud õhusõidukid | vähemalt 50 % selle lahtrisisestest teadetest on madala täpsusega |
| Minimaalne valim | vähemalt 10 sõelutud õhusõidukit |
| Halvenenud | vähemalt 5 mõjutatud õhusõidukit, sõelutud õhusõidukite mõjutatud osakaal vähemalt 0,30 ja vähemalt 0,15 üle päeva lahtri osakaalu mediaani |
| Segatud päev | lahtri osakaalu mediaan (vähemalt 5 täisvalimiga lahtri põhjal) vähemalt 0,15: ühtegi lahtrit ei kuulutata halvenenuks |
| Tausta pole | vähem kui 5 täisvalimiga lahtrit, mistõttu mediaani ei saa hinnata: lahter, mis täidab läved, on withheld_no_background, mitte halvenenud |
| Avaldamisminimum | vähemalt 5 eri vaadeldud õhusõidukit |
Need väärtused seati NIC ja NACp koodide määratluste ning privaatsusreegli põhjal enne, kui ühtegi andmeid vaadati. Neid ei häälestatud päris andmetel ja testid kasutavad ainult sünteetilisi andmeid. Lahtri olekud: degraded, not_degraded, insufficient_sample (avaldatud, kuid vähem kui 10 sõelutud õhusõidukit), withheld_day_confounded ja withheld_no_background.
Versioon 2. Versioon 1 kuulutas lahtri halvenenuks juba 3 mõjutatud õhusõidukiga, mis on vähem kui 5 õhusõiduki avaldamisminimum, ning jättis päeva tausta kontrolli ütlemata vahele, kui täisvalimiga lahtreid oli vähem kui 5. Versioon 2 nõuab vähemalt 5 mõjutatud õhusõidukit ja varjab otsuse (withheld_no_background), kui tausta ei saa hinnata. Mõlemad muudatused karmistavad meetodit (miski, mis ei olnud versioonis 1 halvenenud, ei ole halvenenud versioonis 2); põhjus on, et avaldatud otsus ei tohi kunagi toetuda väiksemale arvule õhusõidukitele kui arv, mille alla arvud varjatakse. Versiooni 1 faile ei antud välja.
Miks täpsusväljad langevad muudel põhjustel peale häirimise ja iga põhjuse kaitse:
| Põhjus | Kaitse |
|---|---|
| Vanemad transponderid, mis ei teata NIC-i ega NACp-d kunagi või teatavad neid fikseeritud madala väärtusega | varustuse lähtetase: õhusõidukit, millel ei ole sel päeval mujal häid teateid, ei loeta |
| Madal kõrgus ja pinnaoperatsioonid (maastiku varjestus, erinevad asukohavormingud) | kõrguse alampiir; read, mis on märgitud ground, välistatakse |
| MLAT või muud mitte-GNSS-i asukohad | source_type filter, kui veerg on olemas |
| Üks õhusõiduk saadab palju teateid | loetakse eri õhusõidukeid, mitte teateid |
| Konstellatsiooni või täiendussüsteemi katkestus või kosmoseilmasündmus, mis langetab täpsust laial alal | lahter peab ületama päeva lahtri osakaalu mediaani varuga ning päev, mille mediaan on ise kõrge, märgitakse segatuks ja ühtegi lahtrit ei kuulutata |
| Ühe õhusõiduki varustuse rike | vajab paljude eri õhusõidukite osakaalu koos minimaalse valimiga |
| Vähe õhusõidukeid lahtris | minimaalne valim; alla 5 vaadeldu korral lahtrit ei avaldata |
Mis jääb: meetod ei suuda häirimist eristada piirkondlikust põhjusest, mis on pigem lokaalne kui lai (kohalik satelliidigeomeetria mõju või maapealse täiendussüsteemi katkestus näeks sama välja), ning see on ühes suunas konservatiivne: õhusõiduk, mis lendab terve päeva ainult mõjutatud piirkonnas, ei oma lähtetaset ja seda ei loeta, mistõttu püsivad suured alad jäävad alaesitatuks.
AIS meetod (kshana-interference-map/ais/v2)#
Laeva ja päeva kohta viis detektorit. Detektor kvalifitseerub lahtris, kui see märgib vähemalt 5 eri laeva, mis moodustavad vähemalt 20 % seal vaadeldud laevadest; lahter on anomalous, kui mõni detektor kvalifitseerub.
| Detektor | Reegel (eelregistreeritud) |
|---|---|
on_land |
vähemalt 3 teadet lahtris rohkem kui 2000 m sisemaal etteantud rannajoonest |
circle |
20 järjestikuse teate aken (samm 10, vahed kuni 30 min), mille keskmine raadius tsentroidist on 500 m kuni 20 km, raadiuse variatsioonikoefitsient kuni 0,15, üks liikumissuund, mille kogupöörde suurus on vähemalt 270 kraadi (sammud kuni 90 kraadi, netopööre vähemalt 80 % kogupöördest) ja keskmine kiirus vähemalt 2 kn |
implausible_jump |
vähemalt 2 hüpet lahtrisse saabumisel: järjestikused teated vähemalt 1000 m kaugusel, kuni 1 h vahega, mis tähendavad üle 70 kn (tähendatud kiirus kasutab teadete vahel vähemalt 1 s, seega kaks sama ajatempliga teadet, mille asukohad on 1 km või rohkem teineteisest eemal, loetakse hüppeks) |
implausible_speed |
vähemalt 3 teatatud kiirust üle 70 kn lahtris |
same_position |
vähemalt 5 eri laeva, kes teatavad sama asukohta (ümardatud 1e-4 kraadini, umbes 11 m) samas 10-minutilises aknas |
Lahtreid, kus on vähem kui 5 eri laeva, ei avaldata; iga märgitud arv alla 5, null kaasa arvatud, esitatakse kui null.
Versioon 2. Versioon 1 kvalifitseeris detektori juba 3 märgitud laevast ja avaldas arvud 3 ja 4. Versioon 2 tõstab märgitud laevade miinimumi väärtuseni 5, mis on avaldamisminimum, nii et otsus anomalous ei toetu kunagi väiksemale arvule laevadele kui arv, mille alla arvud varjatakse. See karmistab meetodit ning ühtegi versiooni 1 faili ei antud välja.
Valepositiivsete teadaolevad põhjused, mida osakaalureegel ja läved vähendavad, kuid ei kõrvalda: jõgedes, kanalites ja sadamates asuvad laevad jämeda rannajoone lähedal (selleks on 2 km sisemaa puhver); kaks laeva, kes jagavad ühte identifikaatorit, mis näeb välja nagu hüpped; vigase fiksiga või testseadmega transponderid; ning lootsilaevade ja otsingulaevade ringlemine, mis võib meenutada ringe. Rannajoonefail mõõtkavas 1:10 miljonit on täpne umbes ühe kilomeetri piires.
Hüppe- ja kiiruse detektorid võrdlevad teateid ühe sisendfaili piires; mitme faili või päeva vahel jaotatud rada ei õmmelda kokku.
Mälu. Sisend loetakse rida-realt ja seda ei hoita kunagi tervikuna. ADS-B hoiab ainult õhusõiduki ja lahtri kaupa loendureid. AIS hoiab iga vastuvõetud teadet kompaktses kirjes (umbes 40 baiti), kuni selle päev hinnatakse, mistõttu mälukasutus kasvab sisendis olevate AIS-teadete arvuga; väga suur AIS-sisend tuleks päevade kaupa jagada.
Marsruudi kokkupuude#
kshana route-exposure --route route.geojson --map out/ [--map other/] \
[--from 2026-03-01] [--to 2026-03-07] [--out report.json] [--json]
--route on GeoJSON LineString (üksi, Feature'is või FeatureCollection'is) või lat,lon ridadega CSV. --map võtab kaardifaile või nende kaustu ning seda võib korrata. Teekonnapunktid ühendatakse sirgjoontega laius- ja pikkuskraadis, mistõttu pikki lõike tuleks tihendada; lõik läheb pikkuskraadis lühemat teed, nii et lõik, mis ristub antimeridiaani (179,5 E kuni 179,5 W), ristub selle. Marsruut jagatakse umbes 250 m tükkideks. Iga tükk mõõdetakse oma kahe otspunkti vahel 6371,0088 km raadiusega sfääril (sama tee, mis otsustab, millises lahtris see asub) ja seotakse lahtriga, kus asub selle keskpunkt.
Päeva ja allika kohta annab aruanne marsruudi pikkuse ja neli osakaalu, mis summeeruvad väärtuseks 1: share_degraded, share_not_degraded, share_unassessed (lahter olemas, kuid ilma otsuseta) ja share_not_observed (lahter kaardil puudub). Viimaseid kahte tuleb lugeda koos esimesega: marsruudi kohta, millel on madal halvenenud osakaal ja kõrge vaatlemata osakaal, ei ole näidatud, et see oleks selge. ADS-B ja AIS read esitatakse eraldi ja neid ei kombineerita kunagi. Iga rida kannab kaardi litsentsi ja omistust.
Teegifunktsioonid#
Kutsujatele, kes hoiavad andmeid mälus (sidumised, MCP-server, brauseriversioon), pakub moodul kshana::interference_map::api samu meetodeid tekstiga või baitidega sisendis ja JSON-iga väljundis, ilma ühtegi faili või võrku puudutamata:
| Funktsioon | Sisse | Välja |
|---|---|---|
adsb_maps_from_csv(csv, &DatasetSpec, cell_deg) |
ADS-B CSV tekst | Vec<DayMap> |
adsb_maps_from_readsb_traces(&[&[u8]], &DatasetSpec, cell_deg) |
üks baidilõik readsb jälgfaili kohta (gzip või lihtne) | Vec<DayMap> |
ais_maps_from_csv(csv, &DatasetSpec, cell_deg, Option<&str>) |
AIS CSV tekst, valikuline maa GeoJSON tekst | Vec<DayMap> |
route_exposure(route_text, &[&str], from, to) |
marsruudi tekst, kaardi GeoJSON tekstid, valikulised YYYY-MM-DD piirid |
kshana-route-exposure/v1 JSON |
Objektil DayMap on file_name (<source>-<dataset>-<date>.geojson), date ja geojson (v1 dokument). DatasetSpec on Preset("adsb-lol" | "noaa-marinecadastre" | "kystverket") või Custom { licence, licence_url, attribution }; DEFAULT_CELL_DEG on 0,5. Vead on MapError. Andmekogumi reeglid (heaks kiidetud eelseaded, nõutav litsentsitekst, liik peab sobima) kehtivad täpselt nagu käsureal.
Väline valideerimine#
tests/interference_map_reference.rs võrdleb Kshanat sõltumatute realisatsioonidega sünteetilistel sisenditel, tolerantsidega, mis on eelregistreeritud failis tests/fixtures/interference_map_ref/PREREGISTRATION.md: NIC ja NACp koodide tähendused pyModeS-i dekodeerimise vastu sünteetilistel ADS-B kaadritel, AIS-i „pole saadaval“ väärtused pyais dekodeerimise vastu sünteetilistel AIVDM lausetel, võrgulahtri määramine shapely vastu, marsruudi pikkus lahtri oleku kohta shapely ja GeographicLibi vastu ning sisemaa maskeerimine shapely ja pyproji vastu. Fikstuurid teeb scripts/gen_interference_map_ref.py; CI ei vaja Pythonit. See valideerib koodide ja väljaväärtuste lugemist ning geomeetriat. See ei valideeri, et märgitud lahter on häirimine.
Testid#
Kõik testid kasutavad sünteetilisi genereeritud andmeid ja ei kasuta võrku: ühiktestid failis src/interference_map/ ja tests/interference_map_cli.rs käskude otsast lõpuni testimiseks, sealhulgas et ükski identifikaator ei jõua väljundisse ja et keeldumised ei jäta ühtegi faili maha.