乐于分享
好东西不私藏

国内直飞距离最长航线图-openclaw

国内直飞距离最长航线图-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 = {"HRB": {"name""哈尔滨 (HRB)""lat"45.6234"lon"126.2500},"SYX": {"name""三亚 (SYX)""lat"18.3037"lon"109.4124},"HAK": {"name""海口 (HAK)""lat"19.9349"lon"110.4591},"NNG": {"name""南宁 (NNG)""lat"22.6083"lon"108.1722},"KMG": {"name""昆明 (KMG)""lat"24.9924"lon"102.7431},"ZUH": {"name""珠海 (ZUH)""lat"22.0064"lon"113.3767},"BHY": {"name""北海 (BHY)""lat"21.5392"lon"109.2970},"KWL": {"name""桂林 (KWL)""lat"25.2181"lon"110.0392},"CTU": {"name""成都 (CTU)""lat"30.5728"lon"103.9468},"SZX": {"name""深圳 (SZX)""lat"22.6393"lon"113.8107}}航线列表(起点,终点,距离)routes = [    ("HRB""SYX"3730),    ("HRB""HAK"3620),    ("HRB""NNG"3400),    ("HRB""KMG"3380),    ("HRB""ZUH"3360),    ("HRB""BHY"3350),    ("HRB""KWL"3280),    ("HRB""CTU"3260),    ("HRB""SZX"3250)]删除已存在的文件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, "距离_km""DOUBLE")arcpy.AddField_management(output_path, "排名""SHORT")print("要素类已创建,开始绘制航线...")使用插入游标添加要素with arcpy.da.InsertCursor(output_path, ["SHAPE@""起点""终点""距离_km""排名"]) as cursor:for rank, (start_code, end_code, distance) in enumerate(routes, 1):        start = airports[start_code]        end = airports[end_code]创建测地线(大圆航线)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)沿测地线加密点(每 200 公里一个点,使曲线更平滑)num_points = int(distance / 200) + 2densified_line = polyline.densify("GEODESIC", num_points)插入记录cursor.insertRow([            densified_line,            start["name"],            end["name"],            distance,            rank        ])        print(f"  [{rank}已绘制:{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 rank, (start_code, end_code, distance) in enumerate(routes, 1):    start = airports[start_code]    end = airports[end_code]    print(f"  {rank}{start['name']} → {end['name']} | {distance:,} km")