一个很好的批量绘制宗地图程序
周 翔 1 王海超 2 文茂华 3
1 长江空间信息技术工程有限公司(武汉)(湖北省武汉市 430000)
2 长江空间信息技术工程有限公司(武汉)重庆分公司(重庆市 402120)
3 长江空间信息技术工程有限公司(武汉)清江项目部(武汉市 430000)
摘要: 宅基地与集体建设用地确权登记发证项目在绘制完成地籍总图后要批量绘制宗地图,作者为了
解决这个问题开发了自己的宗地图绘制程序并且独创性的解决了 CAD 地图截块儿与文字压盖问题。
关键词: 宗地图;地图截块;文字压盖
随着我国社会经济的发展,农村集体土地的施
工制度在不断改革,同时为了保护所有人的使用权
及相关的合法权益,做好农村宅基地与集体建设用
地的确权登记工作,并进行相应证件的发放是非常
必要的。宅基地与集体建设用地确权登记发证项目
在绘制完成地籍总图后要批量绘制宗地图,而目前
的绘图软件要么操作复杂要么不能很好的满足要
求,作者在实施过程中开发了自己的程序,并且用
自己的方法解决了 CAD 地图截块与字体压盖问题。
实现批量绘制宗地图需要解决下面几个问题:
1、绘制宗地图框;
2、获取宗地图表头信息;
3、地图截块儿;
4、计算合适的比例尺并缩放宗地图;
5、生成界址点号与边长;
6、生成四至。
这其中我们着重介绍“地图截块儿”和“生成
界址点号与边长”。一、地图截块儿:顾名思义也
就是在一张完整的图中截取我们需要的一块儿另
外存放,这其中牵扯到不同类型地物的复制,地物
主要分点状地物,线状地物和已经连接成块儿的块
状地物。对于点状地物我们只要判断是否在我们截
取的范围内就可以了,而线状地物是难点,如图 1:
把方框中的小路截取处来,如果是一张纸的话直接
剪开就可以了,但是电子的地图却不行。解决问题
的思路是这样的,首先获取线性地物的坐标,然后
判断哪些坐标在方框内,把在方框内相连的坐标生
成多段线,然后添加和截取地物一样的扩展属性,
线性地物就截取了。
图 1
图 2
方法介绍起来简单,解决此问题的难点在于代码的
编写,下面是解决此问题的源代码:
For i = 0 To m
Pt(0) = Coords(2 * i)
Pt(1) = Coords(2 * i + 1)
If isPointIsInTangle(Pt, zxPt, ysPt) Then
n = n + 1
ReDim Preserve Points(2 * n + 1) As Double
Points(2 * n) = Pt(0) + (Point2(0) - Point1(0))
Points(2 * n + 1) = Pt(1) + (Point2(1) -
Point1(1))
If i = m Then
If n >= 1 Then
If Obj.closed = True And Points(2 *
n) = Coords(2 * m) + (Point2(0) –Point1(0))
Then
ReDim Pts2(UBound(Points))
For j = 0 To UBound(Points)
Pts2(j) = Points(j)
Next j
Else
Set ObjLine=ThisDrawing.ModelSpace.AddL
ightWeightPolyline(Points)
Call CopyDatasToEnt(Obj,ObjLine) '复制属性
If ZoomP <> 1 Then
ObjLine.ScaleEntity Point2, ZoomP '缩放对象
End If
End If
n = -1
End If
End If
Else
If n >= 1 Then
If Obj.closed = True And Points(0) = Coords(0)
+ (Point2(0) - Point1(0)) And Points(1) =
Coords(1) + (Point2(1) - Point1(1)) Then
ReDim Pts1(UBound(Points)) As Double
For j = 0 To UBound(Points)
Pts1(j) = Points(j)
Next j
Else
Set ObjLine =
ThisDrawing.ModelSpace.AddLightWeightPolyli
ne(Points)
Call CopyDatasToEnt(Obj, ObjLine)
If ZoomP <> 1 Then
ObjLine.ScaleEntity Point2, ZoomP
End If
If IsEqual(GetBmFromEnt(ObjLine), "300000")
Then
Call AddLinZongName(ObjLine, Point2)
End If
End If
ElseIf n = 0 Then
n = -1
End If
End If
Next i
如果是块状地物,分开块状地物里的点和线,
分别按上面两部操作再和成块状地物就可以了。二、
字体压盖的问题:如图 2 是用目前通用的一个软件
生成的宗地图的一角,从图中大家可以看到界址点
号与界址边长相互压盖,这样的宗地图上交肯定是
不行的。下面介绍下这个问题怎么解决:界址点号
和界址边长的朝向都是固定的,界址点号的朝向是
北,界址边长的朝向是向西和向北。在生成界址点
号和界址边长时,按权属线的的节点顺序生成,每
生成一个文字记录下它的中心坐标和长度,用中心
坐标和长度计算出它在图面上占用的空间,把空间
存储到数组中,即将生成下一个文字时,知道文字
的中心点坐标和长度也可以计算出它即将占用的
空间,和之前的空间数组比较,如果有重合把文字
放到另外一个位置,直到和之前的空间数组不重合
为止。这样生成的文字都不会重合了。
图 3
如图 3 是用此程序生成的宗地图的一角,从图中可
以看出没有文字压盖现象。
总结:绘制宗地图是一项工作量很大的工作,一个
乡镇就有几万份的宗地图要绘制,如果没有好的方
法好的软件,将会耗费大量的人力物力,此程序很
好的解决了这个问题,并且操作很简单,加载个挂
件在 CAD 上就能完成,大大的节省了宅基地与集体
建设用地确权登记发证项目的时间。另外解决问题
的方法“地图截块儿与文字压盖”可以用到很多 CAD
的绘图项目中去。
参考文献:Donald Hearn(D·赫恩) 等著;蔡士
杰,杨若瑜 译.《计算机图形学》(第四版).北
京:电子工业出版社,2014.