动态改变标记


本节内容可以参考CaseStudy目录下的文件"地图.Table"的示例二十九。

本示例的任务是绘制一个离线的中国地图,默认只显示省会城市:

当缩放比例增加到4之后,就显示其他地级市:

你可以通过单击某个城市来“勾选”之,被勾选的城市的标记会变为红色,且被勾选的城市和省会省市一样,始终都会显示:



 

1、将Map控件的"地图来源"属性设置为"None"

2、将窗口的AfterLoad事件代码设置为:

Dim map As GeoMap = e.Form.Controls("Map1").GeoMap
Dim
layer As New VectorLayer()
map.Layers.Add(layer)
layer.Style.Stroke.Color = Color.Gray
layer.LabelVisibility = LabelVisibility.AutoHide
layer.LabelStyle.ForeColor = Color.Green

'
绘制省级行政区域
For
Each dr As DataRow In DataTables("行政区域").Select("level= 1")
    layer.Items.Add(map.CreatePolygon(dr(
"geometry")))
Next

'
绘制城市
For
Each dr As DataRow In DataTables("").DataRows
   
Dim mark As New VectorPlacemark()
    mark.Tag = dr(
"")
    mark.Geometry =
New GeoPoint(dr("经度"), dr("纬度"))
    mark.Marker.Shape = MarkerShape.Circle
    mark.Marker.Caption = dr(
"")
    mark.Marker.LabelPosition = LabelPosition.Right
   
If dr("省会") = True Then
        mark.Marker.Size =
New Size(10, 10) '省会城市的圈圈大一点
   
Else
        mark.Marker.Size =
New Size(8, 8) '非省会城市的圈圈小一点
        mark.Lod =
New Lod(0, 0, 4, 20) '而且缩放比例达到4以后才显示
   
End If
   
If dr("标记") Then
        mark.Style.BackColor = Color.Red
        mark.Lod =
New Lod(0, 0, 0, 20) '始终显示已经勾选的城市,不管是否是省会城市
   
End If
    layer.Items.Add(mark)

Next

3、Msap控件的MouseClick事件代码设置为:

Dim map As GeoMap = e.Sender.GeoMap
Dim
ifo As HitTestInfo = map.HitTest(e.Sender.MousePosition)
If
ifo IsNot Nothing AndAlso ifo.Vector IsNot Nothing Then
   
If TypeOf ifo.Vector Is VectorPlacemark Then
       
Dim mark As VectorPlacemark = ifo.Vector
       
Dim dr As DataRow = DataTables("").Find(" = '" & mark.Tag & "'")
       
If dr IsNot Nothing Then
            dr(
"标记") = Not dr("标记")
           
If dr("标记") Then
                mark.Style.BackColor = Color.Red
                mark.Lod =
New Lod(0, 0, 0, 20) '始终显示已经勾选的城市
           
Else
                mark.Style.BackColor = Color.Transparent
               
If dr("省会") = False Then
                    mark.Lod =
New Lod(0, 0, 4, 20) '未勾选的非省会城市,缩放比例达到4才显示
               
End If
           
End If
       
End If
   
End If
End
If

这里动态改变的是标记的颜色,当然你也可以动态改变标记的形状、大小和标题。


本页地址:http://www.foxtable.com/webhelp/topics/6163.htm