您的位置:首页 > 编程语言 > VB

做GIS等值分析vb.net代码

2007-11-02 11:19 344 查看
俺的qq:476440345 多交流

定义

Function LayerCreateISOLine(DestLayerName As String, SrcLayerIndex As Long, BoundLayerIndex As Long, BoundFeatureID As Long, Flag As emISOCreatFlag, bUsePixelUnit As Boolean, Precision As Double, AffectRange As Double, ControlRange As Double, SrcField As Long, ClsValue As TGOValuesDouble, ClsColor As TGOValuesLong) As Long

功能描述

从点层及其数据形成等值线的函数,TopMap等值线函数可以指定等值线分级、颜色及裁剪边界。

返回值

成功返回非负数,失败返回负数

注意

如果地图中已有同名图层名称,创建图层将失败;如果未设置地图的“新建图层覆盖已有图层目录”,要求地图目录下不能有同名的图层目录,否则创建图层也将失败。

如果点的指定数值字段为空,则该点不参与运算,相当于不存在。可在调用本函数前,首先调用FieldSetEmpty函数清空图层属性数据表,然后向有数值的字段赋值,以避免原有数据对创建等值线的影响。

参数说明

DestLayerName:传入参数,形成的图层的名称。不能为空串,注意不能与现有图层重名

SrcLayerIndex:传入参数,用于形成等值线的散点图层

BoundLayerIndex:传入参数,创建的等值线由一个面进行裁剪,只保留该面之内的部分。本参数为用于裁剪的面所在的图层索引

BoundFeatureID:传入参数,参考上一参数说明,本参数为用于裁剪的实体在图层上的索引,注意必须为面实体

Flag:传入参数,散点插值成为等值线的插值算法类型,参考 emISOCreatFlag

bUsePixelUnit:传入参数,如果为True,以下参数涉及到的精度、范围的值都为像素单位,函数内部采用当前显示地图比例尺情况下的像素值对应的地图单位进行计算,所以进行计算时,这些参数对应的数值随地图缩放显示而不同;如果为False,精度单位采用地图单位,大小固定

Precision:传入参数,插值精度,进行插值时,各离散点数值必须插值到栅格上,这个数值为栅格的大小, 必须为正数,数值越大精度越低。bUsePixel如果为True,则栅格精度为Precision像素,为False则 Precision 为地图单位

AffectRange:传入参数,插值影响范围限定,进行栅格插值计算时,任何一个栅格值为邻近的离散点根据某种算法计算得到,这个参数指定了栅格值计算时,距离不超过 AffectRange 的数值点对其起作用,超过这一范围的点对该计算点无影响
可传入-1, 表示任何栅格点的计算考虑整个边界区域内的点都对齐起作用。
注意:对于多面函数法,宜传入-1。

ControlRange:传入参数,插值控制范围。对于一个计算点,距离不超过 ControlRange范围内如果没有有效的数值点,则该计算点值衰减到0,用于一些特殊场合。可传入-1忽略本参数

SrcField:传入参数,散点图层的特定操作字段索引或名称,该字段必须为数值型字段,为进行插值分析所需的数值

ClsValue:传入参数,面分布分级级间数值,为一个实数对象TGOValuesDouble。设置分级值的时候注意数值必须从小到大

ClsColor:传入参数,各分级的颜色,为一个整数对象TGOValuesLong。元素个数不能小于ClsValue的元素个数

'创建等值线图层
'全图显示:
TGMAPX1.DrawMapFull()
'由特定图层的某字段动态创建等值线图层. 本例以“墒情测站图1”的“平均墒情一”字段内容创建墒情为10、15的
'等值线,以红、蓝两种颜色表示:
Dim iLayerIndex As Long, iNewLayer As Long, iBorderIndex As Long, iFieldIndex As Long
Dim MapPath As Object
Dim color As New TGMAPXLib.TGOValuesLong
Dim val As New TGMAPXLib.TGOValuesDouble
TGMAPX1.LayerIndexGet("墒情测站图", iLayerIndex)
TGMAPX1.LayerSet(iLayerIndex, TGMAPXLib.emLayerFlag.ETGLayerVisibleStatus, False)

'删除已经存在的等值线/面分布图及其图层, 如果图层在地图中已经存在或者存在相应的图层目录, 创建图层将失败
Call ClearLayers()

'从点图层创建等值线图层:
'自定义等值线大小:
val.Add(0, 10.0#)
val.Add(1, 15.0#)
val.Add(-1, 20.0#)
'指定两个等值线的颜色:
Dim crColor As New TGMAPXLib.TGOColor
Dim iValue As Long
crColor.SetColorCOLORREF(255, RGB(255, 0, 0))
crColor.GetColorLong(iValue)
color.Add(0, iValue)
crColor.SetColorCOLORREF(255, RGB(0, 255, 0))
crColor.GetColorLong(iValue)
color.Add(1, iValue)
crColor.SetColorCOLORREF(255, RGB(0, 0, 255))
crColor.GetColorLong(iValue)
color.Add(2, iValue)
TGMAPX1.LayerIndexGet("墒情测站图点", iLayerIndex) '数据图层
TGMAPX1.LayerIndexGet("地级行政区矢量图面", iBorderIndex)
'以“地级行政区矢量图”为边界(边界图层矢量图)
'把作为边界的图层中的所有面实体组合成一个面实体,生成的等值线只截取在边界图层范围内的部分
'进行分析的字段:
TGMAPX1.FieldIndexGet(iLayerIndex, "20公分一", iFieldIndex) '平均墒情一

'如果“墒情测站图”和边界图层都存在:
If iLayerIndex >= 0 And iBorderIndex >= 0 Then
'生成等值线图层,图层的索引号为iNewLayer
TGMAPX1.LayerCreateISOLine("T_墒情等值线", iLayerIndex, iBorderIndex, 0, TGMAPXLib.emISOCreatFlag.ETGISOCreatFlagMQ, True, 4.0#, -1.0#, -1.0#, iFieldIndex, val, color)
TGMAPX1.LayerIndexGet("T_墒情等值线", iNewLayer)
'如果图层创建成功:
If iNewLayer >= 0 Then
'使新图层不可选择、不可编辑:
TGMAPX1.LayerSet(iNewLayer, TGMAPXLib.emLayerFlag.ETGLayerSelectStatus, False)
TGMAPX1.LayerSet(iNewLayer, TGMAPXLib.emLayerFlag.ETGLayerEditStatus, False)
'使新图层置于最顶层:
TGMAPX1.LayerSet(iNewLayer, TGMAPXLib.emLayerFlag.ETGLayerIndex, 0)
End If
End If
TGMAPX1.DrawMap() '重新绘制地图
TGMAPX1.MapSave(GetMapPath() & "map10/Map.TGP")
End Sub
Private Sub ClearLayers()
'删除已经存在的等值线/面分布图及其图层, 如果图层在地图中已经存在或者存在相应的图层目录, 创建图层将失败
Dim iLayerIndex As Long
Dim strmappath As String

'等值线图层:
TGMAPX1.LayerIndexGet("T_墒情等值线", iLayerIndex)
If iLayerIndex >= 0 Then TGMAPX1.LayerDelete(iLayerIndex) '如果图层已经存在,删除

'面分布图层:
TGMAPX1.LayerIndexGet("T_墒情面分布", iLayerIndex)
If iLayerIndex >= 0 Then TGMAPX1.LayerDelete(iLayerIndex) '如果图层已经存在,删除

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: