Il file di avvistamento
Una registrazione è un file JSON, che l'abbia scritta l'editor o tu. Ecco che cosa può contenere, e che cosa significa ogni campo.
Una registrazione è un semplice file JSON. Niente al suo interno è un blob binario, un identificativo in un database o un riferimento a questo sito — puoi scriverne una a mano, generarla dal tuo archivio, o confrontarne due in una revisione del codice.
Ogni estratto qui sotto è in sola lettura, e ognuno conosce il formato: metti il cursore dentro un oggetto e premi Ctrl+Spazio (⌥+I su Mac) per elencare tutte le chiavi che potrebbero stare lì, con ciò che il modello dice di ciascuna.
L'osservazione#
| Campo | Significato |
|---|---|
version | Sempre 1 |
id | Quale resoconto è, unico fra tutte le registrazioni ovunque: il giorno, poi chi l'ha visto ("1964-04-24-ZamoraLonnie"), o il luogo per un osservatore anonimo ("1964-04-24-Socorro"). Ciò con cui un caso lo designa non è questo id ma quello del suo evento (vedi più sotto). |
time, endTime | { year, month, day, hour, minute, second, raw }, ogni parte facoltativa — è così che il formato esprime “1954” o “verso le 05:00”. raw è la data come scritta in EDTF, ed è ciò che la data significa: "1948-07-24T02:45~" (approssimativa), "2025-06?" (incerta), "1965-07-01%" (entrambe le cose), "19XX" (un anno mascherato), oppure "05:00" da solo per un'ora del giorno ricordata senza la sua data. I numeri sono tenuti in accordo con essa per ciò che si calcola (il cielo, l'orologio). È un sottoinsieme di EDTF (livello 0, questi qualificatori sull'intera data, anni mascherati); @rr0/time è il modello EDTF completo di RR0, in cui gli strumenti propri di UFO@home convertono le date di una registrazione season (spring, summer, autumn o winter) dice una data nota solo come «in primavera del 2022» (EDTF 2022-21), dove month e day sono omessi. |
durationSeconds | Un'alternativa a endTime, e prevale se sono date entrambe |
durationText | La durata come è stata enunciata quando non era esatta: una durata ISO 8601 con un dubbio (PT10M~) o un intervallo (PT5M/PT10M). durationSeconds è allora l'unica durata a cui si riproduce, scelta a partire da essa |
utcOffsetHours | L'ora LEGALE su cui era regolato l'orologio dell'osservatore (+1 per la Francia nel 1965). Se manca, viene approssimata dalla longitudine, che non può conoscere l'ora legale né un passaggio all'ora estiva |
timeZone | Il fuso IANA da cui è stato ricavato lo scarto ("Europe/Paris"): la regola, mentre utcOffsetHours è il numero che dava a quella data. Per collocare il cielo si legge solo il numero; il fuso è ciò che permette di ricavare di nuovo lo scarto quando la data cambia |
place | [{ lat, lng, name }] — name è il nome completo del luogo da cui sono state risolte le coordinate |
observer | { id, title, lastName, firstNames }, tutti facoltativi; da omettere del tutto per un osservatore anonimo. id è un riferimento alla persona (su RR0, la sua directory: "ZamoraLonnie"); gli altri campi la descrivono quando nessuno gliene ha ancora dato uno |
description | Il resoconto in prosa — una stringa, o una per lingua (vedi sotto) |
image, summary, summaryTime | Ciò che rappresenta l'osservazione dove è solo collegata e mai riprodotta: la scheda che mostra un link condiviso (vedi Condividere). image è un'immagine, un indirizzo (assoluto, relativo al file, o un percorso RR0 dalla radice del sito); summary una o due frasi, una stringa o una per lingua. Assenti, la scheda mostra il logo e dice chi l'ha vista, in quale caso e quando, per quanto lo dica il file. summaryTime è il secondo della registrazione in cui si fotografa l'immagine della scheda (0 per default: la prima immagine), per una registrazione la cui prima immagine non mostra il fenomeno; solo lo strumento di cattura del progetto lo legge, mai il lettore |
tags | Un elenco di stringhe, scritte in inglese: sono termini tecnici, e due registrazioni che ne condividono uno devono coincidere su di esso. A ogni lettore vengono mostrati nella sua lingua quando se ne conosce una traduzione, come avviene oggi per landing, trace, aerial observation, project sign, paralysis, contact, occupants, close encounter, photograph, radar, electromagnetic effect. L'elenco non è chiuso: qualsiasi altro viene mostrato come è scritto, e i codici di classificazione ("RR3", "NL") o i riferimenti di caso ("Blue Book 8729") si scrivono così come sono. Uno cambia la riproduzione: paralysis tiene immobile la vista dell'osservatore |
account | Chi l'ha visto e come ha viaggiato il resoconto: observerAgeYears (all'epoca), observerOccupation, source (come è arrivato a chi ha scritto la registrazione: on-site, interview, telephone, questionnaire, letter, social-media, press) e followedUp (se l'osservatore è stato ricontattato in seguito) |
sources | Dove leggere il resoconto così come è stato dato, nella forma di una fonte RR0: [{ type, title, authors, url, publication: { publisher, time }, index }], con type book o article, o niente per una pagina web o un post, che è allora solo il suo url. Mostrate nel pannello ?del lettore, come link quando hanno un indirizzo; riprese così come sono in un fascicolo RR0 |
milestones | I momenti con un nome del resoconto, mostrati sulla barra di riproduzione: [{ t, label, note }], dove label è la lettera o il numero che usa il resoconto stesso ("A", "B") o un paio di parole, e note ciò che è accaduto allora, con le parole del resoconto quando possibile (una stringa, o una per lingua) |
roads | Le strade o i sentieri che disegna la pianta del resoconto stesso, quando la mappa non li ha: [{ id, title, surface, widthM, path, source }], dove surface è paved, gravel o dirt, path la linea mediana come [{ eastM, northM }] dal luogo dell'osservatore all'inizio, e source la pianta o il rilievo da cui è stata ricavata |
Più osservatori: il caso#
Ogni osservatore ha una registrazione propria, e una registrazione non dice a quale caso
appartiene: un resoconto sta in piedi da solo. Ciò che li mostra insieme è il
caso, che li nomina: il
case.json di un fascicolo RR0, che indica il
titolo, la data e la classificazione del caso, ed elenca tutto ciò che vi è accaduto come
events. I suoi eventi di tipo sighting sono i suoi resoconti, ciascuno dei quali
punta alla registrazione di un osservatore:
{
"id": "ChilesWhitted",
"title": "Chiles et Whitted",
"time": "1948-07-24 02:45",
"events": [
{ "type": "event", "eventType": "sighting", "url": "observer-chiles.json" },
{ "type": "event", "eventType": "sighting", "url": "observer-whitted.json" }
]
}
| Campo | Significato |
|---|---|
id | L'identificativo proprio del caso. Su rr0.org è la directory del fascicolo e può essere omesso; un file di caso a sé stante lo indica |
title, time | Il nome del caso, e quando è avvenuto come RR0 scrive un'ora ("1948-07-24 02:45", "1954"). Il lettore designa un caso che apre con il suo titolo |
events | La cronologia del caso. Vengono riprodotti solo i sighting, ciascuno tramite il suo url, letto rispetto all'indirizzo del file di caso stesso (così lo stesso caso funziona dalla pagina del suo fascicolo e da qualsiasi altro luogo); quelli contrassegnati da interpretationOf sono letture di uno di essi (vedi sotto); gli altri (un articolo, un filmato, una confessione) sono di RR0 Un evento porta un id quando una lettura lo designa, e solo allora: appartiene al caso, quindi deve essere unico fra gli eventi del caso e in nessun altro posto, e un riferimento si legge nel file che lo scrive. Un interpretationOf che nessun evento porta è letto, come prima, come l'id che dichiara una registrazione che il caso elenca; quello che non corrisponde a nessuno dei due è un difetto del caso, che il lettore segnala sulla sua console, l'editor sopra le sue registrazioni, e il validate.py dello skill quando gli si dà il file del caso. |
image, summary | Ciò che mostra un link condiviso al caso, come per una registrazione (vedi Condividere): un'immagine, e una o due frasi, una stringa o una per lingua |
Dallo a <rr0-sighting src> o al lettore, e ogni osservatore potrà essere
scelto da un elenco. Una registrazione può essere data direttamente, senza caso, ma un caso con un solo
avvistamento funziona allo stesso modo e nomina ciò che mostra. Provalo con
case-chiles-whitted.json
(riproducilo).
Dirlo in più di una lingua#
Una registrazione passa da un lettore all'altro, quindi ogni campo scritto da un autore può contenere
una stringa per lingua invece di una sola: description, il title di una forma
o di un elemento dello scenario, e il label e la note di una tappa.
{
"description": {
"fr": "Tout le compte rendu de Lonnie Zamora, d'un seul tenant…",
"en": "Lonnie Zamora's whole account, of a piece…"
}
}
Le chiavi sono etichette di lingua come le fornisce un browser (fr, en,
pt-BR), e nessuna è obbligatoria. Una stringa semplice resta perfettamente valida e
significa “nella lingua in cui è stata scritta” — come ogni registrazione fatta prima di questo.
Un lettore le cui lingue non sono nessuna di quelle presenti riceve ciò che il file HA invece
di un campo vuoto: una traduzione mancante non deve mai trasformare qualcosa che l'osservatore
ha detto in qualcosa che non ha detto.
La lingua che riceve un lettore è quella del suo browser, a meno che la pagina non dica altrimenti: un
lang sull'elemento stesso, o su qualsiasi cosa intorno a esso, viene preso per primo — un
articolo che dichiara la propria lingua ha già detto in quale lingua il suo lettore lo sta leggendo.
L'elenco del browser viene dopo, quindi dichiararne una impone una scelta senza scartare le
altre.
L'editor mostra una sola lingua, quella del lettore, e scrivendo tocca solo quella — quindi aprire un file nell'altra lingua e scrivere è il modo in cui si aggiunge una traduzione, e un autore non può cancellare quella di un altro.
Ciò che è stato visto#
timeline.keyframes è un elenco di { t, shapes }, con t in
millisecondi dall'inizio. Ogni forma porta un sourceId — più forme possono
condividere una linea temporale (il fenomeno, una fiamma che lo segue, una seconda luce) — e una shape:
{
"kind": "oval",
"bounds": { "x": 0, "y": 0, "width": 0, "height": 0 },
"color": "#39ff14",
"angle": 0,
"transparency": 0,
"haloScale": 1.5,
"brightness": 0,
"blur": 0,
"selected": false,
"title": "il fenomeno",
"angular": { "widthDeg": 1.2, "heightDeg": 0.4 },
"aim": { "azimuthDeg": 353.6, "altitudeDeg": 0.6 }
}
| Campo | Significato |
|---|---|
kind | oval, oppure polygon, che allora prende anche points: [{ x, y }] in pixel dall'angolo in alto a sinistra di bounds, estesi sulla sua larghezza e altezza, così che il contorno si allunghi con esso quando l'angolo ridimensiona il riquadro |
title | Il suo nome, mostrato quando il puntatore ci passa sopra; una stringa, o una per lingua |
color | Qualsiasi colore CSS |
angle | La sua inclinazione, in radianti attorno al proprio centro, positiva in senso orario sullo schermo |
transparency | Da 0 opaco a 1 invisibile |
haloScale | Il bagliore intorno; 0 per nessuno |
brightness | Quanto abbaglia: un velo, le punte del diaframma, un nucleo saturato al bianco |
blur | Quanto indistinti l'osservatore ha detto che apparivano i bordi |
angular | La sua dimensione apparente in gradi — vedi sotto |
aim | Dove si trovava nel cielo dell'osservatore: la direzione del suo centro, azimuthDeg in senso orario dal nord vero e altitudeDeg sopra l'orizzonte. Non la direzione in cui guardava l'osservatore, che è l'headingDeg e il pitchDeg della posa — vedi sotto |
aim lo colloca, angular lo dimensiona. bounds
è la proiezione di entrambi sulla tela fissa di 640×360 con la direzione e il campo visivo della
posa, attraverso lo strumento della registrazione stessa; viene ricavato di nuovo al caricamento, così
un file sopravvive a un cambiamento di tela, di campo visivo, di strumento, o di dove guardava
l'osservatore. Se i pixel e gli angoli dovessero divergere, vincono gli angoli: spostare
bounds in un file non ha effetto finché c'è aim. Un file scritto a mano
può omettere bounds del tutto.
timeline.order è l'ordine di disegno da dietro in avanti, timeline.groups gli
identificativi di sorgente raggruppati. Entrambi facoltativi.
Tutto ciò che c'è intorno#
| Campo | Significato |
|---|---|
observerTrack | { keyframes: [{ t, pose }] } — pose contiene lat, lng, elevationM (sopra il suolo locale), headingDeg, pitchDeg, rollDeg, fovDeg, e per una fotocamera fNumber e focusDistanceM. Riprodotto come si muove una persona: esattamente la posa indicata a ogni fotogramma chiave, e fra l'uno e l'altro un movimento che prende velocità, la mantiene attraverso i fotogrammi chiave che continuano a muoversi, e rallenta fino a una pausa — due fotogrammi chiave con lo stesso luogo, o la stessa direzione. Uno sguardo inizia e finisce fermo; una camminata o un tragitto in auto già in corso al primo fotogramma chiave prosegue. Fermarsi e ripartire a piedi aggiungono il loro sobbalzo, un cenno del capo che si spegne in un secondo e mezzo, trasferito nell'immagine quanto lo strumento lo lascia passare (appena per un occhio, del tutto per una fotocamera tenuta in mano). E un corpo a riposo non è mai del tutto immobile: in piedi o in attesa, la vista oscilla di qualche millimetro e deriva di un decimo di grado, lentamente, allo stesso modo nello stesso istante — tranne per un osservatore che il resoconto dice paralizzato (tag paralysis). Il pitchDeg indicato è come l'osservatore guardava nel riferimento di ciò che lo portava: finché si sposta, il lettore aggiunge la pendenza della strada sotto la traccia (letta dal rilievo, positiva in salita, attenuata quando lo sguardo si allontana dalla sua strada), così che una salita alza la vista e il chip Inclinazioneindica la somma filter è ciò che si teneva davanti allo strumento, un id di FILTERS come solar-visual per un'eclissi. Viene mantenuto tra i fotogrammi chiave, non sfumato (nessuno porta mezzi occhiali), e si toglie dichiarando "none". |
weatherTrack | { keyframes: [{ t, weather }] } — le condizioni del cielo lungo la registrazione: precipitazioni, vento, temporale, e le nuvole come strati ad altezze reali, ognuno in grado di contenere nuvole singole collocate in metri. Ogni campo di un weather è nella sezione seguente |
weatherSource | { id, name, url } del dato da cui è stato ricavato il meteo. La sua presenza significa che la registrazione viene riprodotta esattamente come è stata composta e non viene mai più consultata. Se manca, è il resoconto dell'osservatore stesso |
lightPollution | La brillanza del cielo notturno del luogo, città comprese: lo zenit di una notte senza Luna in magnitudini per secondo d'arco quadrato, come lo legge uno Sky Quality Meter o come lo dà l'atlante mondiale della brillanza artificiale del cielo notturno (la sua cifra «SQM», Falchi et al. 2016, che lightpollutionmap.info mostra per ogni luogo). 22 è un cielo naturale, una periferia intorno a 19, un centro città 17. Se manca, un cielo naturale. La parte delle città, ciò che resta tolti i 22 naturali, si aggiunge al cielo come luce: più forte verso l'orizzonte, dove l'aria bassa ne rimanda di più, e disegnata nel bianco caldo di una lampada a 3000 K. Annega la Via Lattea e la luce zodiacale, e toglie stelle, della differenza nella stella più debole che un occhio distingue (Crumey 2014): circa due magnitudini a 19. Ora la Luna fa lo stesso. "derived" quando è ricavata dall'atlante, "stated" quando l'osservatore l'ha misurata. L'editor la compila dall'atlante per un'osservazione dal 2015 in poi, come "derived" con l'atlante nominato, e non sostituisce mai una cifra scritta a mano; prima del 2015 non consulta nulla, perché il cielo era più buio di quello dell'atlante |
observerMap | Se la mappa di dove si trovava l'osservatore parte aperta quando la registrazione viene riprodotta o modificata: true o false. Se manca, decide il lettore: aperta per un osservatore che si è spostato, chiusa per uno rimasto fermo. Una pagina che incorpora il lettore ha l'ultima parola (il suo attributo show-observer-map). L'editor lo scrive quando la mappa viene aperta o chiusa al suo interno, così che un lettore veda ciò che l'autore ha lasciato |
soundTrack | { keyframes: [{ t, sound }] } — kind (none/hum/whistle/rumble/crackle), volume, pitchHz, e un src facoltativo di una registrazione reale. volume e pitchHz scorrono fra i fotogrammi chiave, kind e src cambiano al fotogramma chiave. Un src su un altro sito deve essere servito a qualsiasi origine (CORS) |
references | Immagini del luogo sovrapposte alla scena: src (un indirizzo, o un URL data: per un'immagine aggiunta da un disco), kind (photo/panorama), registration (headingDeg, pitchDeg, rollDeg, fovDeg), opacity, credit/creditUrl, t e drawing facoltativi, from ({ lat, lng }, dove è stata scattata: il lettore la dissolve man mano che l'osservatore si allontana da quel punto; se manca, non si dissolve mai), e i landmarks su cui è stata allineata (id, label, picture come { u, v } dall'angolo in alto a sinistra, scene come { azimuthDeg, altitudeDeg }) |
traces | Ciò che un investigatore ha disegnato sul luogo, importato dal suo file Google Earth (KML o KMZ) e mostrato sulla scena come suo, mai come parte della ricostruzione: [{ id, title, kind, points, altitude, color, source }], dove kind è point, line o polygon, points i vertici come [{ lat, lng, altM }] esattamente come li aveva il file, altitude come si legge altM (ground, predefinito, relative al suolo sotto ogni punto, o absolute sul livello del mare), color un #rrggbb e source di chi è |
instrument, exposureSeconds | Attraverso che cosa è stato osservato, e per quanto tempo è rimasto aperto l'otturatore. Se manca, l'occhio nudo. instrument è uno fra eye, rectilinear-lens (una fotocamera di marca sconosciuta), roamer-1-120, instamatic-126, slr-35mm-50, slr-35mm-zoom, phone-landscape, phone-portrait; exposureSeconds è un unico valore per tutta la registrazione, contenuto nell'intervallo proprio di quel dispositivo |
iso | La sensibilità della pellicola o del sensore su cui è stata scattata l'immagine, quando è nota: 400 per una pellicola da 400 ISO. Se manca, quella del dispositivo stesso (il negativo a colori di una reflex è 100, quello di una Instamatic 64). L'immagine di una fotocamera non risponde come quella di un occhio: una pellicola non si adatta al cielo, riceve un'esposizione — la luce, per il tempo di otturazione, divisa per il quadrato del numero f — e vi risponde con la propria curva (quella morbida di un negativo, quella più ripida di una diapositiva, la linea retta di un sensore che si ferma al bianco). Così una posa notturna esce con un cielo nero e ciò che vi brillava in risalto |
sway | Quanto il corpo che tiene lo strumento muove la vista quando non cammina: 1 per una persona in piedi o seduta, 0 per una fotocamera su treppiede, qualsiasi valore intermedio o superiore per meno o per più. Se manca, 1 — tranne per un osservatore che il resoconto dice paralizzato (tag paralysis), per cui è 0, e per un'esposizione più lunga di mezzo secondo, che nessuna mano tiene ferma: quello è un treppiede, e anche 0 |
vehicle | Il veicolo in cui si trovava l'osservatore, quando lo scenario non lo disegna: { kind, windowsOpen, noise }, dove kind è car, van, truck, motorcycle o generic. Sentito dall'interno: il suo motore segue il tragitto dell'osservatore stesso — la marcia dalla velocità, i giri dalla marcia, lo sforzo dall'accelerare o dal rallentare — con il rotolamento e il vento, attutiti da un abitacolo chiuso, lasciati entrare da finestrini aperti; noise è il suo livello sonoro rispetto a uno ordinario del suo tipo (1 per impostazione predefinita). È anche ciò che tiene attivo il pulsante del suono del lettore quando il file non ha soundTrack: il pulsante risponde di tutto ciò che la scena riproduce — questo motore, un engine dello scenario, la pioggia e il vento — e non solo della traccia |
decor | Scenario a eastM/northM reali dall'osservatore: edifici (con floors, windows), alberi, arbusti, lampioni, veicoli, ponti, linee aeree, altri osservatori, aeromobili — facoltativamente con una track e delle lights il cui pattern porta una cadenza di lampeggio reale. Vedi sotto |
Un elemento dello scenario si esprime in metri, come tutto ciò che non è il fenomeno:
| Campo | Significato |
|---|---|
eastM, northM, headingDeg | Dove si trova rispetto all'osservatore, e verso dove è rivolta la sua parte anteriore, in senso orario dal nord vero |
sizeM | { widthM, lengthM, heightM } lungo i suoi assi, la lunghezza essendo la direzione verso cui è rivolto. Ogni asse è facoltativo: uno che nessuno ha misurato mantiene la proporzione propria della forma integrata |
model | Un vero modello 3D al posto della forma integrata: una voce del catalogo tramite id, o un file glTF/GLB a url (che prevale, deve essere leggibile da qualsiasi origine, e allora richiede il suo credit; uno relativo si legge dal file che lo indica). Non decide mai la dimensione: viene scalato, mantenendo le proporzioni, sul primo asse misurato fra lunghezza, altezza e larghezza, o sulla dimensione reale che gli dà il catalogo. Visto dall'interno, e ogni volta che il modello non si può ottenere, viene disegnata invece la forma integrata headingOffsetDeg ruota il modello caricato attorno al suo asse verticale perché il muso punti dove la scena se lo aspetta (0 guarda a nord con una prua di 0); una voce del catalogo porta la sua. credit è { title, author, license, sourceUrl }: license come la enuncia il suo autore ("CC BY 4.0") e sourceUrl da dove viene, perché l'affermazione sia verificabile. |
bridge | Per un "bridge": come è costruito. sizeM.lengthM è tutta la sua lunghezza lungo la strada, rilevati compresi, widthM la larghezza dell'impalcato e heightM l'altezza della carreggiata sull'impalcato sopra il suolo; spanM è la luce libera sotto l'impalcato, con la strada che corre su un rilevato di terra digradante fino al suolo su ciascun lato; deckThicknessM lo spessore della soletta (1,2 per impostazione predefinita); railing { heightM, postSpacingM, rails } il parapetto lungo entrambi i bordi, montanti e correnti le cui aperture sono rettangoli (1,05 m, 1,5 m e 2 correnti per impostazione predefinita). Disegnato con quelle misure, mai stirato |
wire | Per un "wire" (una linea elettrica o telefonica): sizeM.lengthM è la campata fra i suoi pali, lungo il suo headingDeg, e heightM l'altezza del filo più basso; strands [{ heightM, acrossM }] ne appende diversi (quelli sovrapposti condividono un acrossM, quelli di una traversa differiscono); poles è both (predefinito), start o end (l'estremità da cui la sua direzione si allontana o verso cui punta: l'altra è ancorata a un edificio) o none; diameterM (8 mm per impostazione predefinita) e poleHeightM (mezzo metro sopra il filo più alto). Dritta, senza catenaria, e disegnata a quelle misure, mai allungata |
track | [{ t, eastM, northM, altitudeM, headingDeg }] quando si muove, altitudeM sopra l'osservatore. La posizione è interpolata fra i fotogrammi chiave; la direzione è mantenuta dall'uno al successivo |
lights | Le sue luci: id, offsetM { x, y, z } dal suo centro (destra, alto, davanti), color, intensity (1 è una normale luce di navigazione) e un pattern: { "kind": "steady" }, oppure { "kind": "flash", perMinute, dutyCycle, phase }, la cadenza come la stabiliscono i regolamenti, la frazione accesa di ogni ciclo (circa 0,5 per un lampeggiatore a filamento, 0,01 per uno stroboscopio) e uno sfasamento da 0 a 1 fra le luci. L'editor le compila da preimpostazioni: “Aereo di linea”, “Elicottero”, “Auto, fari accesi”, “Auto, luci di emergenza”, “Lampeggianti di veicolo di soccorso”, “Lampione” |
engine | Un veicolo che si sente in moto: { kind, noise }, come vehicle sopra. Il suo motore segue la sua track, sentito da dove si trova l'osservatore, più debole e più sordo con la distanza |
occludesSourceIds | I fenomeni davanti ai quali l'osservatore ha detto che si trovava — vedi le regole sotto |
facade | Solo il genere building: { color?, plain? }. color è il muro, "#rrggbb"; salvo che plain sia true, si disegnano finestre a ogni piano e una porta al piano terra della faccia frontale. Disegnata alla sizeM enunciata (devono esserlo tutti e tre i lati), mai stirata, e non per un edificio con un osservatore dentro. L'editor prende il colore dal materiale che la carta enuncia per i muri (pietra, mattone, calcestruzzo, blocco, legno), o un intonaco dove non ne enuncia. Assente è la semplice scatola. |
roof | Solo il genere building: { shape, riseM, color?, ridge? }. shape è "flat" (la scatola), "gable" (due falde fino a un colmo lungo il lato maggiore, o la profondità con ridge: "depth") o "hip" (quattro falde); riseM è quanto il colmo sta sopra la gronda, quindi i muri sono sizeM.heightM meno quello; color è il tetto visto dall'alto, "#rrggbb". L'editor li legge dal laser e dalla foto aerea del rilievo. Assente è un tetto piano del colore dei muri. |
origin | Il rilievo da cui è stato ricavato questo oggetto, dall'id del suo fornitore ("ign-lidar-topo"), quando l'editor lo ha preso dal rilievo del luogo e l'autore non lo ha collocato a mano: un albero, un edificio, un ponte o una campata di linea. Scegliere un altro rilievo, o nessuno, o un altro luogo, sostituisce o toglie ciò che porta un origin, e mai ciò che non lo porta |
surveyedOn | Il giorno (AAAA-MM-GG) del rilievo più recente da cui è tratto questo oggetto, quando viene da uno (vedi origin): l'editor avvisa quando è successivo all'osservazione. |
lit, litKeyframes | Se la lampada di un lampione o i fari di un veicolo sono accesi. litKeyframes è [{ t, lit }], ordinato per t, per una luce che si accende o si spegne durante la registrazione; senza, lit vale per tutta la durata. Ignorato per un edificio, un albero o un osservatore |
observerSide, observerFacing, observerKeyframes, occupiedFloor | L'osservatore dentro l'oggetto, per un building o un veicolo (un solo oggetto alla volta lo contiene). observerSide dice dov'è: front, behind, left, right, front-left, front-right, behind-left o behind-right, l'occupante di un veicolo trovandosi a una delle sue quattro portiere. observerFacing è il finestrino da cui guarda quando non è quello del suo posto: un conducente siede in front-left e guarda dal parabrezza, front. observerKeyframes, [{ t, side, facing }], dice dove siede nel tempo, ciascuno mantenuto fino al successivo, e un fotogramma senza side significa fuori da lì in poi, come un conducente che scende. occupiedFloor è il piano di un edificio su cui si trova, da 0 (piano terra) a floors |
modelParameters | Le impostazioni del modello con cui l'oggetto è disegnato, per la chiave con cui la voce del catalogo pubblica ciascuna: { "costumeColor": "#5a6b3a" } per i vestiti di una persona, foliageColor per un albero, hullColor per un velivolo, gearUp per un aereo di linea in volo. Un modello porta le sue (l'editor disegna un campo per ciascuna); un oggetto disegnato come forma integrata non ne ha, è dipinto da color |
sightingUrl | Per un observer: l'indirizzo della registrazione propria di quell'osservatore, quando è noto, così che il menu della scena possa offrire di vedere la sua testimonianza |
Che cos'era: le interpretazioni#
Una registrazione esprime angoli, e un corpo in metri non fa mai parte di ciò che è stato visto. È
un'affermazione su di esso, e la si mette alla prova collocandola nella scena e guardandola da dove
si trovava l'osservatore: proietta la sua ombra, il suolo può nasconderla, e il suo contorno viene misurato
in ogni istante rispetto a ciò che l'osservatore ha detto. Un'interpretazione viene mostrata da sola, come il
mondo che afferma; se si chiede il confronto (il pulsante ◌, o compare-account su
<rr0-sighting>), il lettore disegna accanto tutto ciò che l'osservatore ha visto come
contorni tratteggiati e indica di quanto si discosta la direzione e quante volte più largo e più alto
appare ciascun corpo, in rosso quando un osservatore non avrebbe potuto sbagliarsi di tanto.
La lettura dell'osservatore stesso va nella registrazione, come interpretation. Quella di un altro non è nel resoconto: è un'altra osservazione, elencata nel caso (vedi sotto). Un resoconto il cui osservatore ha detto che cosa
fosse viene disegnato a tutto tondo, come l'ha detto; uno che non dice nulla in metri viene disegnato come gli
angoli che esprime. Il lettore lo propone, insieme all'interpretazione di ciascun analista, una alla volta.
{
"interpretation": {
"title": "Un velivolo posato sulle sue zampe",
"bodies": [{
"id": "craft",
"explains": ["ufo-1"],
"model": { "id": "ellipsoid" },
"track": [
{ "t": 52000, "eastM": -571.6, "northM": -965.5, "onGround": true,
"sizeM": { "widthM": 3.36, "lengthM": 3.36, "heightM": 1.73 },
"appearance": { "color": "#e8e6df", "albedo": 0.7 } },
{ "t": 83000, "azimuthDeg": 195.9, "altitudeDeg": 4.1, "distanceM": 44 }
]
}]
}
}
| Campo | Significato |
|---|---|
explains | I sourceId dei fenomeni che questo corpo afferma di essere |
model | Una forma costruita qui (ellipsoid, sphere, disc, cylinder, cone, box, torus, figure), un modello del catalogo tramite id, o un file glTF a url con il suo credit; un url relativo si legge dal file che lo indica, non dalla pagina. Stirato a sizeM in ogni caso headingOffsetDeg e credit ({ title, author, license, sourceUrl }) sono quelli del modello di un oggetto dello scenario. |
track | Dove si trova e che aspetto ha a ogni t. Una posizione si esprime o nel mondo (eastM/northM da dove si trovava l'osservatore all'inizio, come lo scenario, con onGround o altitudeAboveGroundM) o dall'osservatore in quell'istante (azimuthDeg, altitudeDeg, distanceM). Un corpo onGround poggia sul rilievo; una direzione senza distanza incontra allora il suolo dove lo incontra quella linea. sizeM, attitude (headingDeg, pitchDeg, rollDeg) e appearance (color, albedo, luminanceCdM2, transparency da 0 a 1, haloScale come multiplo dell'abbagliamento della sua luce propria) valgono finché un fotogramma chiave successivo non li indica di nuovo, e si mescolano tra due fotogrammi chiave. present: false toglie il corpo dalla scena a partire da quel fotogramma chiave, e present: true lo riporta. Una flame (lengthM, widthM, color all'ugello, tipColor, luminanceCdM2) si accende al fotogramma chiave che la indica, esce dal nodo del modello chiamato exhaust (o da quello che nomina il suo node), illumina ciò che la circonda, solleva polvere dove tocca il suolo quando raisesDust lo dice, e si spegne con una luminanceCdM2 pari a 0 |
motions | In un fotogramma chiave: a che punto è ciascuno dei movimenti propri del suo modello, con il nome del movimento — le animazioni del file glTF. 0 è l'inizio di un movimento, 1 la sua fine, e uno che si ripete prosegue oltre 1: { "legs-turn": 7 } sono sette giri. Il modello dice che cosa si muove e come; la traccia dice quando. Ogni movimento si interpola fra i fotogrammi chiave che lo indicano, qualunque altro fotogramma chiave sposti il corpo nel frattempo, si mantiene dopo l'ultimo e vale 0 prima del primo. La partenza di Valensole si scrive così: { "t": 246000, "motions": { "pivot-retract": 0 } }, { "t": 248000, "motions": { "pivot-retract": 1, "legs-turn": 0 } }, … { "t": 262000, "motions": { "legs-turn": 7 } } |
lights | In un fotogramma chiave: la luminanza, in cd/m², di ciascuna delle luci proprie del suo modello, con il nome del materiale della luce nel file glTF — così che uno stesso corpo porti luci che fanno ciascuna la propria cosa, una bianca fissa a ogni estremità e una rossa che lampeggia fra le due. Il modello dice dove si trova ogni luce, quanto è grande e di che colore; la traccia dice quanto brilla e quando. Ogni luce si interpola fra i fotogrammi chiave che la nominano e si mantiene dopo l'ultimo, quindi un'accensione o uno spegnimento sono due fotogrammi chiave a un millisecondo di distanza; una luce che nessun fotogramma chiave nomina brilla con la sua parte di appearance.luminanceCdM2. Una luce troppo piccola per vedersi si vede dal suo abbagliamento, e ciò che si trova fra essa e l'occhio — lo scafo del corpo stesso, un ponte — la nasconde. La luce rossa di Silly-le-Long: { "t": 499, "lights": { "front-red": 1500 } }, { "t": 500, "lights": { "front-red": 0 } } |
outlineNode | Il nodo del modello che è ciò che l'osservatore ha disegnato ("hull" per un velivolo le cui zampe non sono nel disegno): ciò su cui si misura il suo contorno |
smoke | Sull'interpretazione stessa: ciò che fa bruciare al suolo, come { eastM, northM, fromT, untilT? }, visto dal suo fumo portato via dal vento della registrazione halfLifeS dice quanto in fretta si spegne, in secondi per perdere metà del suo spessore (20 per default): un fuoco di sterpaglia divampa e poi cova. Non si ferma mai del tutto prima di untilT. |
reentries | Sull'interpretazione stessa: i rientri atmosferici che afferma siano stati visti, un satellite o uno stadio di razzo che si disintegra in pezzi che bruciano. Non sono corpi: un rientro brucia tra 70 e 100 km di quota e si vede a centinaia di chilometri, quindi è collocato sulla Terra e visto attraverso la sua curvatura dal punto in cui stava l'osservatore. La sua track dà il punto di testa in istanti della registrazione, { t, lat, lng, altitudeKm }, uniti da cerchi massimi; ciascuno dei suoi fragments segue lo stesso percorso lagS secondi dietro, si vede da fromT finché si spegne a untilT, brilla della sua absoluteMagnitude (a 100 km, come per un bolide) riportata alla distanza reale, nel suo color, con una scia degli ultimi trainS secondi del percorso. La sua luce è propria: si vede che il Sole la raggiunga o no. object nomina ciò che è ricaduto (name, cosparId, norad). Nulla è propagato da elementi orbitali, sbagliati di minuti nell'ultima orbita: il percorso è ciò che le fonti stabiliscono, con la sua provenienza |
launches | Sull'interpretazione stessa: i lanci di razzo il cui scarico afferma sia stato visto, illuminato da un Sole tramontato per il suolo ma non per la scia, la «medusa spaziale». Collocati sulla Terra come un rientro: la loro track dà lo stadio in istanti della registrazione, { t, lat, lng, altitudeKm } (può cominciare prima della registrazione), e burnFromT e burnUntilT i secondi in cui il motore ha bruciato. La scia è una fila di sbuffi lasciati lungo quel percorso, ciascuno che si allarga con l'età; ciò che si vede di ciascuno è la luce del Sole che diffonde verso l'osservatore. L'ombra della Terra (dove il Sole illumina o no all'altezza dello sbuffo, e quanta aria ha sfiorato la sua luce, che la arrossa o la rende blu), l'angolo di diffusione e l'espansione sono calcolati dal vero Sole alla vera data: nulla ne è dichiarato. Un plume facoltativo sostituisce i valori predefiniti: exhaustKgPerS (273, un Merlin Vacuum), condensedShare (0,1, l'unico numero che nessuno ha misurato), particleRadiusUm, expansionKmPerS, initialRadiusKm, lifetimeS, e per il collare (lo scarico appena rilasciato, largo e presto sparito, accanto alla scia stretta che resta) collarShare (0,85), collarExpansionKmPerS (2,5), collarLifetimeS (20). vehicle nomina ciò che ha volato e, in engine, il motore di cui è lo scarico: thrustKN e specificImpulseS (da cui si ricavano la portata dello scarico e la sua velocità, quindi la larghezza del collare) e propellant (rp1-lox, methane-lox, hydrogen-lox, hypergolic o solid, che dice quanta parte diventa particelle e di che dimensione). Ciò che dice plume prevale su ciò che dice il motore. La scia ha bisogno della data della registrazione: senza non c'è Sole che la illumini vehicle.mission nomina la missione che compiva ("Starlink Group 10-49"). |
Un'altra lettura: un'interpretazione è un'altra osservazione#
La lettura che un altro fa di un resoconto (quella di un analista, di un investigatore, un confronto fatto per
metterla alla prova) non fa parte del resoconto: è un'altra osservazione, quella che c'è stata come la sostiene il
suo autore. Perciò è elencata nel caso come l'originale, come evento di tipo sighting, contrassegnato
come lettura da interpretationOf, e ha una registrazione propria a url:
{
"id": "McMinnville1950",
"events": [
{ "type": "event", "eventType": "sighting", "id": "trent", "title": "Paul Trent", "url": "observer-mcminnville.json" },
{ "type": "event", "eventType": "sighting",
"interpretationOf": "trent",
"time": "2013-06",
"by": [{ "people": "CousynAntoine" }, { "people": "LouangeFrancois" }],
"title": "A model on a thread under the line",
"url": "interpretation-mcminnville-2.json" }
]
}
| Campo | Significato |
|---|---|
interpretationOf | L'id dell'evento del caso di cui è una lettura ("trent"), o un elenco di id quando una lettura serve più resoconti (le fotografie e un primo piano). Ciò che la distingue da un resoconto: gli eventi senza questo campo sono gli osservatori del caso |
time | Quando l'interpretazione è stata elaborata, come RR0 scrive un tempo ("2013-06"): non quando l'osservazione è avvenuta |
by | Chi la sostiene: { "people": id } o { "org": id }, che designano una voce che vive altrove (su RR0, una directory di persone o di organizzazioni), o una persona descritta nel valore. Assente per un confronto che nessuno sostiene |
title | Come si chiama la lettura nel menu del lettore e nel selettore dell'editor: poche parole, una stringa o una per lingua |
url | La sua registrazione, letta relativamente all'indirizzo del file del caso, come quella di un osservatore |
La registrazione a url è una registrazione come le altre. Condivide il luogo, l'ora e la posa
dell'osservatore del resoconto che legge, così che un corpo collocato dall'osservatore, o in metri da dove si
trovava, significa la stessa cosa in entrambe; non disegna alcuna forma (una timeline vuota); e tiene i
corpi nella propria interpretation, descritta sopra. L'explains di un corpo designa le
forme del resoconto.
{
"version": 1,
"id": "1950-05-11-TrentPaul-interpretation-2",
"time": { "year": 1950, "month": 5, "day": 11, "hour": 19, "minute": 45 },
"utcOffsetHours": -7,
"place": [{ "value": { "lat": 45.104167, "lng": -123.330556 } }],
"observerTrack": { "keyframes": [{ "t": 0, "pose": { "lat": 45.104167, "lng": -123.330556, "headingDeg": 41.3, "pitchDeg": 14.85, "fovDeg": 33.4 } }] },
"tags": ["interpretation"],
"timeline": { "keyframes": [], "order": [], "groups": [] },
"interpretation": {
"title": "A model on a thread under the line",
"bodies": [{
"id": "model",
"explains": ["ufo-1"],
"model": { "id": "disc" },
"track": [
{ "t": 0, "eastM": -52, "northM": 118, "altitudeAboveGroundM": 7.5,
"sizeM": { "widthM": 0.3, "lengthM": 0.3, "heightM": 0.1 } }
]
}]
}
}
Il lettore elenca gli osservatori del caso dagli eventi senza interpretationOf e propone ogni lettura
accanto al resoconto che designa, una alla volta (il pulsante ◌ la misura contro il resoconto). Una registrazione
da sola non ha altra lettura che la propria interpretation. La forma più vecchia, un evento di tipo
interpretation che designa la registrazione in sighting con i corpi in linea o in un file
a url, si legge ancora. L'editor apre un caso: il suo selettore sopra il rendering elenca i resoconti e
le letture, ciascuno aprendosi come la registrazione che è, con un pulsante per aggiungere una lettura (una nuova
registrazione che condivide luogo, ora e posa del resoconto, e un evento per essa), uno per eliminarla, e uno per
esportare il caso e ogni registrazione aggiunta o modificata in uno zip. Provalo con
case-mcminnville.json
(riprodurlo,
modificarlo).
Il meteo, e le sue nuvole#
Un fotogramma chiave weather esprime le condizioni del cielo in un momento dell'orologio
della registrazione; fra due fotogrammi chiave ogni numero viene interpolato, mentre il tipo di precipitazione e il
temporale vengono mantenuti. Contiene:
| Campo | Significato |
|---|---|
cloudLayers | Le nuvole, come elenco di strati — vedi sotto. Se manca, le descrivono i campi più vecchi delle righe vicine, adattati in uno strato d'acqua e un velo di cirri; un elenco vuoto significa un cielo sereno che qualcuno ha guardato |
cloudCover, lowerCloudCover, highCloudCover | Frazioni di cielo (0–1): il totale, solo gli strati d'acqua, e solo il velo ghiacciato. Scritte dalle registrazioni fatte prima che esistessero gli strati, e ancora tenute aggiornate dall'editor come riassunto di questi |
cloudBaseM, cloudDarkness | L'unica base della stessa epoca, in metri sopra il suolo di riferimento, e un'unica tonalità (0 bianco, 1 molto scuro) |
iceCrystalAlignment | 0–1, con quanta regolarità cadevano i cristalli di ghiaccio — ciò che trasforma un semplice anello in pareli, archi e una colonna. Nessun dato lo misura; uno strato di cirri porta il proprio |
relativeHumidity | 0–1, vicino al suolo. Decide quanto è lattiginoso il cielo sereno: la foschia si gonfia d'acqua man mano che l'aria si avvicina alla saturazione. Un dato consultato la contiene (dalla temperatura e dal punto di rugiada di ERA5); se manca, una foschia tipica |
precipitationType, precipitationIntensity | none/rain/snow/hail, e 0–1. Indicata a un fotogramma chiave, riprodotta come cade: un rovescio inizia al fotogramma chiave che lo avvia con le sue prime gocce, e non raggiunge l'intensità indicata più in fretta di una pioggia reale (da niente al massimo in venti secondi); smette allo stesso modo. Un cambiamento che i fotogrammi chiave distribuiscono su un tempo più lungo viene seguito esattamente precipitationAmount (0–1, assente significa tutta) dice quanta parte di quella precipitazione sta già cadendo. |
windDirectionDeg, windSpeed | Il vento generale: la direzione VERSO cui soffia, in senso orario dal nord, e metri al secondo. È ciò che trasporta le nuvole — dall'istante zero, così che cercare e riprodurre di nuovo diano lo stesso cielo |
storm | Fulmini e tuoni, con il giusto ritardo |
Ogni strato di cloudLayers è una coltre di nuvole a un'altezza
reale, e resta sé stesso da un fotogramma chiave al successivo:
| Campo | Significato |
|---|---|
id | Stabile fra i fotogrammi chiave — gli strati vengono abbinati tramite esso, mai per posizione nell'elenco. Uno strato presente in un fotogramma chiave e assente dal successivo svanisce; riordinarli non cambia nulla |
type | cumulus, stratus, stratocumulus, cirrus o unknown. Decide la forma delle sommità e quanto è sottile il velo; un cirro è anche quello che rifrange gli aloni. Cambia al fotogramma chiave, non viene interpolato |
baseM, thicknessM | Metri. La base è sopra il suolo di RIFERIMENTO della registrazione, non sopra un osservatore che sale; un osservatore sopra la base è dentro la coltre o al di sopra, e il cielo viene disegnato di conseguenza |
coverage | 0–1, e significa ciò che dice: la frazione di cielo che questo strato copre, qualunque sia la dimensione delle sue nuvole |
sizeM | La larghezza caratteristica di una nuvola, in metri. Indipendente dalla copertura: la stessa frazione di cielo può essere molte nuvole piccole o poche grandi |
density | 0–2, quanto è opaca la materia della nuvola; 0 è trasparente. Anch'essa indipendente dalla copertura |
darkness | Da 0 bianco a 1 molto scuro. Se manca, il cloudDarkness del fotogramma chiave |
seed | Quale motivo, fra gli infiniti che gli stessi numeri possono disegnare. Se manca, uno ricavato dall'id, ed è per questo che l'id non deve cambiare |
windDirectionDeg, windSpeed | Il vento proprio di questo strato, quando differisce da quello generale — di solito è il caso dello strato alto. Se manca, il vento generale |
iceCrystalAlignment | Solo per un cirro |
instances | Nuvole singole all'interno di questo strato — vedi sotto |
Una nuvola singola in instances è una nuvola del suo strato che il
file colloca con esattezza, perché il resoconto lo ha fatto: quella dietro cui è passato il fenomeno, quella che
era lì e da nessun'altra parte. Viene disegnata come una delle altre del suo strato — la stessa texture, la stessa
soglia —, distinta dalle vicine soltanto da dove si trova e da quanto è grande,
ed è presente anche quando la coverage dello strato è nulla. Segue il vento dello strato
come le altre, e nasconde un fenomeno davanti al quale passa.
| Campo | Significato |
|---|---|
id | Stabile fra i fotogrammi chiave, stessa regola di uno strato |
eastM, northM | Dove si trovava il suo centro all'istante zero, in metri dal punto di partenza dell'osservatore. Il vento la trasporta da lì |
baseM, thicknessM | La sua base e la sua altezza, in metri — una nuvola può stare più in basso o elevarsi più della sua coltre |
widthM, depthM, rotationDeg | La sua impronta, in metri, e la direzione verso cui quell'impronta è ruotata |
density, darkness | Le proprie; se manca l'oscurità, quella dello strato |
{
"weather": {
"cloudLayers": [
{
"id": "low", "type": "cumulus",
"baseM": 1500, "thicknessM": 800,
"coverage": 0.55, "sizeM": 1400, "density": 1, "darkness": 0.15,
"instances": [
{ "id": "the-one", "eastM": 0, "northM": 4200,
"baseM": 1500, "thicknessM": 800,
"widthM": 1900, "depthM": 1300, "rotationDeg": 12, "density": 1 }
]
},
{ "id": "high", "type": "cirrus", "baseM": 8000, "thicknessM": 400,
"coverage": 0.2, "sizeM": 2200, "density": 0.35, "iceCrystalAlignment": 0.65 }
],
"precipitationType": "none", "precipitationIntensity": 0,
"windDirectionDeg": 90, "windSpeed": 5, "storm": false
}
}
Una registrazione il cui meteo è stato consultato (ha un weatherSource)
contiene la risposta del dato, non un link a esso: ERA5 fornisce le fasce bassa, media e alta come tre
strati chiamati record-low, record-mid e record-high, la
base bassa stimata dallo scarto fra temperatura e punto di rugiada, le altre due a 3 500 m
e 8 000 m. Il loro tipo è unknown (cirro per quello alto), la loro dimensione e la loro
densità sono ipotesi di disegno: una rianalisi sa quanta parte di ogni fascia era coperta, non che aspetto
avessero le nuvole. Richiedi il dato dall'editor e gli strati vengono riscritti; modifica
uno strato a mano e la registrazione diventa dell'autore, con la fonte rimossa.
Da dove viene ogni valore#
Qualsiasi valore di una registrazione può essere scritto così com'è, o avvolto con la sua provenienza:
{
"durationSeconds": {
"value": 15,
"basis": "derived",
"rationale": "Da 13 a 18 s nella sintesi dell'inquirente; preso il valore medio"
}
}
basis è stated (l'ha detto l'osservatore, ed è ciò che significa un valore
semplice), derived (ricavato da ciò che ha detto più qualcosa di verificabile: la larghezza di una
strada, una mappa, un disegno misurato; rationale dà il ragionamento) o
assumed (scelto perché la ricostruzione abbia comunque un valore, senza basarsi su nulla di ciò che
l'osservatore ha detto). L'elenco dei valori assumed è l'elenco di ciò per cui tornare dall'osservatore
o al fascicolo, ed è per questo che vale la pena scriverlo anche quando non si scrive nient'altro.
Verificare un file#
Il formato è pubblicato anche come JSON Schema, generato dagli stessi tipi del lettore: ogni chiave che conosce, ciò che ciascuna può contenere, e le parole che accetta un elenco chiuso. Una chiave scritta male o un valore sconosciuto non lo superano. Non dice nulla di ciò che si può omettere, che è una questione di senso a cui risponde questa pagina. Per vedere il risultato, apri il file nel lettore, da un link, o dal tuo disco con le immagini e i modelli che nomina. Il lettore lo verifica allo stesso modo al caricamento, e indica dietro un ⚠ sull'immagine ciò che non ha potuto riprodurre così come è scritto: una chiave che nulla legge, una parola fuori dal suo elenco, e ciò che ha dovuto inventare perché il primo fotogramma chiave di una forma lo ometteva (un campo mantenuto dal fotogramma chiave precedente è la regola di cui sopra, non un problema).
Un file completo#
La registrazione più piccola che esprima ancora qualcosa — un ovale silenzioso che attraversa il cielo in dodici secondi, in una data reale e in un luogo reale. Tutto il resto del formato è facoltativo, e tutto ciò che segue ha una funzione:
{
"version": 1,
"description": "The smallest recording that still states something: one silent orange oval, a degree and a half wide, crossing the south-western sky from left to right over twelve seconds.",
"time": { "year": 2024, "month": 8, "day": 12, "hour": 22, "minute": 30 },
"durationSeconds": 12,
"utcOffsetHours": 2,
"place": [{ "lat": 45.19, "lng": 5.72, "name": "Grenoble, Isère, France" }],
"timeline": {
"keyframes": [
{
"t": 0,
"shapes": [
{
"sourceId": "ufo-1",
"shape": {
"kind": "oval",
"bounds": { "x": 150, "y": 150, "width": 10, "height": 3 },
"angular": { "widthDeg": 1.6, "heightDeg": 0.5 },
"color": "#ff8c1a",
"angle": 0,
"transparency": 0,
"haloScale": 1.2,
"selected": false
}
}
]
},
{
"t": 12000,
"shapes": [
{
"sourceId": "ufo-1",
"shape": {
"kind": "oval",
"bounds": { "x": 480, "y": 130, "width": 10, "height": 3 },
"angular": { "widthDeg": 1.6, "heightDeg": 0.5 },
"color": "#ff8c1a",
"angle": 0,
"transparency": 0,
"haloScale": 1.2,
"selected": false
}
}
]
}
]
},
"observerTrack": {
"keyframes": [
{
"t": 0,
"pose": { "lat": 45.19, "lng": 5.72, "elevationM": 0, "headingDeg": 215, "pitchDeg": 20, "fovDeg": 60 }
}
]
},
"soundTrack": { "keyframes": [{ "t": 0, "sound": { "kind": "none", "volume": 0, "pitchHz": 100 } }] }
}
Per modificarlo e vederlo riprodotto, incollalo nell'editor, che completa ogni chiave del formato, propone le parole che ciascuna accetta, e dice ciò che il modello ne dice.
È /demo-data/example-minimal.json
su questo sito, quindi puoi scaricarlo, e
riprodurlo prima di cambiare
qualsiasi cosa. Nota che compaiono sia angular sia bounds: l'angolo è ciò che
il file SIGNIFICA, e i pixel ne vengono ricavati di nuovo al caricamento — scrivi l'angolo, e lascia
che una stima errata dei pixel venga corretta per te.
Altri più grandi da leggere#
Ogni demo di questo sito è un semplice file che puoi aprire. Questi quattro sono quelli che vale la pena leggere per vedere come è costruita una registrazione reale:
| File | Che cosa guardarci |
|---|---|
observer-chiles.json | Un caso reale: un osservatore, un id di caso condiviso con una seconda registrazione, dieci fotogrammi chiave, un weatherTrack consultato con il suo weatherSource |
sky-test-halos.json | Nessun fenomeno — un cielo preparato da un weatherTrack i cui fotogrammi chiave cambiano l'allineamento dei cristalli, la copertura di cirri e una coltre di cumuli, osservato attraverso un observerTrack che percorre lo spettacolo e poi si ferma |
sky-test-clouds.json | Tre strati di nuvole con altitudine, spessore, dimensione, densità e vento in metri, che evolvono sulla linea temporale del meteo — e nel primo una voce instances: una nuvola del campo, collocata e dimensionata in metri, che cresce e si scurisce nel corso dei due minuti |
sky-test-aircraft.json | Un instrument, un exposureSeconds e un iso, e un aeromobile di decor con una track e nove lights alle loro cadenze di lampeggio reali, fari di atterraggio compresi |
sky-test-reentry.json | Nessun fenomeno: una interpretation senza corpi e con una reentries, il lanciatore di Zond 4 che si disintegra sopra il Kentucky nel 1968, il percorso derivato e orario, quote e luminosità supposti, ogni valore con la sua provenienza |
sky-test-launch-plume.json | Nessun fenomeno: una interpretation senza corpi e con una launches, lo scarico di Starlink Gruppo 10-49 (Falcon 9, 25 agosto 2026, 05:33 EDT) illuminato nel crepuscolo e visto da Hoboken (New Jersey), il percorso dello stadio supposto con la sua provenienza e l'ombra, l'espansione e la luce calcolate |
instrument-instamatic.json | Lo stesso avvistamento di observer-socorro.json, cambiato in un solo campo. Confronta i due |
Quattro regole che decidono che cosa significa un file#
- I campi discreti vengono mantenuti, quelli continui interpolati. Una forma omessa in
un fotogramma chiave successivo resta com'era, e così qualsiasi campo che un fotogramma chiave omette in una forma
che invece indica di nuovo: un fotogramma chiave che dà solo un nuovo
aimsposta la forma e mantiene tutto il resto (indicare di nuovoboundssenzaaimnéangularviene inteso come spostarla tramite i suoi pixel); una il cui primo fotogramma chiave è a cinque secondi è già dipinta, in quello stato, da zero. Per fare in modo che qualcosa smetta di essere visibile, dagli un fotogramma chiave contransparency: 1. - Solo angoli. Nessuna dimensione reale e nessuna distanza reale sono memorizzate da nessuna parte. I metri
vengono ricavati, come disuguaglianze, da ciò dietro o davanti a cui si è detto che il fenomeno passava
(
decor[].occludesSourceIds). - Il dichiarato prevale sul dedotto.
occludesSourceIdsregistra affermazioni dell'osservatore. Niente in questo formato può dedurle: descrive un aspetto in un campo visivo, non una posizione nello spazio. - Assente non è zero. Nessuna traccia sonora significa che nessuno l'ha chiesto;
kind: "none"significa che l'osservatore ha riferito di non aver sentito nulla. La stessa distinzione attraversa il meteo e la nube di ghiaccio.
Questa pagina è il riferimento del formato. Il ragionamento dietro ogni campo si trova nei commenti di documentazione del suo tipo, con cui si completano gli estratti qui sopra, e nel codice sorgente.