用arcpy做个退地类计算方法

用arcpy做个退地类计算方法

退地类算法示意图

方法说明

本次采用arcpy方法进行计算分析,通过调用GeoProcessing达到分析的目的。

为减少GeoProcessing调用次数,大概的方式是,统一处理全覆盖的面(所有的DLTB),再分别处理非全覆盖面

为缩小分析范围,先采用SelectLayerByLocation的方式控制下分析范围,再进行分析。

具体思路如下:

  1. 先用待分析图形,选中所有的图层(DLTB,CZCDYD)
  2. 用待分析图形clip一下2023的DLTB
  3. 用2023_clip数据进行叠加所有的DLTB,生成2023_clip_union
  4. 分别用待分析图形clip一下CZCDYD
  5. 再用union的方法,将所有的分析过程数据(2023_clip_union和所有的CZCDYD_clip)进行union

剩下的就是统计了,可统计结果:

  • 2023的核定、非核定现状分析(含权属地类面积)
  • 2022的核定、非核定现状分析(含权属地类面积)
  • 2023的退地类分析

后续扩展

1、把平差的方法加进来,做好地类平差
2、可改成arctool,作为一个自定义分析方法,输出如上的结果。也可改成服务以供调用。
3、代码需要修改的地方:临时图层的命名,可以加上时间戳,防止出现重复,代码执行前做删除判断,防止重复,再代码执行后执行删除,防止数据冗余变大。

# 待分析地块,先选择下2023的现状图层,然后进行叠加分析
# 选择属于建设用地的部分,然后再与2018和2009的图层进行分析
# 选择数据其他农用地的,
import arcpy
import time

f_time=time.time()
# 地类字典
# 三调地类字典
#耕地,其他农用地,建设用地,未利用地
DL_SD_GD="('0101','0102','0103')"
DL_SD_QTNYD="('0201','0201K','0202','0202K','0203','0203K','0204','0204K','0301','0301K','0302','0302K','0303','0304','0305','0306','0307','0307K','0401','0402','0403','0403K','0404','1006','1103','1104','1104A','1104K','1107','1107A','1202','1203')"
DL_SD_JSYD="('0501','0502','0503','0504','0505','0506','0507','0508','05H1','0601','0602','0603','0604','0701','0702','0801','0802','0803','0804','0805','0806','0807','0808','0809','0810','0810A','08H1','08H2','08H2A','09','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201')"
DL_SD_WLYD="('1101','1102','1105','1106','1108','1110','1204','1205','1206','1207')"
# 二调地类字典
DL_ED_GD="('011','012','013')"
DL_ED_QTNYD="('021','022','023','031','032','033','041','042','104','114','117','122','123')"
DL_ED_JSYD="('051','052','053','054','061','062','063','071','072','081','082','083','084','085','086','087','088','091','092','093','094','095','101','102','103','105','106','107','113','118','121','201','202','203','204','205')"
DL_ED_WLYD="('111','112','115','116','119','043','124','125','126','127')"
# 读取下待分析的地块
arcpy.env.workspace = "C:\\Users\\Administrator\\Desktop\\GHTJ.gdb"
polygon_layer = "Exp"

xz_2023_layer="TDLY_DLTB_SD_2023"
xz_2022_layer="TDLY_DLTB_SD_2022"
xz_dltb_2018="TDLY_DLTB_2018"
xz_dltb_2009="TDLY_DLTB_2009"
czc_22= "CZCDYD_SD_2022"
czc_23="CZCDYD_SD_2023"

out_xz2023="xz2023_temp"
out_result="result_temp"
out_result_23="result_23_temp"
out_result_22="result_22_temp"
out_result_X="result_x_temp"
# 清除掉临时图层
try:
    if arcpy.Exists(out_xz2023):
        arcpy.management.Delete(out_xz2023)
    if arcpy.Exists(out_result):
        arcpy.management.Delete(out_result)
    if arcpy.Exists(out_result_23):
        arcpy.management.Delete(out_result_23)
    if arcpy.Exists(out_result_22):
        arcpy.management.Delete(out_result_22)
    if arcpy.Exists(out_result_X):
        arcpy.management.Delete(out_result_X)
    print("清空临时图层")
except exec as e : 
    print(e)


def GetArea(layer_name,where_sql):
    sum_area=0
    with arcpy.da.SearchCursor(layer_name,where_clause=where_sql,field_names=['SHAPE@AREA']) as jsydCursor:
        for row in jsydCursor:
            sum_area=sum_area+row[0]
    return sum_area


