getAirportFlights
Query all flights within 30km of a specified airport using airport codes like PEK, PVG, or CAN to monitor departures and arrivals in real-time.
Instructions
机场周边航班查询 - 查询指定机场周边30公里范围内的所有航班。支持主要机场代码如PEK、PVG、CAN等
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| airport_code | Yes | ||
| flight_type | No | departure |
Implementation Reference
- flight_ticket_mcp_server/main.py:267-271 (handler)The primary MCP tool handler for 'getAirportFlights', decorated with @mcp.tool() for registration and execution. Logs the call and delegates to the helper in simple_opensky_tools.@mcp.tool() def getAirportFlights(airport_code: str, flight_type: str = "departure"): """机场周边航班查询 - 查询指定机场周边30公里范围内的所有航班。支持主要机场代码如PEK、PVG、CAN等""" logger.debug(f"调用机场周边航班查询工具: airport_code={airport_code}, flight_type={flight_type}") return simple_opensky_tools.getAirportFlights(airport_code, flight_type)
- Helper wrapper function that invokes the tracker instance's method for airport flights.def getAirportFlights(airport_code: str, flight_type: str = "departure") -> Dict[str, Any]: """ 查询机场周边的航班信息 Args: airport_code: 机场代码 (如: "PEK", "PVG", "CAN") flight_type: 航班类型(此参数仅为兼容性,OpenSky返回所有航班) Returns: 包含机场周边航班列表的字典 """ return simple_tracker.get_airport_area_flights(airport_code)
- Core implementation logic: Maps airport code to coordinates, defines 30km bounding box, queries OpenSky API via get_all_states, and formats response with airport details.def get_airport_area_flights(self, airport_code: str) -> Dict[str, Any]: """获取机场区域的航班""" # 中国主要机场坐标(数据来源:中国开放数据平台等) airport_coords = { "PEK": (40.0801, 116.5844), # 北京首都国际机场 "PKX": (39.5098, 116.4107), # 北京大兴国际机场 "PVG": (31.1434, 121.8052), # 上海浦东国际机场 "SHA": (31.1979, 121.3364), # 上海虹桥国际机场 "CAN": (23.3925, 113.2989), # 广州白云国际机场 "SZX": (22.6393, 113.8107), # 深圳宝安国际机场 "CKG": (29.7194, 106.6419), # 重庆江北国际机场 "TSN": (39.1244, 117.3469), # 天津滨海国际机场 "CTU": (30.5786, 103.9472), # 成都双流国际机场 "TFU": (30.3114, 104.4419), # 成都天府国际机场 "KMG": (25.1019, 102.9292), # 昆明长水国际机场 "XIY": (34.4471, 108.7519), # 西安咸阳国际机场 "HGH": (30.2295, 120.4344), # 杭州萧山国际机场 "NKG": (31.7420, 118.8620), # 南京禄口国际机场 "WUH": (30.7838, 114.2081), # 武汉天河国际机场 "CSX": (28.1892, 113.2196), # 长沙黄花国际机场 "TAO": (36.2661, 120.3744), # 青岛流亭国际机场 "XMN": (24.5440, 118.1277), # 厦门高崎国际机场 "FOC": (25.9351, 119.6633), # 福州长乐国际机场 "NNG": (22.6083, 108.1722), # 南宁吴圩国际机场 "KWE": (26.5385, 106.8007), # 贵阳龙洞堡国际机场 "SJW": (38.2806, 114.6963), # 石家庄正定国际机场 "TYN": (37.7469, 112.6286), # 太原武宿国际机场 "HET": (40.8514, 111.8244), # 呼和浩特白塔国际机场 "SHE": (41.6398, 123.4836), # 沈阳桃仙国际机场 "CGQ": (43.9961, 125.6850), # 长春龙嘉国际机场 "HRB": (45.6234, 126.2507), # 哈尔滨太平国际机场 "NKQ": (25.6675, 100.2769), # 南昌昌北国际机场(新增) "LHW": (34.7414, 113.8406), # 兰州中川国际机场 "INC": (38.8531, 106.0094), # 银川河东国际机场 "XNN": (36.5275, 102.0430), # 西宁曹家堡机场 "URC": (43.9071, 87.4744), # 乌鲁木齐地窝堡国际机场 "SYX": (18.3027, 109.4122), # 三亚凤凰国际机场 "HAK": (19.9349, 110.4590), # 海口美兰国际机场 "DLC": (38.9656, 121.5386), # 大连周水子国际机场 "YNT": (37.4017, 121.3717), # 烟台蓬莱国际机场 "WEH": (37.1871, 122.2286), # 威海大水泊国际机场 "JZH": (35.0286, 118.6414), # 济南遥墙国际机场 "LYG": (34.5714, 119.1286), # 连云港白塔埠机场 "YTY": (32.5631, 119.7197), # 扬州泰州国际机场 "WUX": (31.4944, 120.4292), # 无锡硕放国际机场 "NTG": (32.0708, 120.9764), # 南通兴东国际机场 "HFE": (31.7800, 117.2981), # 合肥新桥国际机场 "WNZ": (27.9122, 120.8522), # 温州龙湾国际机场 "NGB": (29.8267, 121.4619), # 宁波栎社国际机场 "YIW": (29.3447, 120.0322), # 义乌机场 "BHY": (49.2050, 119.8250), # 北海福成机场 "LZH": (24.2075, 109.3917), # 柳州白莲机场 "GXG": (24.7953, 110.0381), # 桂林两江国际机场 "ZUH": (22.0064, 113.3758), # 珠海金湾机场 "MXZ": (24.2783, 116.1222), # 梅县机场 "SWA": (23.5619, 116.5086), # 汕头外砂机场 "JYG": (24.1436, 116.6664), # 揭阳潮汕机场 "ZHA": (21.2144, 110.3583), # 湛江机场 "BAV": (23.7208, 106.9592), # 百色巴马机场 } if airport_code.upper() not in airport_coords: return { "status": "error", "message": f"不支持的机场代码: {airport_code}", "supported_airports": list(airport_coords.keys()) } lat, lon = airport_coords[airport_code.upper()] # 创建机场周边边界框(约30公里范围) delta = 0.25 # 约30公里 bbox = (lat - delta, lat + delta, lon - delta, lon + delta) result = self.get_all_states(bbox) if result.get("status") == "success": result["airport_code"] = airport_code.upper() result["airport_coordinates"] = {"latitude": lat, "longitude": lon} result["search_radius_km"] = 30 result["message"] = f"{airport_code}机场周边找到 {result.get('flight_count', 0)} 架航班" return result