公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx

上传人:b****4 文档编号:26908720 上传时间:2023-06-24 格式:DOCX 页数:44 大小:2.58MB
下载 相关 举报
公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx_第1页
第1页 / 共44页
公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx_第2页
第2页 / 共44页
公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx_第3页
第3页 / 共44页
公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx_第4页
第4页 / 共44页
公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx

《公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx》由会员分享,可在线阅读,更多相关《公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx(44页珍藏版)》请在冰豆网上搜索。

公益林小班与林地一张图小班融合后碎片处理思路肖玲0421.docx

公益林小班与林地一张图小班融合后碎片处理思路肖玲0421

 

公益林小班与林地一张图小班融合后碎片处理思路

 

肖玲

2015.1.12

1总体流程图

2

公益林小班处理

(1)目的:

只保留公益林区划界线,通过合并方式清除公益林界定界线。

(2)将公益林小班按森林类别、事权等级、林地所有权、林木所有权、国家级公益林保护等级、工程类别用disolve工具进行融合:

(3)融合后的图层命名为“公益林小班面522628_2014_Dissolve”。

(4)兑现面积处理:

a)将“公益林小班面522628_2014”图层生成点图层,图层命名为“公益林小班面522628_2014_FeatureToP”:

b)打开SpatialJoin工具,“公益林小班面522628_2014_Dissolve”图层SpatialJoin“公益林小班面522628_2014_FeatureToP”图层,新图层命名为“公益林小班面522628_2014_融合”。

i.首先清除点图层字段:

ii.按“+”键新增“兑现面积”字段,用于将融合后的公益林图斑的兑现面积值更新为其范围内原公益林小班面积之和:

iii.按右键菜单“AddInputField”给新增“兑现面积”字段赋值:

(5)“公益林小班面522628_2014_融合”图层增加“gyl_id”字段(Longinteger),且gyl_id=ObjectID:

(注:

操作视频无此步骤,需补充!

3叠加林地一张图小班

(1)利用union工具将“公益林小班面522628_2014_融合”叠加到林地一张图小班上:

林地年度变更小班面522628union公益林小班面522628_2014_融合。

(2)新生成的图层命名为“林地年度变更小班面522628_union”。

(3)利用MultiparttoSinglepart工具打散“林地年度变更小班面522628_union”图层中的多部件,新图层命名为“林地年度变更小班面522628_Union_Multip”。

(4)“林地年度变更小班面522628_Union_Multip”图层增加DJH(字段类型:

TEXT,文本型;长度:

17),并按以下代码赋值:

[XIAN]&[XIANG]&[CUN]&[XIAO_BAN]

(5)“林地年度变更小班面522628_Union_Multip”图层增加CUN_ID(字段类型:

TEXT,文本型;长度:

12),并按以下代码赋值:

[XIAN]&[XIANG]&[CUN]

(6)“林地年度变更小班面522628_Union_Multip”图斑分成三类:

一是DJH有值且为17位;二是DJH有值且为12位,这部分图斑为非林地图斑,无小班号;三是DJH为空字符串,这部分图斑为县界外补充的公益林图斑。

4对“双眼皮”碎斑进行筛选

(1)计算图斑外接矩形面积。

“林地年度变更小班面522628_union_Multip”图层增加maxX(X最大值)、minX(X最小值)、maxY(Y最大值)、minY(Y最小值)、area_envelope(外接矩形面积)、area_percent(图斑图形面积占外接矩形面积比率)字段,字段类型均为double:

其中:

maxX、minX、maxY、minY用以下方法赋值:

a)在工具箱打开CalculateField工具:

b)针对maxX、minX、maxY、minY在Expression输入框分别录入以下PYTHON_9.3语句:

maxX:

!

shape.extent.XMax!

minX:

!

shape.extent.XMin!

maxY:

!

shape.extent.YMax!

minY:

!

shape.extent.YMin!

然后用以下公式计算外接矩形面积和图斑图形面积占外接矩形面积比率:

area_envelope=([maxX]-[minX])*([maxY]-[minY])

area_percent=[SHAPE_area]/[area_envelope]

(2)通过属性查找工具筛选出area_percent(图斑图形面积占外接矩形面积比率)<0.3(该阈值可根据实际情况调整)的图斑,这种图斑一般是细长条形的,其中就包括了“双眼皮”图斑。