# 先与2023年的现状数据进行叠加分析,此处选用clip方法,防止待分析地块干扰

S_2023 = arcpy.management.SelectLayerByLocation(xz_2023_layer,overlap_type="INTERSECT",select_features=polygon_layer)
S_2022 = arcpy.management.SelectLayerByLocation(xz_2022_layer,overlap_type="INTERSECT",select_features=polygon_layer)
S_2018 = arcpy.management.SelectLayerByLocation(xz_dltb_2018,overlap_type="INTERSECT",select_features=polygon_layer)
S_2009=arcpy.management.SelectLayerByLocation(xz_dltb_2009,overlap_type="INTERSECT",select_features=polygon_layer)

arcpy.analysis.Clip(S_2023,polygon_layer,out_xz2023)
# 接下来进行叠加分析 全面叠加
arcpy.analysis.Intersect([out_xz2023,S_2022,S_2018,S_2009],out_result)
# 图形先clip23年的20x,  图形再clip22年的20x,      然后进行联合分析,输入要素包括(叠加的base面数据,23的clip数据,22的clip数据)
S_CZC_2023=arcpy.management.SelectLayerByLocation(czc_23,overlap_type="INTERSECT",select_features=polygon_layer)
arcpy.analysis.Clip(S_CZC_2023,polygon_layer,out_result_23)

S_CZC_2022=arcpy.management.SelectLayerByLocation(czc_22,overlap_type="INTERSECT",select_features=polygon_layer)
arcpy.analysis.Clip(S_CZC_2022,polygon_layer,out_result_22)

# 进行union分析
arcpy.analysis.Union([out_result,out_result_23,out_result_22], out_result_X)
# 计算建设用地面积 CZCLX不为空 且 DLBM_2,DLBM_3都是建设用地的,为建设用地
jsyd_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s AND DLBM_12_13 IN %s" %( DL_SD_JSYD, DL_ED_JSYD,DL_ED_JSYD)
jsydzmj=GetArea(out_result_X,jsyd_where)
# print("建设用地总面积为:" + jsydzmj)

#计算09-2-1  CZCLX不为空 且 DLBM_2 是建设用地 且 DLBM_3 是其他农用地
r_09_2_1_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s AND DLBM_12_13 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_QTNYD)
r_09_2_1=GetArea(out_result_X,r_09_2_1_where)
# print("09-2-1面积为:" + r_09_2_1)

#计算09-2-2  CZCLX不为空 且 DLBM_2 是建设用地 且 DLBM_3 是耕地
r_09_2_2_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s AND DLBM_12_13 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_GD)
r_09_2_2=GetArea(out_result_X,r_09_2_2_where)
# print("09-2-2面积为:" + r_09_2_2)

#计算09-2-3  CZCLX不为空 且 DLBM_2 是建设用地 且 DLBM_3 是未利用地
r_09_2_3_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s AND DLBM_12_13 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_WLYD)
r_09_2_3=GetArea(out_result_X,r_09_2_3_where)
# print("09-2-3面积为:" + r_09_2_3)

#计算18-1  CZCLX不为空 且 DLBM_2是其他农用地
r_18_1_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s " %(DL_SD_JSYD,DL_ED_QTNYD)
r_18_1=GetArea(out_result_X,r_18_1_where)
# print("18-1面积为:" + r_18_1)

#计算18-2  CZCLX不为空 且 DLBM_2是耕地
r_18_2_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s " %(DL_SD_JSYD,DL_ED_GD)
r_18_2=GetArea(out_result_X,r_18_2_where)
# print("18-2面积为:" + r_18_2)

#计算18-3  CZCLX不为空 且 DLBM_2是未利用地
r_18_3_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM_12 IN %s " %(DL_SD_JSYD,DL_ED_WLYD)
r_18_3=GetArea(out_result_X,r_18_3_where)
# print("18-3面积为:" + r_18_3)

#计算1  CZCLX为空,DLBM是其他农用地
r_1_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_QTNYD)
r_1=GetArea(out_result_X,r_1_where)
# print("1面积为:" + r_1)

#计算2  CZCLX为空,DLBM是耕地
r_2_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_GD)
r_2=GetArea(out_result_X,r_2_where)
# print("2面积为:" + r_2)

