乐于分享
好东西不私藏

获得每个省的相邻省份,生成Excel-openclaw代码

获得每个省的相邻省份,生成Excel-openclaw代码

import arcpyimport osimport timeimport pandas as pdstart_time = time.time()设置工作空间gdb = r'C:\Users\yl\Documents\ArcGIS\Projects\MyProject4\MyProject4.gdb'fc = os.path.join(gdb, 'T2024_Dissolve')output_excel = r'C:\Users\yl\Desktop\GIS\相邻省份.xlsx'print("=" 50)print("省级行政区相邻关系分析")print("=" 50)检查数据count = int(arcpy.GetCount_management(fc)[0])print(f"要素类: T2024_Dissolve")print(f"要素数{count}")查看所有省份名称print("\n所有省级行政区:")all_provinces = []with arcpy.da.SearchCursor(fc, ['省级']) as cursor:for row in cursor:        print(f"  {row[0]}")        all_provinces.append(row[0])定义正常的省份列表(包含直辖市、自治区、特别行政区)valid_provinces = ['北京市''天津市''河北省''山西省''内蒙古自治区','辽宁省''吉林省''黑龙江省','上海市''江苏省''浙江省''安徽省''福建省''江西省''山东省','河南省''湖北省''湖南省''广东省''广西壮族自治区','海南省''重庆市''四川省''贵州省''云南省''西藏自治区','陕西省''甘肃省''青海省''宁夏回族自治区''新疆维吾尔自治区','香港特别行政区''澳门特别行政区''台湾省']# Polygon Neighborsneighbors_output = "in_memory\\neighbors"if arcpy.Exists(neighbors_output):    arcpy.Delete_management(neighbors_output)print("\n计算相邻关系...")arcpy.PolygonNeighbors_analysis(fc, neighbors_output, '省级')读取结果neighbors_data = []with arcpy.da.SearchCursor(neighbors_output, ['src_省级''nbr_省级''LENGTH']) as cursor:for row in cursor:        neighbors_data.append({'省级行政区': row[0],'相邻省份': row[1],'公共边长度': row[2]        })df_neighbors = pd.DataFrame(neighbors_data)过滤掉非行政区划df_neighbors = df_neighbors[    df_neighbors['省级行政区'].isin(valid_provinces) &    df_neighbors['相邻省份'].isin(valid_provinces)]按省份分组,汇总相邻省份adjacent_dict = {}for _, row in df_neighbors.iterrows():    prov = row['省级行政区']    nbr = row['相邻省份']if prov not in adjacent_dict:        adjacent_dict[prov] = []if nbr not in adjacent_dict[prov]:        adjacent_dict[prov].append(nbr)创建结果DataFrameresult_data = []for prov in sorted(adjacent_dict.keys()):    neighbors = adjacent_dict[prov]    result_data.append({'省级行政区': prov,'相邻省份数': len(neighbors),'相邻省份'''.join(sorted(neighbors))    })df_result = pd.DataFrame(result_data)print(f"\n========== 相邻省份分析结果 ==========")print(df_result.to_string(index=False))print(f"\n共 {len(df_result)个省级行政区")导出Excelwith pd.ExcelWriter(output_excel, engine='openpyxl'as writer:    df_result.to_excel(writer, index=False, sheet_name='相邻省份')    ws = writer.sheets['相邻省份']    ws.column_dimensions['A'].width = 18ws.column_dimensions['B'].width = 12ws.column_dimensions['C'].width = 60from openpyxl.styles import Font, PatternFill, Alignment    header_fill = PatternFill('solid', start_color='2E86AB')for cell in ws[1]:        cell.font = Font(bold=True, color='FFFFFF', name='Arial')        cell.fill = header_fill        cell.alignment = Alignment(horizontal='center')for row in ws.iter_rows(min_row=2):for cell in row:            cell.alignment = Alignment(horizontal='center')            cell.font = Font(name='Arial')print(f"\n输出文件{output_excel}")end_time = time.time()print(f"\n运行耗时{end_time - start_time:.2f")