⚡ Quick Start
curl -X GET "https://zonecheckv2-32dg4v266a-uc.a.run.app/zoneCheckV2?lat=41.9361&lon=12.4312" \
-H "x-api-key: YOUR_API_KEY"
{
"status": "NO_FLY",
"maxAltitude": 0
}
🧠 OVERVIEW (introduzione API)
Drone Sky Check API permette di analizzare lo spazio aereo per operazioni con droni in una specifica posizione geografica.
A differenza di sistemi puramente statici, l’analisi non si basa solo su dati cartografici (ENR), ma integra più livelli informativi:
Spazio aereo ufficiale (ENR / AIP)
NOTAM attivi (restrizioni temporanee)
Logica operativa per interpretazione del rischio
L’obiettivo non è solo fornire dati grezzi, ma restituire una valutazione utilizzabile direttamente in fase operativa, indicando:
se il volo è consentito
a quale quota
eventuali criticità o restrizioni temporanee
Le API non sono deterministiche pure.
Il risultato è una sintesi operativa derivata da più fonti, con priorità diverse:
NOTAM attivi (priorità massima)
Restrizioni ENR
Regole base di volo
Questo significa che:
una zona ENR aperta può diventare NO_FLY per un NOTAM
una zona può risultare “LIMITED” anche se formalmente volabile
📍 zoneCheckV2
Questa è l’API principale per l’analisi di un punto.
Dato un punto geografico, restituisce:
stato del volo (OPEN / LIMITED / NO_FLY)
quota massima consentita
distanza dalla zona sicura più vicina
analisi dettagliata delle restrizioni presenti
🧾 PARAMETRI
lat (number, obbligatorio)
Latitudine del puntolon (number, obbligatorio)
Longitudine del puntobearing (number, opzionale)
Direzione di movimento (gradi).
Usato per stimare l’uscita da una NFZ in modo più realistico.
📦 OUTPUT — SIGNIFICATO CAMPI
status
Indica lo stato operativo del volo:
OPEN → volo consentito fino a 120m
LIMITED → volo consentito con limitazioni (tipicamente quota)
NO_FLY → volo non consentito
maxAltitude
Quota massima consentita in metri.
0 → divieto totale
<120 → limitazione
120 → standard open
currentZone
Informazioni sulla zona principale in cui si trova il punto:
nome zona
tipo (ENR, NOTAM, ecc.)
Serve solo come riferimento, non è l’unica fonte della decisione finale.
nearestOpen
Zona più vicina in cui il volo è consentito.
Include:
distanza
limite di quota
Utile per suggerire dove spostarsi.
distanceToExitMeters
Distanza stimata per uscire da una zona NO_FLY.
valorizzato solo se dentro NFZ
può usare il bearing per essere più realistico
analysis
Spiega perché è stato deciso quello stato.
source
Indica da dove deriva la decisione finale:
BASE → solo ENR
NOTAM → presenza NOTAM determinante
blockers
Motivi che impediscono il volo.
Esempio:
NOTAM attivo
restrizione temporanea
warnings
Condizioni non bloccanti ma rilevanti.
Esempio:
NOTAM “soft”
ENR non attivo al momento
incertezza temporale
zones
Lista di tutte le zone che intersecano il punto.
Per ciascuna zona:
dati base (nome, tipo, limiti)
analisi ENR
analisi NOTAM
Questa parte serve per debug o per UI avanzate.
🧠 LOGICA DI RISOLUZIONE
Il risultato finale non è una semplice lettura di una zona, ma una risoluzione tra più condizioni.
Regole principali:
1. NOTAM HARD attivo → forza NO_FLY
2. NOTAM SOFT attivo → non blocca, ma genera warning
3. ENR inattivo → warning (potenziale non applicabilità)
4. fallback → viene usato lo stato base ENR
👉 In pratica:
NOTAM può sovrascrivere completamente ENR
ENR da solo non è sufficiente per decidere
🆕 Sezione enr.advanced
Questa sezione introduce una valutazione avanzata degli orari ENR, più realistica rispetto alla logica base.
👉 Serve per:
interpretare condizioni complesse (giorni, tramonto, OR)
debug e validazione
future evoluzioni (senza rompere la compatibilità)
————————————————————
🔹advanced.hasAdvanced
"hasAdvanced": true
Significato
Indica se è stata effettuata una valutazione avanzata degli orari ENR.
Valori
true → almeno una schedule è stata interpretata con logica avanzata
false → nessuna interpretazione possibile (fallback base)
Nota
Non indica il risultato, ma solo la disponibilità del parsing avanzato.
————————————————————
🔹 advanced.evaluated[]
Array contenente il dettaglio della valutazione per ogni schedule trovata.
🔸 raw
"raw": "MON-FRI 0700-1800 O/OR 0700-SS+30 ..."
Testo originale degli orari ENR (come da AIP / dump).
🔸 normalized
"normalized": "MON-FRI 0700-1800 O/OR 0700-SS+30 ..."
Versione normalizzata della stringa:
rimozione parentesi
rimozione rumore
uniformata per parsing
👉 utile per debug o logica frontend
🔸 basic
"basic": true
Risultato della logica semplificata (legacy).
Usa solo pattern HHMM-HHMM
Ignora giorni e tramonto
Valori
true → zona attiva (non è possibile volare)
false → non attivo (è possibile volare)
null → non interpretabile
🔸 advanced
"advanced": false
Risultato della valutazione avanzata runtime.
Tiene conto di:
giorno della settimana
orari multipli
condizioni OR (O/OR)
tramonto (SS+offset)
timezone locale (Europe/Rome)
Valori
true → ENR attiva ora (non è possibile volare)
false → ENR non attiva ora (è possibile volare)
null → impossibile determinare
🆕 Valutazione orari ENR
L’API restituisce due diverse interpretazioni degli orari ENR:
basic → valutazione semplificata (retrocompatibile)
advanced → valutazione avanzata (più realistica)
Questi due valori sono indipendenti: l’API non sceglie quale usare, ma fornisce entrambe le informazioni.
È responsabilità del client decidere quale utilizzare.
🔹 basic
Valutazione semplice basata solo su intervalli orari nel formato:
HHMM-HHMM
Caratteristiche
Non considera giorni della settimana
Non considera condizioni come alba/tramonto
Non interpreta logiche complesse (OR, AND, ecc.)
Quando usarlo
Applicazioni semplici
Compatibilità con versioni precedenti
Approccio conservativo lato implementazione
————————————————————
🔹 advanced
Valutazione avanzata degli orari ENR basata su:
giorno della settimana (es. MON-FRI)
condizioni multiple (O/OR)
condizioni astronomiche (SS+offset, tramonto)
timezone locale (Europe/Rome)
Caratteristiche
Più accurato rispetto a basic
Basato su parsing runtime del testo ENR
Può restituire null se non interpretabile
————————————————————
🔹 explanation
Quando si utilizza la modalità advanced è possibile utilizzare anche l'interpretazione "umana" della valutazione oraria
⚠️ Nota importante
Il campo advanced è più preciso ma si basa su parsing automatico di testo non strutturato.
In alcuni casi complessi potrebbe non essere completamente affidabile.
🟢 1. Approccio base (semplice)
if (basic === true) {
// Zona ENR attiva
} else {
// Zona ENR non attiva
}
👉 Pro:
semplice
stabile
👉 Contro:
meno preciso (ignora tramonto, giorni, ecc.)
🟡 2. Approccio avanzato
if (advanced === true) {
// Zona ENR attiva
} else if (advanced === false) {
// Zona ENR non attiva
} else {
// fallback o gestione custom
}
👉 Pro:
più realistico
tiene conto delle condizioni reali
👉 Contro:
può avere edge case non gestiti
🟠 3. Approccio conservativo (consigliato)
if (advanced !== null) {
if (advanced === true) {
// Zona ENR attiva
} else {
// Zona ENR non attiva
}
} else {
// fallback su basic
if (basic === true) {
// Zona ENR attiva
} else {
// Zona ENR non attiva
}
}
👉 Pro:
combina precisione e robustezza
fallback automatico
🧪 Esempi di utilizzo
⭕4. Utilizzo di explanation
"advanced": {
"evaluated": [
{
"raw": "1) FROM 1 SEP TO 30 JUN MON-FRI 0630-2200 (0530-2100); SAT ANNOUNCED BY NOTAM; HOL ESCLUSI/EXCLUDED.",
"normalized": "1) FROM 1 SEP TO 30 JUN MON-FRI 0630-2200",
"basic": true,
"advanced": false,
"explanation": "Zona NON attiva: fuori dalla fascia 06:30–22:00",
"window": {
"start": "06:30",
"end": "22:00"
}
}
],
"hasAdvanced": true
🔹 zoneCheckV2 — ESEMPIO CHIAMATA
📡 HTTP
curl -X GET "https://zonecheckv2-32dg4v266a-uc.a.run.app?lat=41.9361&lon=12.4312" \
-H "x-api-key: YOUR_API_KEY"
🔹 Variante con parametri opzionali
curl -X GET "https://zonecheckv2-32dg4v266a-uc.a.run.app?lat=41.9361&lon=12.4312&bearing=90" \
-H "x-api-key: YOUR_API_KEY"
🔹 zoneCheckV2 — ESEMPIO OUTPUT
❌ Caso: NO_FLY (NOTAM attivo)
{
"position": {
"lat": 41.9361,
"lon": 12.4312
},
"status": "NO_FLY",
"maxAltitude": 0,
"currentZone": {
"name": "NOTAM W0363/26",
"where": "NFZ/NOTAM"
},
"nearestOpen": {
"distanceMeters": 1850,
"zone": {
"name": "Area Open",
"limit": 120
}
},
"distanceToExitMeters": 320,
"analysis": {
"source": "NOTAM",
"blockers": [
{
"zone": "NOTAM W0363/26",
"reason": "ACTIVE_HARD_NOTAM",
"activity": "Drone flight restriction"
}
],
"warnings": []
}
}
🗺️ zones
API per recuperare le zone geografiche in formato GeoJSON.
Serve principalmente per:
visualizzazione su mappa
rendering layer (Leaflet, Mapbox, ecc.)
🧾 PARAMETRI
bbox (obbligatorio)
Bounding box nel formato:minLat,minLon,maxLat,maxLon
simplify (opzionale)
Riduce la complessità delle geometrie per migliorare le performancelimit (opzionale)
Numero massimo di zone restituite
type (opzionale)
Filtro per tipo di zona
restriction (opzionale)
Filtro per tipo di restrizione
📦 OUTPUT
Restituisce un GeoJSON standard:
FeatureCollection
lista di feature con:
geometria
proprietà (nome, tipo, limiti)
Pronto per essere utilizzato direttamente in librerie di mapping.
🔹 zones — ESEMPIO CHIAMATA
📡 HTTP
curl -X GET "https://zones-32dg4v266a-uc.a.run.app/zones?bbox=41.90,12.48,41.95,12.52" \
-H "x-api-key: YOUR_API_KEY"
🔹 zones — ESEMPIO OUTPUT
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"id": "T013104",
"name": "NOTAM W0363/26",
"type": "P_NOTAM",
"restriction": "PROHIBITED",
"lowerLimit": 0,
"upperLimit": 30
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[12.431247577301185,41.9361504799798],
[12.429739454659252,41.93744161942455],
[12.427749251658245,41.93658906519803],
[12.428798388144504,41.93484758517533],
[12.431247577301185,41.9361504799798]
]
]
}
},
⚠️ Disclaimer
Le API Drone Sky Check forniscono un supporto informativo per la valutazione operativa dello spazio aereo, ma non sostituiscono in alcun modo le fonti ufficiali aeronautiche né la responsabilità del pilota.
I dati restituiti derivano da più fonti (ENR, NOTAM, logiche interpretative) e possono essere soggetti a variazioni, aggiornamenti o limitazioni.
È responsabilità dell’operatore:
verificare sempre le condizioni reali e aggiornate
consultare le fonti ufficiali prima di effettuare qualsiasi operazione di volo
operare nel rispetto della normativa vigente
🔐 Accesso alle API
L’accesso alle API è riservato.
Per richiedere una API Key, contattami tramite il form del sito indicando il progetto e l’utilizzo previsto.
🚦 Rate Limit
🔹 Limiti di utilizzo
Le API sono soggette a limitazioni per API Key, applicate su base temporale.
Limiti standard:
40 richieste al minuto per API Key
Limiti specifici per endpoint:
endpoint contenenti lite → 120 richieste/minuto
endpoint contenenti route → 10 richieste/minuto
🔹 Comportamento in caso di superamento
Se il limite viene superato:
le richieste successive possono ricevere risposta:
429 Too Many Requests
l’accesso può essere temporaneamente limitato
🔹 Best practice
Si consiglia di:
evitare polling troppo frequente
utilizzare caching lato client quando possibile
aggiornare i dati a intervalli ragionevoli (es. ogni 5–10 secondi)
🔹 Note
Limiti diversi possono essere applicati in base al tipo di utilizzo o accordi specifici.
Contatti
Per collaborazioni, domande o semplicemente per scambiare idee sul mondo dei droni e della tecnologia, puoi contattarmi qui.
Se vuoi entrare nella nostra community e parlare con altri appassionati, unisciti al gruppo Telegram dedicato.
In alternativa, mi trovi anche su tutti i principali social: rispondo sempre volentieri!
Telegram
© 2025. All rights reserved.