(3)“林地年度变更小班面522628_union_Multip”图层增加isSelected字段,字段类型ShortInteger,将选中的图斑赋值为1,值为1的图斑为待合并的图斑(注:

其中包含了合理区划的细长形小班,需在接下来的操作中进行剔除)。

(4)对“林地年度变更小班面522628”重复

(1)~

(2)步骤,目的在于进一步排除正常的细长条形图斑。

(5)筛选出“林地年度变更小班面522628”area_percent(图斑图形面积占外接矩形面积比率)<0.3的图斑(注:

0.3不是固定值,可根据需要调整为任何小于0.5的数值):

(6)将(5)选择结果导出为面图层,命名为“林地年度变更小班面522628细长小班_30”:

(7)通过空间位置查询,筛选出与“林地年度变更小班面522628细长小班_30”重叠的图斑:

(8)再从(7)的结果中进一步筛选出isSelected=1的图斑,将其值改为null,以达到排除正常图班的目的:

5筛选出小面积碎斑

(1)选择图形面积小于“公益林小班面522628_2014_融合”图层最小面积(以126m2为例)的碎片(注:

126m2不是固定值,可根据具体情况调整,在该选择结果中注意公益林小班的最小上图面积为67m2,若设置筛选的最小面积大于“公益林小班面522628_2014_融合”图层最小面积,需人工排查这部分小面积的公益林小班,从该选择结果中剔除):

(2)将选中图斑的isselected字段赋值为1:

6对筛选出的碎斑在相邻图斑中选择相同地籍号的图斑进行定向合并(按属性进行合并)

(1)“林地年度变更小班面522628_union_Multip”图层增加“tb_id”字段,字段类型为longinteger,将OBJECTID的值赋给tb_id,以保证在后面的操作中,每个图斑都拥有一个唯一编号,在确定碎斑的合并方向后,会根据图斑的唯一编号进行合并:

(2)通过属性查询将“林地年度变更小班面522628_union_Multip”图层isselected字段为1的图斑选中,并将选中的图斑导出为新图层,命名为“selected”:

(3)通过属性查询将“林地年度变更小班面522628_union_Multip”图层isselected字段不为1的图斑选中,并将选中的图斑导出为新图层,命名为“unselected”:

(4)以上二步将已标识了不合并和待合并的图斑分成两部分,即“selected”图层和“unselected”图层。

(5)使用spatialjoin工具,将“selected”图层spatialjoin“unselected”图层,删除“unselected”图层字段,增加“near_tbid”、“near_DJH”和“near_CUN”字段,字段类型为TEXT(文本型),长度为255,并将这三个新增加字段的MergeRule设置为Join,Delimiter(分隔符)设置为“,”,以求出“selected”图层中的图斑在“unselected”图层中同一空间位置相邻图斑的唯一值(near_tbid)、地籍号(near_DJH)和村(near_CUN)序列,生成的图层命名为“selected_SpatialJoin”:

(6)分别在“near_tbid”、“near_DJH”和“near_CUN”字段上点击右键菜单,选择AddInputField菜单项,指定“unselected”图层中Join的字段,其中near_tbid对应unselected.near_tbid、near_DJH对应unselected.DJH、near_CUN对应unselected.CUN_ID:

(7)“selected”图层SpatialJoin“unselected”图层操作结果:

(8)分别在“unselected”和“selected_SpatialJoin”图层中增加tbid_dissolve字段,字段类型为text(文本型),长度为10,该字段的值为最后合并的依据:

(9)“selected_SpatialJoin”图层中tbid_dissolve字段运行以下VBA代码赋值,判断djh是否在near_DJH中存在,如果存在,将near_tbid对应位置的值赋给tbid_dissolve字段,即根据碎斑的合并方向调整tbid_dissolve的值:

dimserial()asstring

dimdjh()asstring

dimcun()asstring

dims_dissolveasstring

dimi_maxasinteger

s_dissolve="Null"

ifinstr([near_DJH],[DJH])>0then

serial()=split([near_tbid],",",-1,1)

djh()=split([near_DJH],",",-1,1)

i_max=ubound(djh)

fori=0toi_max

ifdjh(i)=[DJH]then

s_dissolve=serial(i)

exitfor

endif

nexti

else

ifinstr([near_CUN],[CUN_ID])>0then

serial()=split([near_tbid],",",-1,1)

