1.一种山体边界自动提取方法,其特征在于:包括以下步骤:(1)获取山体边界面、山脊线和山谷线数据;
(2)基于山脊线数据,关联山脊线经过的面,初次形成山体边界;
(3)查找与山体边界具有邻接关系的面,并以山谷线为约束,关联符合条件的面;
(4)将规则约束条件外的面进行关联,最终形成地理尺度的山体边界。
2.根据权利要求1所述的山体边界自动提取方法,其特征在于:步骤(1)通过加载DEM数据,运用ArcGIS并基于地形表面水文分析原理获取矢量的图层数据,针对相对破碎的山体边界面图层,运用ArcGIS中的消除工具,以字段Area阈值,消除小于该阈值的图斑,不断调整阈值的大小,经多次消除,得到山体边界面要素图层。
3.根据权利要求2所述的山体边界自动提取方法,其特征在于:步骤(2)包括:(2-1)加载山体边界面要素图层、山脊线线要素图层和山谷线线要素图层,分别得到山体边界面要素集合Mount={mti|i=1,2,…,m}、山脊线线要素集合RidgeL={rli|i=1,
2,…,n}和山谷线线要素集合ValleyL={vli|i=1,2,…,r};
其中,mti表示第i个面要素,m为面要素的个数;rli表示第i个山脊线线要素,n为山脊线线要素的个数;vli表示第i个山谷线线要素,r为山谷线线要素的个数;
(2-2)遵循山脊线线要素个数n决定地理尺度的山体边界面要素个数的原则,对集合Mount中的每一个面要素mti按以下步骤进行属性添加与赋值:①给面要素mti添加属性Id,Id表示山脊线编号,初始化为-1;
②读取集合RidgeL中的线要素rli包含的点要素集合RLPt={rpj|j=1,2,…,a},rpj表示线要素rli上第j个点要素,a为点要素的个数;
③判断集合RLPt中的点rpj是否在面要素mti内,当存在任一点符合条件时,修改mti的编号属性Id为rli的下标i;
④循环执行步骤②-③,直至集合RidgeL中的线要素遍历完毕;
(2-3)根据编号属性Id的不同,对面要素mti分组:遍历集合Mount中的每一个面要素mti,当mti的Id等于-1时,将mti加入面要素集合NoUnionM;当Id等于1时,将mti加入面要素集合UnionS1,当Id等于2时,将mti加入面要素集合UnionS2,……,当Id等于n时,将mti加入面要素集合UnionSp;遍历完毕,得到集合NoUnionM={nmi|i=1,2,…,q}和以集合为元素的集合SET={UnionS1,UnionS2,…,UnionSp};
其中,nmi表示不符合关联条件的面要素,q为面要素的个数,UnionSp表示具有相同Id的面要素集合,p为面要素集合的个数;
(2-4)面要素关联:对SET中的每一个面要素集合UnionSp,进行面要素合并,形成新的面要素,得到关联后的面要素集合UnionM={umi|i=1,2,…,g},umi表示关联后的面要素,g为面要素的个数。
4.根据权利要求3所述的山体边界自动提取方法,其特征在于:步骤(3)包括:(3-1)给集合NoUnionM中的一面要素nmi添加属性Fid、LineC和Dir;
其中,Fid表示山谷线编号,初始化为-1,LineC表示判断nmi相对山谷线位置的有向线段,Dir表示nmi在有向线段的左右侧,Dir取值为“left”或“right”;
(3-2)读取集合ValleyL中的一线要素vli包含的点要素集合VLPt={vpj|j=1,2,…,b},vpj表示线要素vli上第j个点要素,b为点要素的个数;
(3-3)循环取集合VLPt中的相邻两点vpj和vpj+1,若有向线段 与面要素nmi相交,将 加入有向线段集合LineSeg,得到集合其中, 表示第k个有向线段,sp为有向线段的首点,ep为有向线段的尾点,c为有向线段的个数;
(3-4)对集合LineSeg的要素个数c进行以下判断:若c等于0,则执行步骤(3-2)-(3-3),继续计算有向线段;
若c等于1,修改nmi的属性,Fid为vli的下标i,属性LineC等于有向线段 属性Dir的值按步骤(3-5)计算;
若c大于1,修改nmi的属性,Fid为vli的下标i,属性LineC等于集合LineSeg中有向线段的首点sp和有向线段 的尾点ep组成的有向线段 属性Dir的值按步骤(3-5)计算;
(3-5)计算属性Dir的值:
读取面要素nmi包含的点要素集合NUnionPt={npj|j=1,2,…,d},npj表示面要素nmi上第j个点要素,d为点要素的个数;
循环取集合NUnionPt中的点npj,采用判断点在直线左右侧的方法,根据公式(1)计算有向线段 的首尾点与点npj的面积量S(sp,ep,npj);
S(P1,P2,P3)=(x1-x3)×(y2-y3)-(y1-y3)×(x2-x3) (1)若S大于0,将点npj加入点要素集合LeftPt;反之,将点npj加入点要素集合RightPt;
设集合LeftPt、RightPt的点要素个数分别是e、f,若e小于3或f小于3,则根据公式(2)计算Dir的值;若e、f均不小于3,则根据公式(3)计算Dir的值;
其中,Se、Sf分别表示集合LeftPt、RightPt中的点所构成面的面积;
(3-6)循环执行步骤(3-1)-(3-5),直至集合NoUnionM中的所有面要素完成属性的添加与赋值;
(3-7)基于规则约束条件,对经属性赋值后的面要素集合NoUnionM按以下步骤递归:
1)读取集合UnionM中的一面要素umi,将其加入面要素集合TmpPoly;
2)遍历集合NoUnionM,若存在面要素nmi与umi是邻接关系,按以下步骤计算几个约束参数,否则,跳转步骤1):a)读取nmi的编号属性Fid,若Fid等于-1,则不计算d)、e);
b)统计nmi与集合UnionM中的面要素具有邻接关系的总面要素数count,若count等于1,不计算c),若Fid不等于-1且count不等于1,不计算e);
c)比较nmi与集合UnionM中的面要素具有邻接关系的所有面要素,找到存在最大公共边界的面要素um';
d)读取nmi的属性值Dir,采用nmi的属性值LineC,计算umi的属性值Dir';
e)计算nmi与umi的公共边界长度占nmi周长的比例scale;
3)判断约束参数若符合以下四个约束条件之一,则执行操作:将nmi加入集合TmpPoly,并从集合NoUnionM中移除nmi;
条件1:Fid等于-1且count大于1且um'等于umi;
条件2:Fid等于-1且count等于1;
条件3:Fid不等于-1且count大于1且um'等于umi且Dir'等于Dir;
条件4:Fid不等于-1且count等于1且scale不小于0.5且Dir'等于Dir;
4)面要素关联:若集合TmpPoly的面要素个数大于1,则对其进行面要素的合并,形成新的面要素,并替换原来的面要素umi,置空TmpPoly;
5)循环执行步骤1)-4),直至集合UnionM中的面要素umi遍历完毕。
5.根据权利要求4所述的山体边界自动提取方法,其特征在于:步骤(4)包括:(4-1)循环计算出集合NoUnionM中的面要素nmi与集合UnionM中具有最大公共边界的面要素umi,记录umi的下标,得到下标集合Index={ink|k=1,2,…,w},w为集合NoUnionM中面要素的个数;
(4-2)按以下步骤进行面要素关联:
Ⅰ、读取集合UnionM中的面要素umi,将其加入面要素集合TmpFS;
Ⅱ、遍历下标集合Index,若umi的下标i等于ink,则将nmk加入集合TmpFS;
Ⅲ、将集合TmpFS中的面要素进行合并,形成新的面要素,将其加入面要素集合UnionM',TmpFS置空;
Ⅳ、循环执行步骤Ⅰ-Ⅲ,得到关联后的面要素集合UnionM'={um'i|i=1,2,…,h},um'i表示第i个山体边界面要素,h为面要素的个数,将集合UnionM'写入面要素图层。