乐于分享
好东西不私藏

世界上距离最长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")