def merge_target_lyr(self): # 合并所有高标准农田图层,如果输入了1920年的,一并合并 gbz1 = hybasic.getfiles(self.gbz_f, "shp") gbzs = hybasic.filter_file(gbz1,"GBZ") merge_gbzs = "meger_gbzs" # 处理19-20年的数据 if self.gbz_f1920: hybasic._getall_items = [] # 清空递归列表 gbz2 = hybasic.getfiles(gbz_19_20, "shp") new_gbz = gbz2 + gbzs print len(new_gbz) for i in new_gbz: print i arcpy.Merge_management(new_gbz, merge_gbzs) else: arcpy.Merge_management(gbzs, merge_gbzs) total_merge = ezarcpy.merger_all2(merge_gbzs) # GBZ完全合并图层 print "Merge all suceess" return total_merge
def main(dir_p, new_dir, version=None): """ main(dir_p,new_dir,{version}) Provides an option to save a map document ( .mxd ) to a new file, and optionally, to a previous version. dir_p(String): new_dir(String): version(Float): *10.3: Version 10.3 *10.1: Version 10.1 / 10.2 *10.0: Version 10.0 *9.3: Version 9.3 *9.2: Version 9.2 *9.0: Version 9.0 / 9.1 *8.3: Version 8.3 """ path = dir_p suff = "mxd" version = str(version) # 获取文件夹下所有文件 path_list = hybasic.getfiles(path, suff, False) for i in path_list: i_base = os.path.basename(i) name = os.path.splitext(i_base)[0] new_path = new_dir # mxd_p =os.path.join(path,i) # print mxd_p mxd1 = arcpy.mapping.MapDocument(i) print("here1") # mxd1.saveACopy(new_path + "\\" + name + ".mxd", version=version) mxd1.saveACopy(ur"D:\test\df.mxd", version=version)
# 项目名字 XMMC = ws1.range("C1:C" + str(wbs1_rowcount)) ZLDJ = ZLDJ.value XMMC = XMMC.value XMMC_ZLDJ = list(zip(XMMC, ZLDJ)) # [(荣县2011年国家农业综合开发高标准农田建设示范工程,需要提质改造),...] # for ii in XMMC_ZLDJ: # for i in ii: # print i finally: app1.quit() print "\n close application" # 第二部分 # eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee shpfiles = hybasic.getfiles(db_path, "shp", True) # shpfiles = [os.path.basename(i) for i in shpfiles] GBZ_shpfiles = hybasic.filter_file(shpfiles, "GBZ", 100) print "GBZ_shpfiles's len:", len(GBZ_shpfiles) for path in GBZ_shpfiles: for ii in XMMC_ZLDJ: basename = os.path.basename( path) # GBZ2012510321CZ2011年现代农业生产发展项目YS.shp basename = basename[15:-6] if ii[0] == basename: new_ZLDJ = ii[1] with arcpy.da.UpdateCursor(path, ("ZLDJ", )) as cursor: for row in cursor: row[0] = new_ZLDJ print "shpfiles done:", path cursor.updateRow(row)
def handle_shp(inputs, dltb): # 根据地类图斑图层,计算出各地类的面积 all_shp = hybasic.getfiles(inputs, "shp") gbz_shp = hybasic.filter_file(all_shp, "GBZ") hybasic._getall_items = [] # gbz_shp_dir = [os.path.dirname(x) for x in gbz_shp] # gbz_shp_rename = rename(gbz_shp_dir, [u'”', "#2#", u'“', "#1#"]) # # copy_to = scratch_path # copy(gbz_shp_rename, copy_to) # # 测试是否可以重命名为 “ ” # arcpy.Rename_management( # ur"G:\MoveOn\Gispot\Local\test_name\510000高标准农田建设上图入库数据20200114\510000GT2012511827宝兴县穆坪镇新光村土地开发复垦整理综合项目YS\GBZ2012511827GT宝兴县穆坪镇新光村土地开发复垦整理综合项目Y222S.shp", # ur"G:\MoveOn\Gispot\Local\test_name\510000高标准农田建设上图入库数据20200114\510000GT2012511827宝兴县穆坪镇新光村土地开发复垦整理综合项目YS\GBZ2012511827GT宝兴县穆坪镇新光村土地开发“复垦”整理综合项目Y222S.shp") count = len(gbz_shp) get_value.append(count) # 获取项目数量 # 合并图层 merge_layer = scratch_gdb + "/merge" # arcpy.Delete_management(merge_layer) arcpy.Merge_management(gbz_shp, output=merge_layer) # 返回面积 gross_areas = 0 with arcpy.da.SearchCursor(merge_layer, ["SHAPE@AREA"]) as cursor: for row in cursor: gross_areas += row[0] gross_areas = round(gross_areas * 0.0015, 4) print u"总面积(亩):", gross_areas get_value.append(gross_areas) # 获取清查面积 # 完全融合一个图层 dissolve_layer = ezarcpy.merger_all(merge_layer) areas_no_dup = 0 with arcpy.da.SearchCursor(dissolve_layer, ["SHAPE@AREA"]) as cursor: for row in cursor: areas_no_dup += row[0] overlap_area = round((gross_areas - areas_no_dup * 0.0015), 4) print "重叠面积(亩):", overlap_area get_value.append(overlap_area) # 获取重叠面积 # 标识 identity_dltb = scratch_gdb + "/identity_dltb" arcpy.Identity_analysis(in_features=dissolve_layer, identity_features=dltb, out_feature_class=identity_dltb) identity_dltb_fields = arcpy.ListFields(identity_dltb) identity_dltb_name = [i.name for i in identity_dltb_fields] if u"地类编码" in identity_dltb_name: name = u"地类编码" else: name = "DLBM" # 大小写是否有影响? print "DLTB_NAME:", name print u"标识完成" gd_area = 0 # 耕地面积 zzyd_area = 0 # 种植用地面积 ld_area = 0 # 林地面积 cd_area = 0 # 草地面积 qt_area = 0 # 其它面积 jsyd_area = 0 # 建设面积 with arcpy.da.SearchCursor(identity_dltb, [name, "SHAPE@AREA"]) as cursor: for row in cursor: dlbm = row[0] area = row[-1] if dlbm in ("011", "012", "013"): gd_area += area elif dlbm.startswith("02"): # 种植用地面积 zzyd_area += area elif dlbm.startswith("03"): # 林地面积 ld_area += area elif dlbm.startswith("04"): # 草地面积 cd_area += area elif dlbm in ("121", "122", "123", "124", "125", "126", "127"): # 其它面积 qt_area += area else: jsyd_area += area get_value.append( round((zzyd_area + ld_area + cd_area + qt_area + jsyd_area) * 0.0015, 4)) # 获取非耕地面积 get_value.append(round(ld_area * 0.0015, 4)) # 林地 get_value.append(round(cd_area * 0.0015, 4)) # 草地 get_value.append(round(zzyd_area * 0.0015, 4)) # 种植用地面积 get_value.append(round(jsyd_area * 0.0015, 4)) # 建设用地 get_value.append(round(qt_area * 0.0015, 4)) # 其它用地 # def gd_intersect_layer(): # """合并图层(非融合)和 耕地进行相交""" # arcpy.MakeFeatureLayer_management(dltb_path, "dltb_lyr") # arcpy.SelectLayerByAttribute_management("dltb_lyr", "NEW_SELECTION", name+" LIKE '01%' ") # arcpy.CopyFeatures_management("dltb_lyr", "dltb_lyr_gd") # out_feature_class = scratch_gdb+"/intersect_layer" # arcpy.Intersect_analysis([merge_layer, "dltb_lyr"], out_feature_class) # # gd_intersect_layer() print "______________________________________________" print "______________________________________________" print "______________________________________________" for i in get_value: print i return get_value
def main(qq_pip, folder, excel): # 确定质量等级的入库清单excel # excel_path = "path" excel_path = excel db_path = folder # db_path = u"C:/Users/Administrator/Desktop/高标最后一次/自贡市/荣县/测试/510000高标准农田建设上图入库数据20200110" qq_pip.put("processing...\n") try: print "\n" app1 = xw.App(visible=False, add_book=False) # 只打开不新增工作簿 app1.display_alerts = False # 关闭Excel的提示和警告信息 app1.screen_updating = False # 不更新屏幕显示 # app1.screen_updating = True # 打开清理统计表 wb1 = app1.books.open(excel_path) ws1 = wb1.sheets[0] # v1 = sheet1.range("a1:a7").value wbs1_rowcount = ws1.api.UsedRange.Rows.count # 质量等级 ZLDJ = ws1.range("I1:I" + str(wbs1_rowcount)) # 项目名字 XMMC = ws1.range("C1:C" + str(wbs1_rowcount)) ZLDJ = ZLDJ.value XMMC = XMMC.value XMMC_ZLDJ = list(zip( XMMC, ZLDJ)) # [(荣县2011年国家农业综合开发高标准农田建设示范工程,需要提质改造),...] # for ii in XMMC_ZLDJ: # for i in ii: # print i finally: app1.quit() print "\n close application" # 第二部分 修改shp数据 # eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee shpfiles = hybasic.getfiles(db_path, "shp", True) # shpfiles = [os.path.basename(i) for i in shpfiles] GBZ_shpfiles = hybasic.filter_file(shpfiles, "GBZ", 100) print "GBZ_shpfiles's len:", len(GBZ_shpfiles) for path in GBZ_shpfiles: print path print "type:", type(path) print os.path.isfile(path) for ii in XMMC_ZLDJ: basename = os.path.basename( path) # GBZ2012510321CZ2011年现代农业生产发展项目YS.shp basename = basename[15:-6] if ii[0] == basename: new_ZLDJ = ii[1] # ly = arcpy.mapping.Layer(path) # with arcpy.da.UpdateCursor(ly, ("ZLDJ",)) as cursor: # path.encode('gb2312') print "arcpy.Exists:", arcpy.Exists(path) with arcpy.da.UpdateCursor(path, ("ZLDJ", )) as cursor: for row in cursor: row[0] = new_ZLDJ cursor.updateRow(row) print "shpfiles done:", path hybasic._getall_items = [] # 清空列表,递归中不便设置清空操作 XM_shpfiles = hybasic.filter_file(shpfiles, "XM", 100) print "XM_shpfiles's len:", len(XM_shpfiles) for path in XM_shpfiles: for ii in XMMC_ZLDJ: basename = os.path.basename( path) # GBZ2012510321CZ2011年现代农业生产发展项目YS.shp basename = basename[14:-6] if ii[0] == basename: new_ZLDJ = ii[1] print "arcpy.Exists:", arcpy.Exists(path) # path.encode('gb2312') with arcpy.da.UpdateCursor(path, ("ZLDJ", )) as cursor: for row in cursor: row[0] = new_ZLDJ cursor.updateRow(row) print "xw shpfiles done:", path # 质量等级 v列 国土上过库 # 质量等级 v列 国土没有上过库 # eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee hybasic._getall_items = [] # 第三部分 修改excel表 print "======================================================================" print "======================================================================" # 单个项目文件夹中的excel表 new_xlsxs = hybasic.getfiles(db_path, "xlsx", True) print "Third Part xlsxs:", len(new_xlsxs) for paths2 in new_xlsxs: basename2 = os.path.basename(paths2) ss = "SS.xlsx" print "basename2[:-7]:", basename2[-7:] if not basename2[-7:] == ss: basename2 = basename2[12:-7] # 荣县2011年国家农业综合开发高标准农田建设示范工程 print "Third Part basename:", basename2 for ii in XMMC_ZLDJ: if ii[0] == basename2: try: app1 = xw.App(visible=False, add_book=False) # 只打开不新增工作簿 app1.display_alerts = False # 关闭Excel的提示和警告信息 app1.screen_updating = False # 不更新屏幕显示 # app1.screen_updating = True # 打开清理统计表 wb1 = app1.books.open(paths2) ws1 = wb1.sheets[0] # v1 = sheet1.range("a1:a7").value # v1 = sheet1.range("d1:d300").expand().value #TODO 不清楚expand的作用 wbs1_rowcount = ws1.api.UsedRange.Rows.count # 质量等级 ws1.range("V2").value = ii[1] wb1.save() print "Third Part excel file done:", paths2 finally: # wb1.close() app1.quit() # print "\n close application" else: print "else=-==========================================================" print "basename2[-7:]:", basename2[-7:] basename2 = basename2[12:-7] # 荣县2011年国家农业综合开发高标准农田建设示范工程 print "Third Part basename:", basename2 for ii in XMMC_ZLDJ: if ii[0] == basename2: try: app1 = xw.App(visible=False, add_book=False) # 只打开不新增工作簿 app1.display_alerts = False # 关闭Excel的提示和警告信息 app1.screen_updating = False # 不更新屏幕显示 # app1.screen_updating = True # 打开清理统计表 wb1 = app1.books.open(paths2) ws1 = wb1.sheets[0] # v1 = sheet1.range("a1:a7").value # v1 = sheet1.range("d1:d300").expand().value #TODO 不清楚expand的作用 wbs1_rowcount = ws1.api.UsedRange.Rows.count # 质量等级 ws1.range("u2").value = ii[1] wb1.save() print "Third Part excel file done:", paths2 finally: # wb1.close() app1.quit()
def zldj_cal(input_path, dltb_path): all_shp = hybasic.getfiles(input_path, "shp") gbz_shp = hybasic.filter_file(all_shp, "GBZ") merge_layer = scratch_gdb + "/merge23" arcpy.Merge_management(gbz_shp, output=merge_layer) # out_feature_class = scratch_gdb + "/dissolve_layer" with arcpy.da.UpdateCursor(merge_layer, ["ZLDJ"]) as cursor: for row in cursor: if row[0] == u"需要提质改" or row[0] == u"需要提质": row[0] = u"需要提质改造" cursor.updateRow(row) out_feature_class = "dissolve_layer" arcpy.Dissolve_management(merge_layer, out_feature_class, "ZLDJ") # 按属性选择 # if arcpy.Exists(scratch_gdb+) fuhe = "fuhe" jibenfuhe = "jibenfuhe" xytzgz = "xytzgz" for _ in [fuhe, jibenfuhe, xytzgz]: try: arcpy.Delete_management(_) print "delete:", _ except: print 1 arcpy.MakeFeatureLayer_management(out_feature_class, "lyr") print arcpy.Exists("lyr") # 可能部分质量等级没有 arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", " \"ZLDJ\" = '符合' ") # 加了 U 报错 # arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", " 'ZLDJ' = u'符合' ") arcpy.CopyFeatures_management("lyr", "fuhe") arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", " \"ZLDJ\" LIKE '基本符%' ") arcpy.CopyFeatures_management("lyr", "jibenfuhe") arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", " \"ZLDJ\" LIKE '需要%' ") arcpy.CopyFeatures_management("lyr", "xytzgz") print u"分离质量等级成功" zldj_layers = [] if arcpy.Exists(fuhe): zldj_layers.append(fuhe) if arcpy.Exists(jibenfuhe): zldj_layers.append(jibenfuhe) if arcpy.Exists(xytzgz): zldj_layers.append(xytzgz) dltb_fields = arcpy.ListFields(dltb_path) dltb_field_names = [i.name for i in dltb_fields] print dltb_field_names if u"地类编码" in dltb_field_names: name = u"地类编码" else: name = "DLBM" # 大小写是否有影响? print "DLTB_NAME:", name dltb = "dltb" arcpy.MakeFeatureLayer_management(dltb_path, dltb) arcpy.SelectLayerByAttribute_management(dltb, "NEW_SELECTION", name + " LIKE '01%' ") for a_shp in zldj_layers: new_name = a_shp + "_DLTB" arcpy.Identity_analysis(in_features=a_shp, identity_features=dltb, out_feature_class=new_name) print "a_shp:", a_shp arcpy.MakeFeatureLayer_management(new_name, "a_shp_2") arcpy.SelectLayerByAttribute_management("a_shp_2", "NEW_SELECTION", name + " LIKE '01%' ") arcpy.CopyFeatures_management("a_shp_2", a_shp) layername_area = [ ] # 将图层名和面积组成的列表放进列表 [["fuhe",3455], ["jibenfuhe", 899.976]] for i in zldj_layers: area = cal_shp_area(i) layername_area.append([i, area]) print layername_area # [['fuhe', 43179889.3465107], ['jibenfuhe', 28166402.1104696], ['xytzgz', 97004089.0362233]] zldj_area = [] if arcpy.Exists(xytzgz): # 存在需要提质改造的项目 area3 = layername_area[-1][1] if len(layername_area) > 2: # 存在前两种情况 erase_jibenfuhe = "layer0" erase_fuhe1 = "layer1" erase_fuhe2 = "layer1_2" area1 = layername_area[0][1] area2 = layername_area[1][1] # 需要提质改造和基本符合擦除 arcpy.Erase_analysis(in_features=jibenfuhe, erase_features=xytzgz, out_feature_class=erase_jibenfuhe) area_jibenfuhe = show_shp_area(erase_jibenfuhe) # 基本符合的面积 # 与基本符合擦除,保留符合 arcpy.Erase_analysis(in_features=fuhe, erase_features=erase_jibenfuhe, out_feature_class=erase_fuhe1) # area_jibenfu_part1 = area1-area_fuhe1 # 与xytzgz擦除,保留符合 arcpy.Erase_analysis(in_features=erase_fuhe1, erase_features=xytzgz, out_feature_class=erase_fuhe2) area_fuhe = show_shp_area(erase_fuhe2) # 符合的面积 # zldj_area = [] # 三种质量等级的列表 zldj_area.append([u"符合", area_fuhe]) zldj_area.append([u"基本符合", area_jibenfuhe]) zldj_area.append([u"需要提质改造", area3]) elif len(layername_area) == 2: # 只有基本符合和提质改造或者符合图层和提质改造 erase_ = "layer1_4" arcpy.Erase_analysis(in_features=layername_area[0][0], erase_features=xytzgz, out_feature_class=erase_) erase_area = show_shp_area(erase_) # 擦除后的面积就是非 提质改造 图层的真实面积 xytzgz_area = area3 zldj_area.append([layername_area[0][0], erase_area]) zldj_area.append([u"需要提质改造", xytzgz_area]) elif len(layername_area) == 1: # 只存在提质改造 xytzgz_area = layername_area[0][1] zldj_area.append([u"需要提质改造", xytzgz_area]) else: # 不存在需要提质改造的图层 if len(layername_area) == 2: # 存在符合和基本符合 erase_fuhe = "layer1_41" arcpy.Erase_analysis(in_features=fuhe, erase_features=jibenfuhe, out_feature_class=erase_fuhe) erase_area_fuhe = show_shp_area( erase_fuhe) # 擦除后的面积就是非 提质改造 图层的真实面积 zldj_area.append([u"符合", erase_area_fuhe]) zldj_area.append([u"基本符合", layername_area[1][1]]) else: # 只存在 符合 或者 基本符合 一种图层 zldj_area.append([layername_area[0][0], layername_area[0][1]]) a = 0 for i in zldj_area: name, area = i print name, area * 0.0015 a += area * 0.0015 print a zldj_area = [round(_[1] * 0.0015, 4) for _ in zldj_area] print "____________________________________________________________________" print "____________________________________________________________________" print "____________________________________________________________________" for i in zldj_area: print i return zldj_area