Пример #1
0
 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
Пример #2
0
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)
Пример #3
0
    # 项目名字
    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)
Пример #4
0
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
Пример #5
0
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()
Пример #6
0
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