本来我是有可能完全不做三调的相关工作,三调主要还是抠图与地物类型判读占最大比重工作的。扫尾的时候,上面扔给了我一项任务,就是让我赶紧弄出个计算线性图斑宽度的工具。
我此时的想法就是提取出中心线,等间距取点作近邻分析,求得平均值*2作为该线状地物的平均宽。与此同时,正好在用FME,发现有一个线性面中心线提取的转换器——centerlinereplacer。不妨试试效果如何,结果出来发现中心线像树枝一样长出很多分叉,看着很心烦。然后我就开始找找arcgis方面的资料以及论文等,中心线提取是否有佳法。折腾许久,得出很多的分析:arcgis的双线可以提取,但是前提是两端必须是有开口的,而不是闭合(可以理解没有开口,闭合一词也许不准确)的。然后想着矢量转栅格,利用栅格二值化提取,但是没法避开arcscan,这是栅格矢量化交互使用的,而我的目的是不能使用频繁人工操作。接着是多边形分割,这也是论文里所说的多边形三角化理论。我尝试了在arcgis里进行多边形边界加密,然后提取特征折点构建三角网,还是不好,最佳控制点的位置太难找了,如何让一个多边形比较完美的分割尽可能让所有的三角形的三边接近?能力有限,有很多的基础算法几乎都是空白,没有超常的数学理论以及数据结构编程基础做不出来,最后只能转向最初的方法了。
最初的方法就是如何去除悬挂线,这需要统计数据及知识经验综合判断了。悬挂线有长有短,通常比较小的悬挂线是不要保留的,要删除,保留较长的悬挂线。先介绍下悬挂线的特点:1、比较奇怪的线性地物形状生成的中心线比较复杂,既有很短的悬挂线,又有比较长的悬挂线(如:河流有很多岛,几条道路合并在一起,造成很多十字交叉的形状)。2、也有不少的形状比较规则,这种生成的中心线效果比较好。根据这些特点,我就开始设计去除悬挂线的方法。
总体思路:1、将提取的中心线打撒拆成单一的线,相交处断开。2、提取出单一线的起点与终点,利用相交处的点是重复的特点可以去掉某些悬挂线,因为悬挂线必有一端是只有一个相交的节点。3、原始面里生成的只有起点和终点相交的线肯定是提取最好的效果,因此把它保留下来,简而言之就是面内只有一条线且线只有起止点。然后面内的线数量大于1的,考虑到上面所说第一点的悬挂线特点,可以根据长度阈值过滤掉一些微短线。上面的人说小于20米的悬挂线可以去掉,所以我就以这个长度设置一些条件。通过空间连接获得面内相交的线的数量以及线与节点相交的数量,线小于20米且与线相交的起点数量为1或终点为1删掉。4、有些大于20米的有必要删除的悬挂线没办法再进一步根据条件去删除,只能后期人工处理与此步骤效果不佳的数据了,一般就是那些形状比较奇怪,具体如何描述就不细说了,可以通过上下判断下是否明白。5、最后是等间距线上取点,我用的是5米间隔,样本尽可能多,减小那些异常数据引起的误差吧,利用近邻分析取得到面砖线后的最短距离,这只是一半还要*2,分组求平均值作为最后的平均线宽。
最后,中心线提取论文方法还有很多写在论文还没来得及看太多。这个的确是个比较有意思的研究,论文毕竟不是技术文档或博客,自己想要进一步研究确实难啊。各位对这个中心线提取有兴趣的,如果有更好的理论或者方法可以相互交流!