mapx+vb实战摘要(二)

   ppp80上个月去天津(2004)做这个项目,加班加点忙乎过了十一,现在项目终于完成了第一阶段,可以闲下来总结一下了。
   在做这个项目之前我只是自学了一个月的supermap,不过感觉gis这些东西都是大同小异,没什莫可怕;关键比较郁闷的是本来根本就是做.net,现在却要用vb实在太。。。算了,赶鸭子上架,不会也得会呀!

    其实本人对这个实在只能称得上一知半解,学的和用的一样多,不过还是给自己和别人留下点东西吧,也许会有帮助呢:)(共五篇)

2 打开地图的两种方法
   a,打开地图集
    Map1.GeoSet =”C:/aa.gst” 
    在地图集里,你可以给地图加颜色,加标注,限制标注的字体,颜色等。这些只能保存到地图集,而不能保存到单一的图层里。所以建议你把图层做成地图集,这样无论是打开还是显示都很方便。
   b,打开图层
    For i = 1 To UBound(Navigation_DefaultMap_Path)
      Map2.Layers.Add Navigation_DefaultMap_Path(i), i
    Next
3添加数据集
  mapx的地图和数据是分开的,你要想制作专题图,查看表的内容,取图元的数据,都要先添加数据集。
 a,添加图层数据集
  Set lyr = curMap.Layers(layerList.Text)
    curMap.DataSets.Add miDataSetLayer, lyr, lyr.Name
 b,添加自定义数据集
  以下函数是添加一个数据集,sqlstr 是sql语句,DsName是数据集的名称。注意: "orderno", 是我在数据库中取的数据集与地图图元的关联。
  Private Function AddJDDs(sqlstr As String, DsName As String) As Boolean
Dim IsRight As Boolean
IsRight = False
'----------------------添加数据集
On Error GoTo ThemedCreate
'------------是否存在该数据集
 Dim ds As MapXLib.Dataset
 
For Each ds In Map1.DataSets
 If ds.Name = DsName Then
 Map1.DataSets.Remove (DsName) '删除数据集
 Exit For
 End If
 Next
 Set ds = Nothing
 '------------------加载数据集----------------------------
 
 Dim Cn As New ADODB.Connection
 Dim Cmd As New ADODB.Command
 Dim rs As New ADODB.Recordset
Dim BindLyr As New BindLayer
Cn.CursorLocation = adUseClient
Cn.Open ConStr
Set Cmd.ActiveConnection = Cn

 Cmd.CommandText = sqlstr
 rs.Open Cmd, , adOpenKeyset, adLockOptimistic
   
BindLyr.LayerType = miBindLayerTypeNormal
If rs.RecordCount <> 0 Then
Map1.DataSets.Add miDataSetADO, rs, DsName, "orderno", , BindLyr
IsRight = True
Else
 MsgBox "无法显示数据,请检查数据是否为空?"
 IsRight = False
End If
rs.Close
Set rs = Nothing
 Cn.Close
 Set Cn = Nothing
  Set Cmd = Nothing
  Set BindLyr = Nothing
AddJDDs = IsRight
 Exit Function
 '-------------------------------------------------------------------
ThemedCreate:
    MsgBox "加载数据集出错! 请检查数据是否正确?" & Err.Description
    IsRight = False
    AddJDDs = IsRight
End Function

4关闭地图
  a,关闭图层
     Dim lyr As MapXLib.Layer
    Dim i As Integer
   
    For i = 0 To List1.ListCount - 1
        If (List1.Selected(i) = True) Then
            Set lyr = fMainForm.Map1.Layers(List1.List(i))
            lyr.DataSets.RemoveAll
   
            fMainForm.Map1.Layers.Remove lyr
        End If
    Next i
    Set lyr = Nothing
  b,全部关闭
     Map1.GeoSet = ""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值