动态改变标记
本节内容可以参考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
这里动态改变的是标记的颜色,当然你也可以动态改变标记的形状、大小和标题。