#计算3  CZCLX为空,DLBM是未利用地
r_3_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_WLYD)
r_3=GetArea(out_result_X,r_3_where)
# print("3面积为:" + r_3)

# 计算6 CZCLX为空,CZCLX_1为空,DLBM_1为耕地
r_6_where="CZCLX = '' AND CZCLX_1 = '' AND DLBM IN %s AND DLBM_1 IN %s " %(DL_SD_QTNYD,DL_SD_GD)
r_6=GetArea(out_result_X,r_6_where)
# print("6面积为:" + r_6)

#计算9-1-2 CZCLX为空,CZCLX_1不为空,DLBM_3为耕地
r_9_1_2_where="CZCLX = '' AND (CZCLX_1 = '' OR DLBM_1 IN %s ) AND DLBM IN %s AND DLBM_1 IN %s AND DLBM_12_13 IN %s " %(DL_SD_JSYD,DL_SD_QTNYD,DL_SD_JSYD,DL_ED_GD)
r_9_1_2=GetArea(out_result_X,r_9_1_2_where)
# print("9-1-2面积为:" + r_9_1_2)
print("退地类算法")
print("合计其他农用地面积:%s" %(r_1+r_18_1+r_09_2_1-r_6-r_9_1_2) ) 
print("耕地面积为:%s" %(r_2+r_6+r_9_1_2+r_18_2+r_09_2_2) ) 
print("未利用地面积:%s" %(r_3+r_18_3+r_09_2_3) ) 
print("建设用地总面积为:" + str(jsydzmj))

print ("总用地面积"+str(r_1+r_18_1+r_09_2_1-r_6-r_9_1_2+   r_2+r_6+r_9_1_2+r_18_2+r_09_2_2+    r_3+r_18_3+r_09_2_3+   jsydzmj))

a_time=time.time()
print ("一共消耗%s秒" % str( a_time-f_time))

print("三调分析")

ed_qtnyd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_QTNYD)
ed_qtnyd=GetArea(out_result_X,ed_qtnyd_sql)
print ("其他农用地总面积为:%s" %str(ed_qtnyd))

ed_gd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_GD)
ed_gd=GetArea(out_result_X,ed_gd_sql)
print ("耕地总面积为:%s" %str(ed_gd))     

ed_jsyd_sql="(CZCLX <> '' OR DLBM IN %s)" %(DL_SD_JSYD)
ed_jsyd=GetArea(out_result_X,ed_jsyd_sql)
print ("建设用地总面积为:%s" %str(ed_jsyd))

ed_wlyd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_WLYD)
ed_wlyd=GetArea(out_result_X,ed_wlyd_sql)
print ("未利用地总面积为:%s" % str(ed_wlyd))   

a_time=time.time()
print ("一共消耗%s秒" % str( a_time-f_time))

以上代码存在一些问题,如DLBM字段在多个图层中都有出现,在进行相交等运算的时候,字段就变得不可控了,对以上代码进行了优化,将一些重复性字段进行了处理,在统计的时候能过够更加明确字段信息;同时增加了叠加报批成果分析的内容。当然这也牺牲了一些运算时间,相较以上代码,对大宗地块运算来讲,大概牺牲了10秒。以下代码的运行环境是在arcgis pro 的python环境下运行的,arcgis10版本的需要将arcpy.management.CalculateField方法的参数进行修改才可,代码如下:

# 待分析地块,先选择下2023的现状图层,然后进行叠加分析
# 选择属于建设用地的部分,然后再与2018和2009的图层进行分析
# 选择数据其他农用地的,
import arcpy
import time

f_time=time.time()
# 地类字典
# 三调地类字典
#耕地,其他农用地,建设用地,未利用地
DL_SD_GD="('0101','0102','0103')"
DL_SD_QTNYD="('0201','0201K','0202','0202K','0203','0203K','0204','0204K','0301','0301K','0302','0302K','0303','0304','0305','0306','0307','0307K','0401','0402','0403','0403K','0404','1006','1103','1104','1104A','1104K','1107','1107A','1202','1203')"
DL_SD_JSYD="('0501','0502','0503','0504','0505','0506','0507','0508','05H1','0601','0602','0603','0604','0701','0702','0801','0802','0803','0804','0805','0806','0807','0808','0809','0810','0810A','08H1','08H2','08H2A','09','0901','0902','0903','0904','0905','0906','1001','1002','1003','1004','1005','1007','1008','1009','1109','1201')"
DL_SD_WLYD="('1101','1102','1105','1106','1108','1110','1204','1205','1206','1207')"
# 二调地类字典
DL_ED_GD="('011','012','013')"
DL_ED_QTNYD="('021','022','023','031','032','033','041','042','104','114','117','122','123')"
DL_ED_JSYD="('051','052','053','054','061','062','063','071','072','081','082','083','084','085','086','087','088','091','092','093','094','095','101','102','103','105','106','107','113','118','121','201','202','203','204','205')"
DL_ED_WLYD="('111','112','115','116','119','043','124','125','126','127')"