cun()=split([near_CUN],",",-1,1)

i_max=ubound(cun)

fori=0toi_max

ifcun(i)=[CUN_ID]then

s_dissolve=serial(i)

exitfor

endif

nexti

else

s_dissolve=[tb_id]

endif

endif

(10)将“unselected”图层中的tbid_dissolve字段赋值为tb_id:

(11)将“unselected”图层进行备份,新图层命名为“unselected_bak”。

(12)使用APPEND工具将“selected_SpatialJoin”图层合并到“unselected”图层:

(13)对“unselected”图层根据tbid_dissolve字段利用Dissolve工具进行融合,新图层命名为“unselected_Dissolve”:

(14)将“unselected_bak”图层生成点图层,命名为“unselected_bak_FeatureToPoin”:

(15)利用Spatialjoin工具,将“unselected_bak_FeatureToPoin”图层属性联接到“unselected_Dissolve”面图层,MatchOption选择contains方式,新图层命名为“无碎片小班面”:

7公益林小班兑现面积平差

(1)编程实现平差思路:

计算相同“gyl_id”值的图斑shape_area面积之和,按该图斑shape_area占相同“gyl_id”值的图斑shape_area面积之和的比率,进行兑现面积平差。

(2)增加“GylZMj”字段(双精度型),用于计算相同“gyl_id”值图斑shape_area面积之和:

(3)增加“pcxs”字段(双精度型),用于计算相同“gyl_id”值图斑面积平差系统:

(4)增加“NewDxMj”字段(双精度型),用于计算平差后的兑现面积:

(5)在ACCESS中新建两个模块:

“1公益林图斑计算面积赋值”和“2公益林图斑兑现面积平差差值处理”,用于公益林小班被剖分后兑现面积的平差处理。

代码如下:

'1公益林图斑计算面积赋值

OptionCompareDatabase

OptionExplicit

SubupdateData()

DimcnnAsADODB.Connection

Setcnn=CurrentProject.Connection

DimstrsqlxxbAsString

DimrsXXBAsADODB.Recordset

SetrsXXB=NewADODB.Recordset

DimlngGylidAsLong

DimdouMjAsDouble

'

strsqlxxb="SELECTgyl_id,sum([Shape_Area])"

strsqlxxb=strsqlxxb+"FROM无碎片小班面WHEREnotgyl_id=0"

strsqlxxb=strsqlxxb+"GROUPBYgyl_id"

strsqlxxb=strsqlxxb+"ORDERBYgyl_id"

rsXXB.Openstrsqlxxb,cnn,adOpenForwardOnly,adLockBatchOptimistic

DimintXXBAsInteger

DoWhileNotrsXXB.EOF

lngGylid=rsXXB.Fields.Item(0).Value

douMj=rsXXB.Fields.Item

(1).Value

updateGylMjlngGylid,douMj

rsXXB.MoveNext

Loop

rsXXB.Close

SetrsXXB=Nothing

'2计算平差系数

updatexbpcxs

'3计算平差面积

updatexbpcmj

cnn.Close

Setcnn=Nothing

MsgBox"公益林图斑计算面积赋值结束!

",vbOKOnly,"提示"

EndSub

'1更新相同公益林图斑计算面积之和(即计算平差系数的分母)

SubupdateGylMj(gylidAsLong,sumMjAsDouble)

DimcnnXXBAsNewADODB.Connection

DimcmdxxbAsNewADODB.Command

SetcnnXXB=CurrentProject.Connection

DimrstAsNewADODB.Recordset

DimstrUpdateAsString

strUpdate="UPDATE无碎片小班面SETGylZMj="+Str(sumMj)+"WHEREgyl_id="+Str(gylid)

Withcmdxxb

.CommandText=strUpdate

.CommandType=adCmdUnknown

.ActiveConnection=cnnXXB

EndWith

Setrst=cmdxxb.Execute

cnnXXB.Close

Setcmdxxb=Nothing

SetcnnXXB=Nothing

EndSub

'2计算平差系数

Subupdatexbpcxs()

DimcnnXXBAsNewADODB.Connection

DimcmdxxbAsNewADODB.Command

SetcnnXXB=CurrentProject.Connection

DimrstAsNewADODB.Recordset

DimstrUpdateAsString

strUpdate="UPDATE无碎片小班面SETpcxs=[Shape_Area]/[GylZMj]"+"WHEREgyl_id>0"

