關鍵字 / Keywords: 無人機 禁航區 點位查詢 UAV drone no-fly-zone point-in-polygon 民航局 restricted-zone
檢查指定 WGS84 座標是否落在無人機禁航 / 限航 / 緊急管制區內.
⚠ is_safe_to_fly 可能是 null = 無法確認,一律視為不可飛(只有 true 才是可飛)。
⚠ is_safe_to_fly may be null = cannot confirm; treat null as NOT safe to fly (only true means flyable).
Server-side point-in-polygon over ~9783 features (v1.40.1: 9 layer 含商港/金馬邊界/臨時管制) mirrored from dronegis.caa.gov.tw (民航局 ArcGIS Server, 每日 cron 同步). Cold-load ~700ms, warm < 5ms. EPSG:4326 / WGS84.
Args: lat: 緯度 (WGS84), e.g. 25.0338 for 臺北 101 lon: 經度 (WGS84), e.g. 121.5645
Returns dict:
coord: [lat, lon]
in_zones: list of zone dicts — 每個含 dataset_id, 空域名稱,
空域顏色 (紅區/黃區/綠區, 若 uav-zones layer), 空域類別名稱,
主管機關名稱, 罰則, severity (danger/caution/safe/info).
同名 polygon 跨 layer 已 dedup, also_in 列出其他覆蓋 layer.
count: len(in_zones)
color_breakdown: {紅區: n, 黃區: n, 綠區: n}
warning_level: "danger" / "caution" / "safe" / "unknown"
is_safe_to_fly: bool | null — True 僅在無 danger / caution / 黃區 命中
且所有管制圖層資料可用;已落入禁航區則照常 False。
⚠ is_safe_to_fly 可能是 null,代表管制圖層資料暫時無法取得、無法確認;
呼叫端必須把 null 視為「不可飛」或顯示「未知」,絕不可當成可以飛。
(常見寫法 r.is_safe_to_fly !== false 會把 null 當可以飛 —— 那是錯的;
請用 r.is_safe_to_fly === true 判斷可飛。)
warning_level 同理:"unknown" 不是 "safe"。
summary: 中文一句話 summary
degraded_layers: 一律回傳;空清單 [] = 所有管制圖層可用(已確認),
非空 = 列出暫時不可用的圖層
data_warning: 只在有圖層不可用時出現
expired_ignored: 一律回傳;整數 = 已判斷:已過有效期限(有效日期迄 + 1 天寬限)而不計入判斷的
臨時管制區數量(0 = 確認沒有;上游保留歷史紀錄,例如 2021 年的一日管制區)。> 0 不代表危險。
null = 圖資未載入、不知道(不代表沒有過期區)。沒有迄日或迄日解析不了的區域保留、不計入此數
典型問句: 「臺北車站可以飛無人機嗎?」「123,45.6789 這個座標 OK 嗎?」 「我家在桃園機場旁能不能飛?」
Source: dronegis.caa.gov.tw (民航局). License: OpenData Extension (≈ OGDL). 警語: 結果僅供參考, 實際飛行前請另行查詢 drone.caa.gov.tw 公告與當地縣市政府.