# 读取下待分析的地块
arcpy.env.workspace = "C:\\Users\\Administrator\\Desktop\\GHTJ.gdb"
polygon_layer = "Exp"

# 建设用地报批成果层
# BP_CG_layer="CG_JSYDBP"

BP_CG_layer="CG_JSYDBP_TEMP"

xz_2023_layer="TDLY_DLTB_SD_2023"
xz_2022_layer="TDLY_DLTB_SD_2022"
# xz_2023_layer="TDLY_DLTB_SD_2022"
# xz_2022_layer="TDLY_DLTB_SD_2021"
xz_dltb_2018="TDLY_DLTB_2018"
xz_dltb_2009="TDLY_DLTB_2009"

czc_22= "CZCDYD_SD_2022"
czc_23="CZCDYD_SD_2023"

# czc_23="CZCDYD_SD_2022"
# czc_22= "CZCDYD_SD_2021"


out_xz2023="xz2023_temp"
out_result="result_temp"
out_result_23="result_23_temp"
out_result_22="result_22_temp"
out_result_X="result_x_temp"
# 清除掉临时图层
try:
    if arcpy.Exists(out_xz2023):
        arcpy.management.Delete(out_xz2023)
    if arcpy.Exists(out_result):
        arcpy.management.Delete(out_result)
    if arcpy.Exists(out_result_23):
        arcpy.management.Delete(out_result_23)
    if arcpy.Exists(out_result_22):
        arcpy.management.Delete(out_result_22)
    if arcpy.Exists(out_result_X):
        arcpy.management.Delete(out_result_X)
        
    if arcpy.Exists("TmpAnaLayer"):
        arcpy.management.Delete("TmpAnaLayer")
    if arcpy.Exists("YBP_TEMP"):
        arcpy.management.Delete("YBP_TEMP")
    if arcpy.Exists("Intersect_2022"):
        arcpy.management.Delete("Intersect_2022")
    if arcpy.Exists("Intersect_2018"):
        arcpy.management.Delete("Intersect_2018")
    if arcpy.Exists("Intersect_2009"):
        arcpy.management.Delete("Intersect_2009")
        
        
    print("清空临时图层")
except exec as e : 
    print(e)

# 通用方法--------根据筛选条件计算面积
def GetArea(layer_name,where_sql=""):
    sum_area=0
    with arcpy.da.SearchCursor(layer_name,where_clause=where_sql,field_names=['SHAPE@AREA']) as jsydCursor:
        for row in jsydCursor:
            sum_area=sum_area+row[0]
    return sum_area

# 通用方法--------对DLTB图层进行处理
def HandleDLTB(dltb_layer,suffix):
    arcpy.management.AddField(dltb_layer,"DLBM"+suffix,field_type="TEXT",field_length=5)
    arcpy.management.AddField(dltb_layer,"QSXZ"+suffix,field_type="TEXT",field_length=3)
    arcpy.management.CalculateField(dltb_layer,"DLBM"+suffix,"!DLBM!",'PYTHON3')
    arcpy.management.CalculateField(dltb_layer,"QSXZ"+suffix,"!QSXZ!",'PYTHON3')
    # 删除其他字段
    arcpy.management.DeleteField(dltb_layer,["DLBM"+suffix,"QSXZ"+suffix],method="KEEP_FIELDS")
    
# 通用方法--------对CZCDYD图层进行处理
def HandleCZCDYD(dltb_layer,suffix):
    arcpy.management.AddField(dltb_layer,"CZCLX"+suffix,field_type="TEXT",field_length=4)
    arcpy.management.CalculateField(dltb_layer,"CZCLX"+suffix,"!CZCLX!",'PYTHON3')
    # 删除其他字段
    arcpy.management.DeleteField(dltb_layer,["CZCLX"+suffix],method="KEEP_FIELDS")
    