Withcmdxxb

.CommandText=strUpdate

.CommandType=adCmdUnknown

.ActiveConnection=cnnXXB

EndWith

Setrst=cmdxxb.Execute

cnnXXB.Close

Setcmdxxb=Nothing

SetcnnXXB=Nothing

EndSub

'3计算平差面积

Subupdatexbpcmj()

DimcnnXXBAsNewADODB.Connection

DimcmdxxbAsNewADODB.Command

SetcnnXXB=CurrentProject.Connection

DimrstAsNewADODB.Recordset

DimstrUpdateAsString

strUpdate="UPDATE无碎片小班面SETNewDxMj=round([pcxs]*[兑现面积],1)"

Withcmdxxb

.CommandText=strUpdate

.CommandType=adCmdUnknown

.ActiveConnection=cnnXXB

EndWith

Setrst=cmdxxb.Execute

cnnXXB.Close

Setcmdxxb=Nothing

SetcnnXXB=Nothing

EndSub

*******************************************

'2公益林图斑兑现面积平差差值处理

OptionCompareDatabase

OptionExplicit

SubupdateData()

DimcnnAsADODB.Connection

Setcnn=CurrentProject.Connection

DimstrsqlxxbAsString

DimlngGylidAsLong

DimdouNewdxmjAsDouble

DimdouTbmjAsDouble

DimdouMjcAsDouble

DimstrStartAsString

strStart=Time

'

strsqlxxb="SELECTgyl_id,sum(NewDxMj),兑现面积"

strsqlxxb=strsqlxxb+"FROM无碎片小班面WHEREgyl_id>0"

strsqlxxb=strsqlxxb+"GROUPBYgyl_id,兑现面积"

strsqlxxb=strsqlxxb+"ORDERBYgyl_id,兑现面积"

DimrsXXBAsADODB.Recordset

SetrsXXB=NewADODB.Recordset

rsXXB.Openstrsqlxxb,cnn,adOpenForwardOnly,adLockBatchOptimistic

DimintXXBAsInteger

DoWhileNotrsXXB.EOF

lngGylid=rsXXB.Fields.Item(0).Value

douNewdxmj=Round(rsXXB.Fields.Item

(1).Value,1)

douTbmj=Round(rsXXB.Fields.Item

(2).Value,1)

douMjc=douNewdxmj-douTbmj

IfdouMjc<>0Then

updatexxblngGylid,douMjc

EndIf

rsXXB.MoveNext

Loop

rsXXB.Close

SetrsXXB=Nothing

cnn.Close

Setcnn=Nothing

MsgBoxstrStart+"开始,"+Str(Time)+"公益林图斑兑现面积平差差值处理结束!

",vbOKOnly,"提示"

EndSub

'公益林图斑兑现面积平差差值处理

Subupdatexxb(gylidAsLong,mjcAsDouble)

DimcnnXXBAsNewADODB.Connection

DimcmdxxbAsNewADODB.Command

DimstrUpdateAsString

SetcnnXXB=CurrentProject.Connection

'查找面积最大图斑

DimrsFindAsADODB.Recordset

SetrsFind=NewADODB.Recordset

DimstrFindAsString

strFind="SELECTgyl_id,Max(NewDxMj)ASxbmjMax"

strFind=strFind+"FROM无碎片小班面WHEREgyl_id="+Str(gylid)

strFind=strFind+"GROUPBYgyl_idORDERBYgyl_id"

rsFind.OpenstrFind,cnnXXB,adOpenForwardOnly,adLockBatchOptimistic

DimlngGylidAsLong

DimdouMaxMjAsDouble

lngGylid=rsFind.Fields.Item(0).Value

douMaxMj=Round(rsFind.Fields.Item

(1).Value,1)

'更新面积最大图斑兑现面积

DimrsMAsNewADODB.Recordset

strUpdate="UPDATE无碎片小班面SETNewDxMj="+Str(douMaxMj-mjc)+"WHEREgyl_id="+Str(gylid)

strUpdate=strUpdate+"ANDNewDxMj="+Str(douMaxMj)

Withcmdxxb

.CommandText=strUpdate

.CommandType=adCmdUnknown

.ActiveConnection=cnnXXB

EndWith

SetrsM=cmdxxb.Execute

cnnXXB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1