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 = ""