做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) '如果图层已经存在,删除
定义
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) '如果图层已经存在,删除
相关文章推荐
- 「转」Visual Studio 2005 (C#, VB.NET)的代码质量分析
- DotNetNuke的Skin.vb代码流程分析
- 从封装性来分析vb.net和C#两兄弟的差异
- vb:Cg色彩精灵第三部分: 部分重点代码分析
- [VB.NET]高手写的一句代码,我没见过.请帮我解释解释!!! 谢谢!!!
- 用vb.net写的验证码识别代码
- VB.net 绘图代码
- [VB.NET]来段弱智代码提提神哟 谁帮我把错误给跳过去
- darknet-yolo运行摄像头测试分析及过程主要代码梳理
- Vb.net MakeLong 合并整数代码
- 从VBA宏代码到VB.NET代码
- [VB.NET]if(CheckBox1 != null && CheckBox2 != null ) 转换为VB.net的代码应该是什么?
- 使用VS2010代码分析功能增强ASP.NET应用程序安全
- sharpziplib是一个不错的在线压缩软软件.用VB.net简单写了个使用代码!
- VB.Net程序设计:代码简化过程(备忘录)
- Linux 网络协议栈开发代码分析篇之数据收发(一) —— netif_receive_skb()函数
- n[VB.NET]关闭代码
- 应用框架的设计与实现——.NET平台(9 消息队列服务代码分析)
- 推荐n个VB.Net to C# (C# to VB.net)代码转换(互换互转)工具
- asp.net mvc 微信支付代码分析(根据沐雪微信平台3.1商城业务来分析)