arcgis大比例面要素标识工具箱_使用说明

arcgis工具箱下载:【免费】arcgis大比例面要素标识工具箱资源-CSDN文库

输入要素——红框test_fishnet:

标识要素test:

输出要素——largeppt(将test图层属性附给红框图层test_fishnet,生成largepp图层):

使用说明:本工具可在不切割输入要素图斑的前提下,按标识面积最大标识要素,并生成有标识属性的输入要素图层。工具运行后请刷新显示。

使用场景:

1、跨行政区界图斑主要所属行政区的识别

2、因为边界精度导致标识图斑后被分割,使用该工具能不切割图斑进行标识,等等

具体使用方法见工具箱说明:

原始代码:

#coding=utf-8
import arcpy, os

import logging

# logging.disable(logging.CRITICAL)  #禁用CRITICAL级别以下的日志记录
# 按此格式显示DEBUG级别以上的日志记录
# logging.basicConfig(filename=loggingfile, level=logging.DEBUG, format="%(asctime)s-%(levelname)s-%(message)s")
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s-%(levelname)s-%(message)s")
logging.debug("start of program")
# arcgis工具
argv = tuple(arcpy.GetParameterAsText(i) for i in range(arcpy.GetArgumentCount()))
fc = argv[0] # 在同数据库路径下生成\largeppt为最大比例属性标识后图层,注意图层记录数
fcId = argv[1] # 文件地理数据库图层,要标识字段相同属性需融合(多对象),只要fc能标识到,就取其中最大比例的面积图斑的属性,注意如果只有部分图斑,譬如区内的部分街道,如果只放部分街道的图斑,则只要有相交都会标注那部分街道的属性,除非将区内所有街道的图斑放上去


arcpy.env.overwriteOutput = True
arcpy.env.workspace = os.path.dirname(fc)

IdHfc =  r"in_memory\IdHfc"
SXFc = r"in_memory\SXFc"
SXFcMAX = r"in_memory\SXFcMAX"
SXFcTab = r"in_memory\SXFcTab"

try:
    arcpy.RepairGeometry_management(fc)
    arcpy.RepairGeometry_management(fcId)

    largeppt = arcpy.FeatureClassToFeatureClass_conversion(fc, os.path.dirname(fc), "largeppt")  # 涉及保存位置
    # result = arcpy.CopyFeatures_management("roads", os.path.dirname(fc) + r"\largeppt")

    # largeppt = os.path.dirname(fc) + "\\largeppt"
    fcIdCopy =arcpy.FeatureClassToFeatureClass_conversion(fcId, "in_memory", "fcIdCopy")  # 涉及保存位置
    field_names2 = [f.name for f in arcpy.ListFields(fcIdCopy)]

    arcpy.AddField_management(largeppt, "MJ", "DOUBLE")
    arcpy.CalculateField_management(largeppt, "MJ",
                                            "!SHAPE.area!", "PYTHON_9.3")

    arcpy.Identity_analysis(largeppt, fcIdCopy, IdHfc)
    arcpy.AddField_management(IdHfc, "BL", "DOUBLE")
    arcpy.CalculateField_management(IdHfc, "BL",
                                            "round((!SHAPE.AREA!)/!MJ!,4)", "PYTHON_9.3")

    arcpy.Select_analysis(IdHfc, SXFc, "\"FID_fcIdCopy\" <> -1") # field_names2其中数据型字段,注意是标识后图层的字段名,不是标识前;筛选有属性的记录

    arcpy.Statistics_analysis(SXFc, SXFcTab,  [["BL", "MAX"]], "FID_largeppt")  # 统计有属性的记录中最大比例的统计表

    arcpy.AddField_management(SXFcTab, "SXTabBZ", "TEXT", field_length = 100)
    arcpy.CalculateField_management(SXFcTab, "SXTabBZ", 'str(!FID_largeppt!) + "_" + str(!MAX_BL!)', "PYTHON_9.3")# field_names1 = "BH"
    # str(!BSM!) + "a" + str(!MAX_BL!), "PYTHON_9.3")

    arcpy.AddField_management(SXFc, "SXBZ", "TEXT", field_length = 100)
    arcpy.CalculateField_management(SXFc, "SXBZ",
                                            'str(!FID_largeppt!) + "_" + str(!BL!)', "PYTHON_9.3") # field_names1 = "BH"

    SXFcTabqsx = arcpy.TableToTable_conversion(SXFc, "in_memory", "SXFcTabqsx")  # 涉及保存位置

    arcpy.JoinField_management(SXFcTabqsx, "FID_largeppt", SXFcTab, "FID_largeppt")
    arcpy.TableSelect_analysis(SXFcTabqsx, SXFcMAX, "\"SXBZ\" = \"SXTabBZ\"")

    field_names3 = arcpy.ListFields(SXFcMAX)
    field_names4 = []
    for f1 in field_names3:
        if not f1.required:
            field_names4.append(f1.name)

    print(field_names4)
    field_names5 = field_names4[field_names4.index("FID_fcIdCopy")+1:field_names4.index("BL")]
    field_names5 += ["FID_largeppt"]

    print(field_names5)
    for i in field_names5:
        field_names4.remove(i)
    print(field_names4)
    arcpy.DeleteField_management(SXFcMAX, field_names4)
    arcpy.JoinField_management(largeppt, "OBJECTID", SXFcMAX, "FID_largeppt")
    # arcpy.JoinField_management(largeppt, field_names1, SXFcMAX, field_names1, field_names2)

    logging.debug("end of program")

except Exception as ex:
    # If an error occurred, print line number and error message
    import traceback
    import sys

    tb = sys.exc_info()[2]
    print("捕获到的异常信息是:{}".format(ex))  # 或者使用print("捕获到的异常信息是:",ex.args[0]或者str(ex)或者直接ex);3.9版本ex.message已不可用)
    print("捕获到的异常代码行号是:Line {0}".format(tb.tb_lineno))
    print(traceback.format_exc())  # 显示完整错误路径

except arcpy.ExecuteError:
    print(arcpy.GetMessages())

# 无错误运行else后代码
else:
    logging.debug("program success")
    # arcpy.AddMessage("program success")

# 有没有错误均运行finally后代码
finally:
    pass

欢迎使用,如发现问题欢迎指正,需求和交流请私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值