# 第一步,先与报批进行相交,计算出相交的面积
# 第二步,地块扣除相交部分,得到要进行分析的图形
s_bp = arcpy.management.SelectLayerByLocation(BP_CG_layer,overlap_type="INTERSECT",select_features=polygon_layer)
arcpy.analysis.Intersect([polygon_layer,s_bp],out_feature_class="YBP_TEMP",join_attributes="ONLY_FID")
ybp_area=GetArea("YBP_TEMP")
print("与报批相交的面积为:"+str(ybp_area))
if (ybp_area==0):
    analysis_layer=polygon_layer
else:
    arcpy.analysis.Erase(polygon_layer,"YBP_TEMP","TmpAnaLayer")
    analysis_layer="TmpAnaLayer"




# 先与2023年的现状数据进行叠加分析,此处选用clip方法,防止待分析地块干扰
S_2023 = arcpy.management.SelectLayerByLocation(xz_2023_layer,overlap_type="INTERSECT",select_features=analysis_layer)
S_2022 = arcpy.management.SelectLayerByLocation(xz_2022_layer,overlap_type="INTERSECT",select_features=analysis_layer)
arcpy.CopyFeatures_management(S_2022,"Intersect_2022")
# 对图层字段进行处理
HandleDLTB("Intersect_2022","2022")

S_2018 = arcpy.management.SelectLayerByLocation(xz_dltb_2018,overlap_type="INTERSECT",select_features=analysis_layer)
arcpy.CopyFeatures_management(S_2018,"Intersect_2018")
HandleDLTB("Intersect_2018","2018")

S_2009=arcpy.management.SelectLayerByLocation(xz_dltb_2009,overlap_type="INTERSECT",select_features=analysis_layer)
arcpy.CopyFeatures_management(S_2009,"Intersect_2009")
HandleDLTB("Intersect_2009","2009")

arcpy.analysis.Clip(S_2023,analysis_layer,out_xz2023)



# 接下来进行叠加分析 全面叠加
arcpy.analysis.Intersect([out_xz2023,"Intersect_2022","Intersect_2018","Intersect_2009"],out_result)

# 图形先clip23年的20x,  图形再clip22年的20x,      然后进行联合分析,输入要素包括(叠加的base面数据,23的clip数据,22的clip数据)
S_CZC_2023=arcpy.management.SelectLayerByLocation(czc_23,overlap_type="INTERSECT",select_features=analysis_layer)
arcpy.analysis.Clip(S_CZC_2023,analysis_layer,out_result_23)

S_CZC_2022=arcpy.management.SelectLayerByLocation(czc_22,overlap_type="INTERSECT",select_features=analysis_layer)
arcpy.analysis.Clip(S_CZC_2022,analysis_layer,out_result_22)

# 字段要重命名一下,以免出现无法确认字段来源的情况,删除无效的字段
HandleCZCDYD(out_result_22,'2022')

# 进行union分析
arcpy.analysis.Union([out_result,out_result_23,out_result_22], out_result_X)



# 计算建设用地面积 CZCLX不为空 且 DLBM2018,DLBM2009都是建设用地的,为建设用地
jsyd_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s AND DLBM2009 IN %s" %( DL_SD_JSYD, DL_ED_JSYD,DL_ED_JSYD)
jsydzmj=GetArea(out_result_X,jsyd_where) + ybp_area
# print("建设用地总面积为:" + jsydzmj)

#计算09-2-1  CZCLX不为空 且 DLBM2018 是建设用地 且 DLBM2009 是其他农用地
r_09_2_1_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s AND DLBM2009 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_QTNYD)
r_09_2_1=GetArea(out_result_X,r_09_2_1_where)
# print("09-2-1面积为:" + r_09_2_1)

#计算09-2-2  CZCLX不为空 且 DLBM2018 是建设用地 且 DLBM2009 是耕地
r_09_2_2_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s AND DLBM2009 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_GD)
r_09_2_2=GetArea(out_result_X,r_09_2_2_where)
# print("09-2-2面积为:" + r_09_2_2)

#计算09-2-3  CZCLX不为空 且 DLBM2018 是建设用地 且 DLBM2009 是未利用地
r_09_2_3_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s AND DLBM2009 IN %s" %(DL_SD_JSYD,DL_ED_JSYD,DL_ED_WLYD)
r_09_2_3=GetArea(out_result_X,r_09_2_3_where)
# print("09-2-3面积为:" + r_09_2_3)

