基于C#编程的按位置及属性值自动合并图斑方法探究

2021-11-28 14:57徐剑松杨文总李果明
绿色科技 2021年5期
关键词:图斑林权语句

徐剑松,杨文总,李果明

(1.广西壮族自治区林业勘测设计院,广西 南宁 530011;2.广西裕博林业勘测规划设计有限公司,广西 南宁 530011;3.广西蒙山县林业局,广西 梧州 546700)

1 林业数据处理中合并图斑的应用场景

1.1 林权不动产调查

针对位置彼此相邻,且享有相同属性值的图斑。从几何上看,他们享有共同边,享有相同的属性。按照林权不动产调查的有关技术规程,几个相邻的不动产单位,并且属于同一林权权利人,应划为同一宗地[1]。这就要求将类图斑按照此规则进行合并。以往的林权调查,通常以小班作为调查单元,记载各小班的林权状况,小班就相当于不动产调查中的不动产单元。现有的林权数据大都为2009年林权制度改革的成果,林权证要逐步衔接到不动产证,就要将不动产单元归整到宗地[2]。

1.2 森林资源管理“一张图”

在绘制森林资源管理“一张图”小班后,会产生大量的碎斑(小面积图斑),需要对这些碎斑进行合并操作[3]。虽然可以使用ArcGIS软件中的消除工具进行合并,但这个工具只能进行有限的条件控制,往往会将一些本应保留的图斑也合并了。若要精准合并图斑,必须将此工具进行功能拓展,而运用C#语言进行功能拓展是解决这一问难题的有效方案。

2 具体思路

2.1 找出具有邻接关系的图斑

根据图斑的空间位置信息判断图斑的位置关系,通过循环语句(搜索游标)遍历矢量数据的所有图斑,再利用ArcGIS Engine提供的判断图斑之间位置关系的接口--IRelationalOperator,该接口支持判断的空间关系类型包括Contains(包含)、Crosses(相交)、Equals(相等)、Overlaps(重叠)、Touches(相接)等[4],采用该接口的Touch方法,输入比对要素的几何信息(IFeature.Shape)作为参数,可判断两个图斑是否具有相邻位置。

2.2 判断邻接图斑是否符合合并条件

识别出当前图斑的所有相邻图斑后,遍历读取该图斑属性表相应字段的值,通过比较运算符确定该邻接图斑是否符合合并条件。使用流程控制语句中的分支语句,使符合合并的条件图斑进入下一处理流程。当符合合并条件的相邻图斑为2个及以上时,推荐的做法是创建一个要素列表保存所有符合合并条件的相邻图斑,后续的合并、删除要素都可以通过操作列表轻松实现。

2.3 合并前处理

经过以上两步的位置甄别和属性值比对,已经获得符合合并条件的图斑,合并操作需要包含在编辑业务流中,因此在执行操作前,要先启动编辑工作流程,需要用到IEngineEditor接口,该接口用于开启编辑对象的方法为StarEditing,需要传入IMap和IWorkspace2个参数。

2.4 合并图斑

ArcGIS Engine合并操作,相当于用的ArcMap图形操作界面的编辑器下的合并(Merge)功能,但又有所不同。合并图斑用到的是ITopologicalOperator2接口,应在合并前要预先创建一个空要素来保存结果图斑,创建要素使用IFeatureClass接口的CreateFeature方法。调用ITopologicalOperator2接口的Union方法,将两个同维度的几何对象合并为单个几何对象[5],其参数为被合并图斑的几何信息,再使用赋值语句将结果赋值给预先创建的空要素。

2.5 删除被合并的图斑

由于图斑合并使用的Union方法的功能是产生新的图斑,再利用参与合并的图斑边界生成的新图斑。该过程本质上是新增了一个图斑,对原来的图斑未做处理。要达到ArcMap图形操作界面的合并功能效果,还需要在合并图斑后,把参与合并的图斑删除,否则要素类会存在重叠。删除要素使用IFeature接口的Delete方法。

2.6 保存编辑

在编辑操作中,所有的编辑操作在没有保存之前都被保存在内存中,只有执行保存操作,才能把所有的编辑结果保存到文件中[6]。停止编辑、保存编辑内容的方法均在IWorkspaceEdit接口下,停止编辑方法为StopEditOperation;保存编辑的方法为StopEditing,该方法需要传入一个参数,“true”表示保存,“false”表示不保存。

3 程序编写

以Microsoft的可视化开发环境Visual Studio作为开发工具,采用面向对象的软件开发语言C#创建一个项目,并在扩展项引入ArcObjects。

关键代码:

pWorkspaceEdit.StartEditing(true);

pWorkspaceEdit.StartEditOperation();

for (inti = 0; i

{

IFeatureCursorpFeatureCursor = pFeatureClass.Search(null, false);

IFeaturepFeature = pFeatureCursor.NextFeature();

IGeometryCollectiongeometryBag = newGeometryBagClass();

ITopologicalOperator2 topoOperator = null;

IGeometrygeometryMax = null;

IGeometrygeometryOther = null;

if (LstOther.Count> 0)

{

geometryMax = maxFeature.Shape;

IGeometrygeometryNext = null;

IFeatureunionedFeature = pFeatureClass.CreateFeature();

IGeometryunionedGeometry=null;

for (int j = 0; j

{

geometryNext = LstOther[j].Shape;

if (unionedGeometry != null)

{topoOperator = (ITopologicalOperator2)unionedGeometry;

}

unionedGeometry = topoOperator.Union(geometryNext);

pWorkspaceEdit.StopEditOperation();

pWorkspaceEdit.StopEditing(true);

4 结论与建议

借助C#语言编程及ArcGIS Engine提供的组件,可以让图斑之间的合并操作变得简单、智能,并可广泛应用于林业数据处理工作中。对需要合并的600个图斑进行测试,使用本文所述方法,耗时3 min,正确率100%;而采用传统的手动合并方法操作,则需要2 h,且图斑数量增多后,容易出现合并错误。

合并图斑有许多需要注意的细节,建议合并前预先保存被合并图斑的属性值,完成合并后再对结果图斑赋值,使结果图斑属性与合并前某一图斑属性一致。若不设置属性值,结果图斑将只保留图形,属性值为空。另外,在合并后要加上保存的操作,才能成功合并图斑。设置完属性值后,也要使用store方法保存。

猜你喜欢
图斑林权语句
地理国情监测中异形图斑的处理方法
新安县有序开展卫星遥感监测图斑核查工作
遥感影像提取图斑中狭长结构的探测与融解方法
土地利用图斑自动检测算法研究
林权供求信息
林权供求信息
林权供求信息
林权供求信息
基本算法语句
我喜欢