乐于分享
好东西不私藏

世界上距离最长10个航线-Openclaw生成

世界上距离最长10个航线-Openclaw生成
import arcpyimport os# 设置工作空间desktop = os.path.join(os.path.expanduser("~"), "Desktop")gis_folder = os.path.join(desktop, "GIS")os.makedirs(gis_folder, exist_ok=True)arcpy.env.workspace = gis_folderarcpy.env.overwriteOutput = True# 输出路径output_path = os.path.join(gis_folder, "航线.shp")# 机场坐标(纬度,经度)airports = {"JFK": {"name": "纽约 (JFK)", "lat": 40.6413, "lon": -73.7781},"EWR": {"name": "纽约 (EWR)", "lat": 40.6895, "lon": -74.1745},"SIN": {"name": "新加坡 (SIN)", "lat": 1.3644, "lon": 103.9915},"AKL": {"name": "奥克兰 (AKL)", "lat": -37.0082, "lon": 174.7850},"DOH": {"name": "多哈 (DOH)", "lat": 25.2609, "lon": 51.6138},"PER": {"name": "珀斯 (PER)", "lat": -31.9403, "lon": 115.9672},"LHR": {"name": "伦敦 (LHR)", "lat": 51.4700, "lon": -0.4543},"DFW": {"name": "达拉斯 (DFW)", "lat": 32.8998, "lon": -97.0403},"MEL": {"name": "墨尔本 (MEL)", "lat": -37.6690, "lon": 144.8410},"DXB": {"name": "迪拜 (DXB)", "lat": 25.2532, "lon": 55.3657},"LAX": {"name": "洛杉矶 (LAX)", "lat": 33.9416, "lon": -118.4085},"IAH": {"name": "休斯顿 (IAH)", "lat": 29.9902, "lon": -95.3368},"SYD": {"name": "悉尼 (SYD)", "lat": -33.9399, "lon": 151.1753},"HKG": {"name": "香港 (HKG)", "lat": 22.3080, "lon": 113.9185}}# 航线列表(起点,终点,航空公司,航班号,距离)routes = [    ("JFK", "SIN", "新加坡航空", "SQ23/SQ24", 15349),    ("SIN", "EWR", "新加坡航空", "SQ21/SQ22", 15344),    ("AKL", "DOH", "卡塔尔航空", "QR921/QR920", 14535),    ("PER", "LHR", "澳航", "QF9/QF10", 14499),    ("DFW", "MEL", "澳航", "QF22/QF21", 14472),    ("AKL", "DXB", "阿联酋航空", "EK449/EK448", 14200),    ("LAX", "SIN", "新加坡航空", "SQ37/SQ38", 14114),    ("IAH", "SYD", "联合航空", "UA101/UA100", 13834),    ("DFW", "SYD", "澳航", "QF8/QF7", 13804),    ("JFK", "HKG", "国泰航空", "CX843/CX844", 13000)]# 删除已存在的文件if arcpy.Exists(output_path):    arcpy.Delete_management(output_path)    print("已删除旧文件")# 创建线要素类arcpy.CreateFeatureclass_management(    out_path=gis_folder,    out_name="航线.shp",    geometry_type="POLYLINE",    spatial_reference=arcpy.SpatialReference(4326)  # WGS84)# 添加字段arcpy.AddField_management(output_path, "起点", "TEXT", field_length=50)arcpy.AddField_management(output_path, "终点", "TEXT", field_length=50)arcpy.AddField_management(output_path, "航空公司", "TEXT", field_length=50)arcpy.AddField_management(output_path, "航班号", "TEXT", field_length=50)arcpy.AddField_management(output_path, "距离_km", "DOUBLE")print("要素类已创建,开始绘制航线...")# 使用插入游标添加要素with arcpy.da.InsertCursor(output_path, ["SHAPE@", "起点", "终点", "航空公司", "航班号", "距离_km"]) as cursor:for start_code, end_code, airline, flight_num, distance in routes:        start = airports[start_code]        end = airports[end_code]# 创建测地线(大圆航线)# 使用 densify 方法沿大圆路径加密点array = arcpy.Array([            arcpy.Point(start["lon"], start["lat"]),            arcpy.Point(end["lon"], end["lat"])        ])# 创建测地线(考虑地球曲率)polyline = arcpy.Polyline(            array,             arcpy.SpatialReference(4326),            has_z=False,            has_m=False)# 沿测地线加密点(每 500 公里一个点,使曲线更平滑)# 使用 geodesic 方法生成大圆路径num_points = int(distance / 500) + 2densified_line = polyline.densify("GEODESIC", num_points)# 插入记录cursor.insertRow([            densified_line,            start["name"],            end["name"],            airline,            flight_num,            distance        ])        print(f"  已绘制:{start['name']} → {end['name']} ({distance} km)")# 统计结果result_count = int(arcpy.GetCount_management(output_path)[0])print(f"\n[OK] 文件已生成:{output_path}")print(f"[OK] 航线数量:{result_count} 条")print(f"[OK] 坐标系统:EPSG:4326 (WGS84)")print(f"[OK] 字段:起点,终点,航空公司,航班号,距离_km")print(f"\n航线列表:")for i, (start_code, end_code, airline, flight_num, distance) in enumerate(routes, 1):    start = airports[start_code]    end = airports[end_code]    print(f"  {i}. {start['name']} → {end['name']} | {airline} {flight_num} | {distance:,} km")

相关学习资料