#计算18-1  CZCLX不为空 且 DLBM2018是其他农用地
r_18_1_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s " %(DL_SD_JSYD,DL_ED_QTNYD)
r_18_1=GetArea(out_result_X,r_18_1_where)
# print("18-1面积为:" + r_18_1)

#计算18-2  CZCLX不为空 且 DLBM2018是耕地
r_18_2_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s " %(DL_SD_JSYD,DL_ED_GD)
r_18_2=GetArea(out_result_X,r_18_2_where)
# print("18-2面积为:" + r_18_2)

#计算18-3  CZCLX不为空 且 DLBM2018是未利用地
r_18_3_where="(CZCLX <> '' OR DLBM IN %s) AND DLBM2018 IN %s " %(DL_SD_JSYD,DL_ED_WLYD)
r_18_3=GetArea(out_result_X,r_18_3_where)
# print("18-3面积为:" + r_18_3)

#计算1  CZCLX为空,DLBM是其他农用地
r_1_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_QTNYD)
r_1=GetArea(out_result_X,r_1_where)
# print("1面积为:" + r_1)

#计算2  CZCLX为空,DLBM是耕地
r_2_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_GD)
r_2=GetArea(out_result_X,r_2_where)
# print("2面积为:" + r_2)

#计算3  CZCLX为空,DLBM是未利用地
r_3_where="CZCLX = '' AND DLBM IN %s " %(DL_SD_WLYD)
r_3=GetArea(out_result_X,r_3_where)
# print("3面积为:" + r_3)

# 计算6 CZCLX为空,CZCLX_1为空,DLBM_1为耕地
r_6_where="CZCLX = '' AND CZCLX2022 = '' AND DLBM IN %s AND DLBM2022 IN %s " %(DL_SD_QTNYD,DL_SD_GD)
r_6=GetArea(out_result_X,r_6_where)
# print("6面积为:" + r_6)

#计算9-1-2 CZCLX为空,CZCLX_1不为空,DLBM_3为耕地
r_9_1_2_where="CZCLX = '' AND (CZCLX2022 = '' OR DLBM2022 IN %s ) AND DLBM IN %s AND DLBM2022 IN %s AND DLBM2009 IN %s " %(DL_SD_JSYD,DL_SD_QTNYD,DL_SD_JSYD,DL_ED_GD)
r_9_1_2=GetArea(out_result_X,r_9_1_2_where)
# print("9-1-2面积为:" + r_9_1_2)
print("退地类算法")
print("耕地面积为:%s" %(r_2+r_6+r_9_1_2+r_18_2+r_09_2_2) ) 
print("合计其他农用地面积:%s" %(r_1+r_18_1+r_09_2_1-r_6-r_9_1_2) ) 

print("建设用地总面积为:" + str(jsydzmj))
print("未利用地面积:%s" %(r_3+r_18_3+r_09_2_3) ) 
print ("总用地面积"+str(r_1+r_18_1+r_09_2_1-r_6-r_9_1_2+   r_2+r_6+r_9_1_2+r_18_2+r_09_2_2+    r_3+r_18_3+r_09_2_3+   jsydzmj ))
a_time=time.time()
print ("一共消耗%s秒" % str( a_time-f_time))


print("三调分析")

ed_gd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_GD)
ed_gd=GetArea(out_result_X,ed_gd_sql)
print ("耕地总面积为:%s" %str(ed_gd))    

ed_qtnyd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_QTNYD)
ed_qtnyd=GetArea(out_result_X,ed_qtnyd_sql)
print ("其他农用地总面积为:%s" %str(ed_qtnyd))

ed_jsyd_sql="(CZCLX <> '' OR DLBM IN %s)" %(DL_SD_JSYD)
ed_jsyd=GetArea(out_result_X,ed_jsyd_sql)
print ("建设用地总面积为:%s" %str(ed_jsyd+ybp_area))

ed_wlyd_sql="CZCLX = '' AND DLBM IN %s" %(DL_SD_WLYD)
ed_wlyd=GetArea(out_result_X,ed_wlyd_sql)
print ("未利用地总面积为:%s" % str(ed_wlyd))   

a_time=time.time()
print ("一共消耗%s秒" % str( a_time-f_time))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值