(一)建筑物多边形化简系列——去除噪点环
发布日期:2022-02-10 11:37:01 浏览次数:30 分类:技术文章

本文共 1978 字,大约阅读时间需要 6 分钟。

由于本人最近在进行建筑物数据处理的项目,遇到了较多的问题,同时也收获了很多知识。所有打算写一个建筑物处理的系列博客。

要处理建筑物多边形,首先得理解结构关系,这是所有实现处理的基础。建筑物多边形是由一条条封闭的环(线状)组成,环是由一组首尾相同的点组成,所以对建筑物多边形的处理实质是对环和点处理。

实际项目中,所给的数据是非常凌乱的,杂质非常多。下图是初始的建筑物多边形数据,我们可以发现:局部有大量黑色点,放大发现并不是黑色,而是多边形中环太小太多,数据量大且杂,分布非常广泛。另外程序运行速度非常慢。这两点说明需要对数据进行过滤处理,即对噪点环进行过滤删除处理。

局部放大发现黑点是小环,即噪点环。

1)噪点环

顾名思义就是图上的噪点,只不过噪点不是点,而是一个个小环,这些环特点为:面积小;数量多且分布广;明显不是建筑物多边形;这些小环与正常的建筑物的环实质上只有面积上的差别,小环面积很小。

要进行建筑物化简得到最终成功,必须先除去这些噪点环,否则由于环数量太大导致程序运行缓慢甚至卡死。

2)去除的思路

上面提到这些小环与正常的建筑物的环实质上只有面积上的差别,小环面积很小。所以可以设置一个面积阈值,把小于这个阈值的环一律舍弃,保留大于面积阈值的环。阈值的设定需要根据实际的项目要求。

3)代码实现

使用MFC和C++,VS2010,主体算法如下

// zf,按面积过滤,0701void CGeoPolygon::ObjectFilterByArea(void){    //按面积    vector
temp; //定义数组,存噪点环 if(circleAreaList.size()!=0) vector
().swap(circleAreaList); //数组设定为空 for(int i = 0;i
getArea(circles[i]->pts); //获取环的面积 circleAreaList.push_back(circlearea); if(circlearea<=100000) temp.push_back(i); //*****设定阈值*****,当面积小于阈值,噪点环数组添加该数值 } vector
tempPolyline; //定义新的无噪点环的环数组 if(tempPolyline.size()!=0) vector
().swap(tempPolyline); //防止环数组不为空 for(int j = 0;j

 其中getArea函数是计算每个环的面积,输入的是每个环的点集。

//zf,计算某个环的面积double CGeoPolyline::getArea(vector
pts){ double minY = this->getMinY(pts); double tempArea = 0; double area = 0; int size = pts.size(); for (int i = 0; i < size; i++) { int j = i + 1; if (i == size - 1) j = 0; double h = pts[j]->Getx() - pts[i]->Getx(); double y1 = pts[i]->Gety() - minY; double y2 = pts[j]->Gety() - minY; tempArea = (y1 + y2)*h/2; area = area + tempArea; } if (area < 0) area = -area; return area;}

isContained函数判断某个数是不是在数组中,见下:

// 判断某个数是不是在数组中,zf,0717bool CGeoPolygon::isContained(vector
temp, int i){ bool answer = false; for(int j = 0;j

4)实验结果,

去除噪点环之前

去除噪点环之后

去除(过滤)前

 去除(过滤)后

5)小结

去掉(过滤)噪点环之后,发现图面明显变得清爽,同时由于噪点环的去除,总体环数量大幅减少,后续程序运行和各种操作也变得快捷。

转载地址:https://blog.csdn.net/Fan_z_0802/article/details/81113400 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(二)建筑物多边形化简系列——多边形点数化简
下一篇:shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2023年05月22日 11时35分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

Android删除相册得最近拍得一张图片 2019-05-16 12:29:44
MediaStore 与Media.EXTERNAL_CONTENT_URI 2019-05-16 12:29:43
Android文件管理器与media数据库的同步问题 2019-05-16 12:29:42
java 可重启线程及线程池类的设计 2019-05-16 12:29:42
ExecutorService对象的shutdown()和shutdownNow()的区别 2019-05-16 12:29:41
Android 建议SQLite操作使用rawQuery方法 2019-05-16 12:29:41
上传或下载当文件名包含有特殊字符"#"的处理 2019-05-16 12:29:40
Android 向多媒体数据库增加音频文件 2019-05-16 12:29:40
Android MediaStore扫描 & 向MediaStore中插入文件记录 2019-05-16 12:29:39
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件 2019-05-16 12:29:38
Android游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途! 2019-05-16 12:29:38
Android使用代码动态创建Selector(网络图片) 2019-05-16 12:29:37
Dialog常见问题 2019-05-16 12:29:37
TextView图文混排图片被截断的问题以及Android省略号只有一个点的问题 2019-05-16 12:29:36
Android SurfaceView运行机制详解—剖析Back与Home按键及切入后台等异常处理! 2019-05-16 12:29:36
Android 休眠状态对Camera预览的影响 2019-05-16 12:29:35
android自定义相机黑屏问题 2019-05-16 12:29:34
Android adapter局部更新 2019-05-16 12:29:34
Android 实时视频采集—Cameara预览采集 2019-05-16 12:29:33
Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 2019-05-16 12:29:32