等高线加密基本原理以及算法代码实现
- 算法与数据结构
- 2007-11-22
- 113热度
- 0评论
等高线comtour line指的是地形图上高程相等的各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线。垂直投影到一个标准面上,并按比例缩小画在图纸上,就得到等高线。等高线也可以看作是不同海拔高度的水平面与实际地面的交线,所以等高线是闭合曲线。
在用高程点插值生成grid,或先用高程点构建tin,再转为grid的过程中,需要等高线作拦截,避免插值结果的穿透。在arcgis中,由高程点生成grid时是可以选择barrier line的,但发现选了这个选项,运算时间非常的长,我做过一个全省的数据,5天都没有算完,后来想了一个变通的方法。
就是把等高线打散成点,然后把这些点添加到高程点数据中,直接用点数据生成grid。但如果等高线的点不够密,穿透情况非常明显,所以要对等高线的点进行加密,下面是加密代码(VBA),基于的原理就是等高线是由多个IPath构成,不存在弧的问题,可以做均匀线性插值
'等高线加密
Public Sub PolylineInsert()
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
Dim pLayer1 As IFeatureLayer
Set pLayer1 = pMap.Layer(0)
Dim pFC1 As IFeatureClass
Set pFC1 = pLayer1.FeatureClass
Dim pF1 As IFeature, pF2 As IFeature
Dim pFeatCursor1 As IFeatureCursor
Set pFeatCursor1 = pFC1.Search(Nothing, False)
Set pF1 = pFeatCursor1.NextFeature
Dim pPointcol As IPointCollection
Dim pPointcol1 As IPointCollection
Dim pP As IPoint
Dim i As Long, j As Long, k As Integer
Dim pP1 As IPoint, pP2 As IPoint
Dim dx As Double, dy As Double
Do Until pF1 Is Nothing
Set pPointcol1 = New Polyline
Set pPointcol = pF1.Shape
For i = 0 To pPointcol.PointCount - 2
Set pP1 = pPointcol.Point(i)
Set pP2 = pPointcol.Point(i + 1)
pPointcol1.AddPoint pP1
dx = (pP1.X - pP2.X) / 20
dy = (pP1.Y - pP2.Y) / 20
For k = 1 To 19
Set pP = New Point
pP.PutCoords pP1.X - k * dx, pP1.Y - k * dy
pPointcol1.AddPoint pP
Set pP = Nothing
Next k
Next i
pPointcol1.AddPoint pP2
Set pF1.Shape = pPointcol1
pF1.Store
Set pF1 = pFeatCursor1.NextFeature
Loop
MsgBox "ok"
End Sub
这个代码中,我是在等高线每两个角点插入19个点,大家可以把这个数值参数化