- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面积排序法对批量多边形净面积计算
面积排序法对批量多边形净面积计算 摘 要:在批量多边形净面积计算中,按毛面积进行排序,从毛面积最小多边形开始处理计算,可以高效、准确的计算多边形的净面积。
关键词:毛面积 净面积 面积排序
中图分类号:P271 文献标识码:A 文章编号:1672-3791(2012)11(a)-0033-02
在地籍调查、工程测量等工作中,经常需要批量计算多边形的净面积(多边形毛面积是指本多边形拐点所围成的面积;多边形净面积是指多边形的毛面积扣除其内部全部岛的净面积。多边形内部无岛时毛面积和净面积相等)。如果孤立的随机的逐个多边形的净面积计算,即使采用编程方式进行,编程过程也会变得较为复杂。如图1,预计算多边形A的净面积,首先获得多边形A的毛面积,通过搜索可以获取多边形A内有3个岛,因为不知道每个岛的净面积是否已计算,则需要计算每个岛的净面积,计算每个岛的净面积时还要考虑其内部是否还有岛,如此循环、递归下去,编程的难度偏大,程序的运行效率也会较低。
1 多边形毛面积排序法进行净面积计算的原理
在对多变形面积进行计算前,多边形是经过拓扑检查的,即多边形之间的关系只存在包含、邻接和相离的关系,不存在多边形相交或重复的情况。在多边形净面积计算前,计算每个多变形的毛面积,按毛面积的大小对多边形进行排序。在计算多边形的净面积时,从面积最小的多边形开始计算,依次进行。在计算一个多边形时,搜索其内部的多边形,读取每个内部多边形的净面积,并求取内部多边形的净面积之和,则本多边形的净面积为本多边形毛面积减去其内部多边形的净面积之和,然后将本多边形的净面积作为本多边形的属性,赋值在本多边形上。采用本方法计算多边形净面积时,不用考虑其内部多边形是否还存在岛,只要简单读取其内部多边形的净面积即可,因为本多边形内部的多边形,面积一定比本多边形要小,所以其一定在本多边形净面积计算之前就已经计算了净面积,直接读取,无需再计算,即使其内部还用多层嵌套。如图1中,预计算多边形C的净面积,首先计算多边形C的毛面积,因其内部没有岛,所以其毛面积即为净面积,作为属性赋值给其本身;预计算多边形B的净面积,首先计算多边形B的毛面积,因多边形B的毛面积比多边形C的毛面积大,所以多边形C的毛面积必然在多边形B之前计算,所以直接扣除其内部岛多边形C的净面积,作为属性赋值给其本身;预计算多边形A的净面积,首先计算多边形C的毛面积,因多边形B、C、D的净面积已经计算,所以直接扣除其内部岛多边形B、C、D的净面积之和,作为属性赋值给其本身。
2 多边形毛面积排序法进行净面积计算程序设计原理
根据这一原理,采用VB2010和AutoC AD2008设计了多边形净面积计算程序,主要步骤如下。
Dim Reg1 As RegAppTable = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite)
Dim App1 As New RegApp TableRecord
If Not Reg1.Has(”Area”) Then
App1.Name=“Area”
Reg1.Add(App1)
trans.AddNewlyCreatedDBObject(App1,True)
End If
Dim Val1 As TypedValue=New TypedValue(DxfCode.Start,”Polyline,Lwpolyline”)
Dim Val() As TypedValue={Val1}
Dim Filter1 As New SelectionFilter(Val)
Dim Optsel As New PromptSelectionOptions
Dim Ss1,Ss2 As SelectionSet
Dim Res1 As PromptSelectionResult =Ed.GetSelection(Optsel,Filter1)
If Res1.StatusPromptStatus.OK Then
Exit Sub
End If
Ss1=Res1.Value
Dim I As Long
Poly2d=CType(trans.GetObject(PolyId1.Item(I),OpenMode.ForRead), Polyline2d)
Len1=Poly2d.Length
Catch
End Try
Try
Poly=CType(trans.GetObject(PolyId1.Item(I),OpenMode.ForRead), Polyline)
Len
文档评论(0)