- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于LIDAR数据生成数字表面模型算法研究
基于LIDAR数据生成数字表面模型算法研究卓中文(河海大学地球科学与工程学院,南京)摘要:激光雷达(LIDAR)数据是一种新型数据源,它产生的是高密度点云数据。为了将这些数据构建成数字表面模型,我将阐述计算格网边长,差值计算高程,以及输出数据等方面的内容。关键词:激光雷达;数字表面模型;插值算法引言基于规则格网的数字地面模型首先对研究区域在二维平面上进行规则格网划分(格网大小取决于DEM应用目的),形成整个区域的格网空间结构,然后利用分布在格网周围的地形采样点内插计算格网点的高程值,最后按一定的格式输出,形成该地区的格网DEM。DEM建立的关键环节是格网点上值的内插计算[1]。激光扫描系统所获得的数据被称为三维点云,他包含有比2. 5 维表面模型更多的信息,如目标回波强度信息、地物类别信息等,而不仅仅是高程信息,以及与每一点高程信息相关的位置信息[2]。2 算法简介2.1 格网边长计算方法格网边长计算步骤如下:(1)统计构网区域内离散点的数目总合zbNum,根据其最小外包矩形MBR(xRang,yRang)求出该区域的总面积s1,由此计算出数据密度D=s1/zbNum[3]。(2)根据MBR区域的数据密度 D以及子块内所要求具有的离散点平均数目aNum求出子块面积s2 ,最后求出格网边长blockSize以及格网的行列(rNum ,cNum)数目。double blockSize = rNum =Convert.ToInt32( Math.Floor(xRange / blockSize + 1))+1cNum =Convert.ToInt32( Math.Floor(yRange / blockSize + 1))+12.2 利用反距离差值算法计算格网节点高程首先介绍反距离差值算法。设空间待插点为 P( X0 , Y 0 , Z0) , P 点邻域内有已知散乱点Q i( Xi , Y i , Zi) , i = 1 ,2 , …, n ,利用距离反比插值对 P点的属性值 Z0进行插值。其插值原理是待插点邻域内已知散乱点属性值的加权平均,权的大小与待插点与邻域内散乱点之间的距离(此处记为di)有关,是距离的 k(0 ≤k ≤2)次方的倒数,此处我取k=2。即:再介绍一下分块索引算法。分块索引就是在节点附近找已分块中的点,找出这些点来加权计算该节点的高程。分块索引建立经过以下几步:构建链表,存储每个规则格网块中的节点。用数组lastPt存储格网块中遍历的最后一个点的索引,用数组ptId存储格网块中前一个离散点的索引。for (int m = 0; m zbNum; m++)//组织每个网格中的点的链表{int i = Convert.ToInt32(Math.Floor((zb[m, 0] - xMin) / blockSize ));int j = Convert.ToInt32(Math.Floor((zb[m, 1] - yMin) / blockSize ));ptId[m] = lastPt[i, j];lastPt[i, j] = m;}搜索节点周围四个格网块中的节点,假如其中没有和节点重合的离散点,且符合一定的范围,就将这些点差值计算此节点的高程。for (int r = i; r i + 2; r++) {for (int c = j; c j + 2; c++) { k = lastPt[r, c];do {if ((zb[k, 0] = gridPts[id, 0] - s3) (zb[k, 0] = gridPts[id, 0] + s3) (zb[k, 1] = gridPts[id, 1] + s3) (zb[k, 1] = gridPts[id, 1] - s3))//在节点周围的一定范围内选点内插 {double dx = zb[k, 0] - gridPts[id, 0];double dy = zb[k, 1] - gridPts[id, 1]; num++; d = Math.Sqrt(dx * dx + dy * dy);if (d == 0) {gridPts[id, 2] = zb[k, 2]; b = false;break;
文档评论(0)